我在appsettings.json
中配置了Serilog,以通过tcp在我的asp net core web api
应用中通过tcp将条目记录到 Logstash 中:
{
"Serilog": {
"Using": [ "Serilog.Sinks.Network" ],
"MinimumLevel": {
"Default": "Information"
},
"WriteTo:0": {
"Name": "TCPSink",
"Args": {
"uri": "tcp://172.26.48.39:5066"
}
},
"Properties": {
"app_id": "my-service-api",
"index": "my-app-"
}
},
...
}
但是它记录了太多消息。例如,我在令牌控制器中有一个CreateToken操作方法:
[HttpPost]
public ActionResult<string> CreateToken([FromBody] CredentialsModel credentials)
{
var user = _authentication.Authenticate(credentials);
if (user == null)
{
Log.Warning("Unable to authenticate an user: {Login}, {Password}",
credentials.Username, credentials.Password);
return Unauthorized();
}
return BuildToken();
}
我只需要记录一条消息:
无法验证用户的登录密码
但是Serilog记录以下内容:
请求启动HTTP / 1.1 POST http://localhost:5000/api/token application / json 57
与“ {action = \“ CreateToken \””匹配的路由,控制器= \“令牌\”}“。执行操作 “ Deal.WebApi.Controllers.TokenController.CreateToken(Deal.WebApi)”
执行动作方法 “ Deal.WebApi.Controllers.TokenController.CreateToken(Deal.WebApi)” 带有参数([“ Deal.BL.Models.Auth.CredentialsModel”])-验证 状态:有效
无法验证用户身份:登录密码
执行的动作方法 “ Deal.WebApi.Controllers.TokenController.CreateToken(Deal.WebApi)”, 返回结果“ Microsoft.AspNetCore.Mvc.UnauthorizedResult”中 11.0935毫秒。
执行HttpStatusCodeResult,设置HTTP状态码401
已执行操作“ Deal.WebApi.Controllers.TokenController.CreateToken (Deal.WebApi)”中的95.272ms
请求在123.9485ms内完成401
如何清除不需要的消息?
这是我的Program.cs
文件:
public class Program
{
public static void Main(string[] args)
{
var currentEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{currentEnv}.json", true)
.AddEnvironmentVariables()
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(config)
.CreateLogger();
try
{
Log.Information("Start web host");
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseSerilog()
.UseStartup<Startup>();
}
答案 0 :(得分:3)
您可以在appsettings.json
中覆盖类别级别的日志消息。例如,以下appsettings.json
设置Microsoft
日志消息,仅注销那些被考虑为Error
的消息:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Error"
}
},
...
}
这里感兴趣的属性是Override
,它代表一个对象,其中属性是类别前缀,值是要使用的Serilog log level。
由于您自己的自定义日志消息不会记录在Microsoft
类别下,因此您仍然会在输出中看到那个。