c# - 如何在.Net 5项目中将Sentry连接到NLog

标签 c# .net logging nlog sentry

我正在尝试将 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://<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="641c1c1c241c1c1c4a0d0a030117104a17010a10161d4a0d0b" rel="noreferrer noopener nofollow">[email protected]</a>/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/)。有人可以帮我吗? 谢谢

最佳答案

我是这样解决的:

        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://<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="08707070487070702661666f6d7b7c267b6d667c7a71266167" rel="noreferrer noopener nofollow">[email protected]</a>/xxx";
                    o.Layout = "${message}";
                    o.BreadcrumbLayout = "${logger}: ${message}";
                    o.MinimumBreadcrumbLevel = LogLevel.Info;
                    o.MinimumEventLevel = LogLevel.Warn;
                    o.AddTag("logger", "${logger}");
                });
            return config;
        }

它有效。

关于c# - 如何在.Net 5项目中将Sentry连接到NLog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67173555/

相关文章:

c# - 未排序数组中的最长连续序列

c# - C# 中的命名空间作用域

C# 使用 GraphicsPath 在图像上倾斜文本

c# - .NET 日志记录类不写

python - 是否可以在 python 日志记录配置中使用环境变量?

c# - WPF/C# 将 ObservableCollection 中的项目的属性更改更新到 ListBox

.net - 根据 IP 范围限制对 Active Directory 的访问

.net - 如何在 FileSavePicker 中接受任何文件类型?

c# - .NET 相当于 Java NIO 选择器

elasticsearch - 如何创建一个记录到特定 Elasticsearch 索引的 Laravel Logger?