Serilog 不创建日志文件
Serilog does not create log files
Serilog 不会创建日志文件 - 因此(我认为)不会记录任何内容。
由于目标应该是一个微服务,我使用的是 CQRS 模式。
这是我的 Startup.cs
private readonly ISession session;
private readonly ILogger logger;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var baseDirectory = Directory.GetDirectoryRoot(AppDomain.CurrentDomain.BaseDirectory);
Log.Logger = new LoggerConfiguration()
.WriteTo
.Logger(lc => lc.Filter
.ByIncludingOnly(e => e.Level == LogEventLevel.Information || e.Level == LogEventLevel.Debug)
.WriteTo.RollingFile(Path.Combine(baseDirectory, "/Logs/info.log")))
.WriteTo
.Logger(lc => lc.Filter
.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
.WriteTo.RollingFile(Path.Combine(baseDirectory, "/Logs/error.log")))
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
loggerFactory.AddSerilog();
...//To shorten this example in Whosebug, I've excluded the standard code. But in reality they are of course there
}
这是我的 Class,其中记录器将由 DI 注入:
public MaterialCommandHandler(ISession session, ILogger<MaterialCommandHandler> logger)
{
this.session = session;
this.logger = logger;
}
和位于 MaterialCommandHandler class 中的 Handle 方法,我想在其中写入一些内容到日志文件中
public async Task Handle(CreateMaterialCommand command)
{
var material = new Material(command.Id, command.TechDesc, command.Description, command.MaterialClass);
logger.LogDebug($"{DateTimeOffset.UtcNow} - {nameof(CreateMaterialCommand)} - received for {material} with {nameof(command.TechDesc)} : {command.TechDesc}.");
await session.Add(material);
await session.Commit();
logger.LogDebug($"{DateTimeOffset.UtcNow} - {nameof(CreateMaterialCommand)} - received for {material} with {nameof(command.TechDesc)} : {command.TechDesc}.");
}
任何人都知道为什么没有创建文件 - 并且不会记录任何内容?
您在日志构建结束时遗漏了 .CreateLogger()
语句,但我认为真正的问题是您的 Path.Combine
语句可能导致路径无效或您正在不期待。 Path.Combine
有一些您可能不知道的恼人行为。考虑以下因素:
Path.Combine(@"C:\Temp", @"Logs\mylog.txt"); // C:\Temp\Logs\mylog.txt
Path.Combine(@"C:\Temp\", @"Logs\mylog.txt"); // C:\Temp\Logs\mylog.txt
Path.Combine(@"C:\Temp\", @"\Logs\mylog.txt"); // \Logs\mylog.txt
Path.Combine(@"C:\Temp", @"\Logs\mylog.txt"); // \Logs\mylog.txt
Serilog 不会创建日志文件 - 因此(我认为)不会记录任何内容。 由于目标应该是一个微服务,我使用的是 CQRS 模式。
这是我的 Startup.cs
private readonly ISession session;
private readonly ILogger logger;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var baseDirectory = Directory.GetDirectoryRoot(AppDomain.CurrentDomain.BaseDirectory);
Log.Logger = new LoggerConfiguration()
.WriteTo
.Logger(lc => lc.Filter
.ByIncludingOnly(e => e.Level == LogEventLevel.Information || e.Level == LogEventLevel.Debug)
.WriteTo.RollingFile(Path.Combine(baseDirectory, "/Logs/info.log")))
.WriteTo
.Logger(lc => lc.Filter
.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
.WriteTo.RollingFile(Path.Combine(baseDirectory, "/Logs/error.log")))
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
loggerFactory.AddSerilog();
...//To shorten this example in Whosebug, I've excluded the standard code. But in reality they are of course there
}
这是我的 Class,其中记录器将由 DI 注入:
public MaterialCommandHandler(ISession session, ILogger<MaterialCommandHandler> logger)
{
this.session = session;
this.logger = logger;
}
和位于 MaterialCommandHandler class 中的 Handle 方法,我想在其中写入一些内容到日志文件中
public async Task Handle(CreateMaterialCommand command)
{
var material = new Material(command.Id, command.TechDesc, command.Description, command.MaterialClass);
logger.LogDebug($"{DateTimeOffset.UtcNow} - {nameof(CreateMaterialCommand)} - received for {material} with {nameof(command.TechDesc)} : {command.TechDesc}.");
await session.Add(material);
await session.Commit();
logger.LogDebug($"{DateTimeOffset.UtcNow} - {nameof(CreateMaterialCommand)} - received for {material} with {nameof(command.TechDesc)} : {command.TechDesc}.");
}
任何人都知道为什么没有创建文件 - 并且不会记录任何内容?
您在日志构建结束时遗漏了 .CreateLogger()
语句,但我认为真正的问题是您的 Path.Combine
语句可能导致路径无效或您正在不期待。 Path.Combine
有一些您可能不知道的恼人行为。考虑以下因素:
Path.Combine(@"C:\Temp", @"Logs\mylog.txt"); // C:\Temp\Logs\mylog.txt
Path.Combine(@"C:\Temp\", @"Logs\mylog.txt"); // C:\Temp\Logs\mylog.txt
Path.Combine(@"C:\Temp\", @"\Logs\mylog.txt"); // \Logs\mylog.txt
Path.Combine(@"C:\Temp", @"\Logs\mylog.txt"); // \Logs\mylog.txt