我有 ASP.NET WebApi 应用程序和 apgeneric 类,如下所示:
namespace MyNamespace;
public class MyService<T>
{
private readonly ILogger<MyService<T>> logger;
public MyService(ILogger<MyService<T>> logger)
{
this.logger = logger;
}
public void DoWork()
{
logger.LogDebug("Hello World!");
}
}
我尝试了以下配置来覆盖 MyService 内的日志级别,但没有成功:
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"MyNamespace.MyService": "Debug"
}
}
}
}
和
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"MyNamespace.MyService<>": "Debug"
}
}
}
}
如何仅覆盖此类的日志级别?
你们非常接近。我有一个示例,其中我覆盖了控制器类的日志记录级别。
应用程序设置.json
{ "Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Debug", "Serilog.Sinks.File", "Serilog.Enrichers.Thread", "Serilog.Enrichers.Process", "Serilog.Expressions" ],
"MinimumLevel": {
"Override": {
"SeriLogWebAPI.Controllers" : "Error"
}
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:yyyy:MM:dd hh:mm:ss} {CorrelationId} {Level:u3}] {Message:lj}{NewLine}{Exception}"
}
}]}}
WeatherForecastController.cs
using Microsoft.AspNetCore.Mvc;
namespace SeriLogWebAPI.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
_logger.LogInformation("WeatherForecast controller called ");
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogInformation("WeatherForecast get method Starting.");
_logger.LogDebug("WeatherForecast get method Starting.");
_logger.LogWarning("WeatherForecast get method Starting.");
_logger.LogCritical("WeatherForecast get method Starting.");
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}
这会将我的日志记录限制为具有
Error
及以上日志级别的任何内容。这就是为什么在我的控制台上它只记录 Fatal/Critical
消息,而不记录其他较低级别的日志消息。
在您的情况下,您只需要包含类的名称空间。在您的
appsettings.json
中将 "MyNamespace.MyService<>"
替换为 "MyNamespace"
。如下所示:
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"MyNamespace": "Debug"
}
}
}
}