我正在尝试将 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/