我正在尝试使用 Serilog 来满足我的 ASP.NET Core Web 应用程序的日志记录要求。 我对这两个框架都是新手。 我真的很想了解如何配置记录器,以便我可以同时将*单独的数据记录到文件和数据库接收器(例如从同一控制器类中)。 我尝试在互联网上进行研究,因为我读到 Serilog 有一个很好的文档,但我未能找到满足我的要求的确切配置。
有人对另一个与多个接收器相关的 stackoverflow 问题提出了建议这里。
我尝试执行以下操作:
public static void Main(string[] args)
{
var logger1 = new LoggerConfiguration()
.WriteTo.File("Logs\\system_.log", rollingInterval: RollingInterval.Day)
.CreateLogger();
var logger2 = new LoggerConfiguration()
.WriteTo.MSSqlServer(connectionString,
sinkOptions: new MSSqlServerSinkOptions { TableName = "logs" })
.CreateLogger();
logger1.Information("hello to file");
logger2.Information("hello to database");
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseSerilog();
这部分有效,我能够分别在日志文件和数据库(Sql 服务器)中看到不同的日志,但现在我不知道如何从控制器类内部使用这两个配置。
由于我的控制器类中的以下代码不会在任何接收器中记录任何内容
public class UserController : ControllerBase
{
private ILogger<UserController> _logger;
public UserController(ILogger<UserController> logger)
{
_logger = logger;
_logger.LogInformation("Writing to log file with INFORMATION severity level.");
_logger.LogWarning("Writing to log file with WARNING severity level.");
_logger.LogError("Writing to log file with ERROR severity level.");
}
任何建议都会非常有帮助,提前致谢。
有点迟了,但对于那些和我一样寻找同样东西的开发者来说。 您可以在配置中添加额外的行“WriteTo”。一个例子:
string conn = config.GetConnectionString("DefaultConnection") ?? string.Empty;
var sinkOpts = new MSSqlServerSinkOptions();
sinkOpts.TableName = "Logging";
sinkOpts.AutoCreateSqlTable = true;
builder.Host.UseSerilog((ctx, lc) => lc
.MinimumLevel.Fatal()
.MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Fatal)
.Enrich.FromLogContext()
.WriteTo.File(Path.Combine(logPath, "log.txt"),
outputTemplate: "{Timestamp:dd/MM/yyyy HH:mm:ss} {Level:u15} Class: {SourceContext:l, 50}{NewLine} {Message:lj}{NewLine} {Exception}",
rollingInterval: RollingInterval.Month, fileSizeLimitBytes: 10000000)
.WriteTo.MSSqlServer(
connectionString: conn,
sinkOptions: sinkOpts
));
您必须添加 MSSQL 和文件的接收器才能使其工作。 Conn 不能为空,因为它是在代码的其他部分中检查的。代码中的 logPath 也设置得更高。