C# Serilog不记录信息日志
在.NET Core 2.1项目中,我安装了C# Serilog不记录信息日志,c#,asp.net-core,asp.net-core-2.1,serilog,C#,Asp.net Core,Asp.net Core 2.1,Serilog,在.NET Core 2.1项目中,我安装了Serilog,但由于某些原因,它不会记录信息事件。不过,它会记录错误事件 在我的应用程序设置中,我有: "Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Fatal", "System": "Fatal"
Serilog
,但由于某些原因,它不会记录信息事件。不过,它会记录错误事件
在我的应用程序设置中,我有:
"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,以查看这是否会使其生效,但我似乎无法将低于Error的任何内容输出到日志文件 通过构造函数将日志注入控制器,以便使用它
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
构造函数
private readonly Microsoft.Extensions.Logging.ILogger _log;
public HomeController(ILogger<HomeController> logger)
{
_log = logger;
}
在Program.cs中添加useserlog
:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog();
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.useserlog();
结果:
确保使用在构造函数中分配的控制器中创建的变量。不要使用Logger.LogInformation。使用日志信息。正在注入的记录器就是正在配置的记录器。Logger.LogInformation使用的是Microsoft Logger,而不是您设置的serlilog。Serilog应该是.Information而不是.LogInformation。是的,在controller-ctor中我有ILogger-Logger,您是否有第二个
.json
文件,例如appSettings.Development.json
或appSettings.Production.json
,这覆盖了最低级别?另外,我看到您正在使用AddSerilog()
-这已被useserlog()
取代,避免了Serilog和默认记录器实现之间的尴尬交互;所有的细节都在:-HTHAs我在上面评论了问题是没有让日志工作。问题在于如何让信息级日志正常工作。会记录错误,但不会记录信息。json中的覆盖将阻止记录大量信息。还尝试将默认级别设置为debug。我尝试将该级别设置为debug和verbose,但只有错误会写入日志文件。当我键入logger时。在VisualStudio2019中,我没有获取信息的选项;intellisense为我提供了登录信息、LogDebug等以及日志。(这是.NET Core而不是.NET Framework)这没有使用Serilog:private readonly Microsoft.Extensions.Logging.ILogger\u log;它从程序类记录为ok。但在我的控制器中,它不是日志记录
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog();