【问题标题】:How to connect Sentry to NLog in a .Net 5 project如何在 .Net 5 项目中将 Sentry 连接到 NLog
【发布时间】:2021-07-14 07:58:58
【问题描述】:

我正在尝试将 Sentry 连接到 NLog。 我想在文件文本中写入级别为警告级别的日志,而在 Sentry 中写入其他级别的日志。

这是我的 NLogConfiguration 文件:

            public static LoggingConfiguration ConfigureTarget()
        {
            var config = new LoggingConfiguration();
            var fileTarget = new FileTarget
            {
                FileName = "${basedir}\\Logger\\internal_logs\\Newfile.txt",
                Layout = "${longdate}|${level:uppercase=true}|${logger}|${message}",
            };
            config.AddRule(LogLevel.Debug, LogLevel.Fatal, fileTarget, "*", false);
            var starget = new Sentry.NLog.SentryTarget
            {
                Dsn = "https://xxx@xxx.ingest.sentry.io/xxx",
                MinimumEventLevel = "information",
                Layout = "${message}"
            };
            config.AddRule(LogLevel.Debug, LogLevel.Fatal, starget, "*", false);
           
            LogManager.Configuration = config;

            LogManager.ReconfigExistingLoggers();
            Sentry.SentrySdk.Init();

            return config;
        }

这是我的程序.cs:

    public class Program
    {
        public static void Main(string[] args)
        {
            NLog.Config.LoggingConfiguration config = NLogConfiguration.ConfigureTarget();
            var logger = NLog.Web.NLogBuilder.ConfigureNLog(config).GetCurrentClassLogger();
            try
            {
                logger.Debug("init main");
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception exception)
            {
                logger.Error(exception, "Stopped program because of exception");
                throw;
            }
            finally
            {
                NLog.LogManager.Shutdown();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(LogLevel.Trace);
                })
                .UseNLog();

这是我的创业公司:

        public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "NLogSentryExercise", Version = "v1" });
            });
        }

       
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "NLogSentryExercise v1"));
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

我也尝试遵循官方文档,但也许我犯了一些错误 (https://docs.sentry.io/platforms/dotnet/guides/nlog/)。有人可以帮我吗? 谢谢

【问题讨论】:

  • 你不会错过对AddRulestarget 的呼叫吗?
  • 对不起,我从代码中删除了它
  • FileTarget 正在工作,正在写信给NewFile.txt ?
  • 是的,它可以工作并写入日志

标签: c# .net logging nlog sentry


【解决方案1】:

我是这样解决的:

        public static LoggingConfiguration ConfigureTarget()
        {
            var config = new LoggingConfiguration();
            var fileTarget = new FileTarget
            {
                FileName = "${basedir}\\Logger\\internal_logs\\logFile.txt",
                Layout = "${longdate}|${level:uppercase=true}|${logger}|${message}",
            };
            config.AddRule(LogLevel.Trace, LogLevel.Info, fileTarget, "*", false);
            config.AddSentry(o =>
                {
                    o.Dsn = "https://xxx@xxx.ingest.sentry.io/xxx";
                    o.Layout = "${message}";
                    o.BreadcrumbLayout = "${logger}: ${message}";
                    o.MinimumBreadcrumbLevel = LogLevel.Info;
                    o.MinimumEventLevel = LogLevel.Warn;
                    o.AddTag("logger", "${logger}");
                });
            return config;
        }

有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-01
    • 2020-11-04
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多