使用 Serilog .NET Core 记录不输出
Logging with Serilog .NET Core not outputting
PS:我的问题出在我身上,而不是代码上。代码很好。我需要将 .WriteTo.Console()
更改为 .WriteTo.Debug()
(并获得正确的 nuget 包)。
我正在尝试在 .NET Core Web Api 中使用 Serilog 从我的日志中输出信息。但是没有输出相关信息(即我要记录的信息)。
我已经安装了以下 Serilog nuget 包:
- Serilog
- Serilog.AspNetCore
- Serilog.Sinks.Console
- Serilog.Sinks.File
- Serilog.Sinks.RollingFile
我考虑过在 appSettings.json 中设置我的配置设置,但如果可能的话我更愿意这样做。
这是我的 Program.cs
文件。
public class Program
{
public static void Main(string[] args)
{
// Create the logger
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
Log.Information("ah there you are");
Log.Debug("super");
Log.Error("super1");
Log.Warning("super2");
try
{
Log.Information("Starting web host");
// Program.Main logic
Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
Console.WriteLine(ex.Message);
}
finally
{
// Close and flush the log.
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog(); // set serilog as the loggin provider
}
我已经在我的 Startup.cs
中进行了设置,以备不时之需。
public class Startup
{
private readonly ILogger _logger;
public Startup(IConfiguration configuration, ILogger<Startup> logger)
{
Configuration = configuration;
_logger = logger;
}
}
下面是我 运行 我的应用程序得到的输出。这并不重要(我已经多次搜索以确认我没有遗漏任何东西。大多数情况下,我附上这张照片以确认我确实在寻找正确的区域)。
有什么想法吗?
您需要在 programs.cs
中配置您的记录器
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog((context, configuration) => configuration
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Console(),
preserveStaticLogger:true);
}
您可以删除所有其他 Serilog 引用(在 startup.cs 中)和 "Log.CloseAndFlush()" 指令(它将自动关闭)
然后你可以在任何你想要的地方注入一个ILogger<T>
接口。
顺便说一句:我不确定是否需要 "preserveStaticLogger"。
PS:我的问题出在我身上,而不是代码上。代码很好。我需要将 .WriteTo.Console()
更改为 .WriteTo.Debug()
(并获得正确的 nuget 包)。
我正在尝试在 .NET Core Web Api 中使用 Serilog 从我的日志中输出信息。但是没有输出相关信息(即我要记录的信息)。
我已经安装了以下 Serilog nuget 包:
- Serilog
- Serilog.AspNetCore
- Serilog.Sinks.Console
- Serilog.Sinks.File
- Serilog.Sinks.RollingFile
我考虑过在 appSettings.json 中设置我的配置设置,但如果可能的话我更愿意这样做。
这是我的 Program.cs
文件。
public class Program
{
public static void Main(string[] args)
{
// Create the logger
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
Log.Information("ah there you are");
Log.Debug("super");
Log.Error("super1");
Log.Warning("super2");
try
{
Log.Information("Starting web host");
// Program.Main logic
Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
Console.WriteLine(ex.Message);
}
finally
{
// Close and flush the log.
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog(); // set serilog as the loggin provider
}
我已经在我的 Startup.cs
中进行了设置,以备不时之需。
public class Startup
{
private readonly ILogger _logger;
public Startup(IConfiguration configuration, ILogger<Startup> logger)
{
Configuration = configuration;
_logger = logger;
}
}
下面是我 运行 我的应用程序得到的输出。这并不重要(我已经多次搜索以确认我没有遗漏任何东西。大多数情况下,我附上这张照片以确认我确实在寻找正确的区域)。
有什么想法吗?
您需要在 programs.cs
中配置您的记录器 public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog((context, configuration) => configuration
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Console(),
preserveStaticLogger:true);
}
您可以删除所有其他 Serilog 引用(在 startup.cs 中)和 "Log.CloseAndFlush()" 指令(它将自动关闭)
然后你可以在任何你想要的地方注入一个ILogger<T>
接口。
顺便说一句:我不确定是否需要 "preserveStaticLogger"。