Serilog 不记录信息日志
Serilog not logging information logs
在我的 .NET Core 2.1 项目中我安装了 Serilog
,但由于某些原因它不会记录信息事件。不过,它会记录错误事件。
在我的 appSettings 中我有:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Fatal",
"System": "Fatal"
}
},
"WriteTo": [
{
"Name": "File",
"Args": {
"restrictedToMinimumLevel": "Information",
"path": "D:\Web\098_VDSNet4\Logs\API.AdminPortal\.txt",
"rollingInterval": "Day"
}
}
]
}
在我的 Startup.cs 中我有:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
services.AddLogging(logging =>
logging.AddSerilog(dispose: true)
);
在我的代码中:
public IActionResult Post(Address address)
{
string functionName = "AddressController:Post";
try
{
logger.LogInformation($"{functionName}");
// TOOD Additional Address validation
addressRepository.Add(address);
addressRepository.Save();
return Ok(address);
}
catch(Exception ex)
{
logger.LogError(ex, $"{functionName}: There was an error creating the address");
return BadRequest();
}
}
logger.LogInformation
(我也试过 logger.LogDebug
,那也不管用)不输出任何东西。但是 logger.LogError
确实记录了正确的错误。
我已经尝试将默认级别更改为 Verbose 以查看是否会启动它,但我似乎无法将错误以下的任何内容输出到日志文件。
通过构造函数将您的日志注入控制器以便使用它。
using Serilog;
public class MyController : Controller
{
private readonly ILogger _log;
public MyController(ILogger log)
{
_log = log;
}
public IActionResult Post(Address address)
{
//Make sure you are using the variable you set up in this controller
_log.Information**("Hello World!");
}
}
您必须将 ILogger<HomeController>
接口注入到您的 HomeController
构造函数中。
private readonly Microsoft.Extensions.Logging.ILogger _log;
public HomeController(ILogger<HomeController> logger)
{
_log = logger;
}
你必须告诉 asp.net core
从哪里读取配置(在 Program.cs
中添加):
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.Build();
在 Program.cs 添加 UseSerilog
:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog();
结果:
确保您使用的是在构造函数中分配的控制器中创建的变量。不要使用 Logger.LogInformation。使用 _log.Information。您注入的记录器就是您正在配置的记录器。 Logger.LogInformation 使用的是 Microsoft 记录器,而不是您设置的 serlilog。 Serilog 将是 .Information 而不是 .LogInformation。
在我的 .NET Core 2.1 项目中我安装了 Serilog
,但由于某些原因它不会记录信息事件。不过,它会记录错误事件。
在我的 appSettings 中我有:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Fatal",
"System": "Fatal"
}
},
"WriteTo": [
{
"Name": "File",
"Args": {
"restrictedToMinimumLevel": "Information",
"path": "D:\Web\098_VDSNet4\Logs\API.AdminPortal\.txt",
"rollingInterval": "Day"
}
}
]
}
在我的 Startup.cs 中我有:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
services.AddLogging(logging =>
logging.AddSerilog(dispose: true)
);
在我的代码中:
public IActionResult Post(Address address)
{
string functionName = "AddressController:Post";
try
{
logger.LogInformation($"{functionName}");
// TOOD Additional Address validation
addressRepository.Add(address);
addressRepository.Save();
return Ok(address);
}
catch(Exception ex)
{
logger.LogError(ex, $"{functionName}: There was an error creating the address");
return BadRequest();
}
}
logger.LogInformation
(我也试过 logger.LogDebug
,那也不管用)不输出任何东西。但是 logger.LogError
确实记录了正确的错误。
我已经尝试将默认级别更改为 Verbose 以查看是否会启动它,但我似乎无法将错误以下的任何内容输出到日志文件。
通过构造函数将您的日志注入控制器以便使用它。
using Serilog;
public class MyController : Controller
{
private readonly ILogger _log;
public MyController(ILogger log)
{
_log = log;
}
public IActionResult Post(Address address)
{
//Make sure you are using the variable you set up in this controller
_log.Information**("Hello World!");
}
}
您必须将 ILogger<HomeController>
接口注入到您的 HomeController
构造函数中。
private readonly Microsoft.Extensions.Logging.ILogger _log;
public HomeController(ILogger<HomeController> logger)
{
_log = logger;
}
你必须告诉 asp.net core
从哪里读取配置(在 Program.cs
中添加):
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.Build();
在 Program.cs 添加 UseSerilog
:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog();
结果:
确保您使用的是在构造函数中分配的控制器中创建的变量。不要使用 Logger.LogInformation。使用 _log.Information。您注入的记录器就是您正在配置的记录器。 Logger.LogInformation 使用的是 Microsoft 记录器,而不是您设置的 serlilog。 Serilog 将是 .Information 而不是 .LogInformation。