Dmi*_*nov 8 c# serilog asp.net-core
我将Serilog配置appsettings.json为通过以下方式通过我的应用程序中的tcp 将条目登录到Logstash中asp net core web api:
{
"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-"
}
},
...
}
Run Code Online (Sandbox Code Playgroud)
但是它记录了太多消息。例如,我在令牌控制器中有一个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();
}
Run Code Online (Sandbox Code Playgroud)
我只需要记录一条消息:
无法验证用户的登录密码
但是Serilog记录以下内容:
请求启动HTTP / 1.1 POST http:// localhost:5000 / api / token application / json 57
路由与“ {action = \“ CreateToken \”,控制器= \“ Token \”}“匹配。执行动作“ Deal.WebApi.Controllers.TokenController.CreateToken(Deal.WebApi)”
以参数([“ Deal.BL.Models.Auth.CredentialsModel”])执行操作方法“ Deal.WebApi.Controllers.TokenController.CreateToken(Deal.WebApi)”-验证状态:有效
无法验证用户身份:登录密码
执行操作方法“ Deal.WebApi.Controllers.TokenController.CreateToken(Deal.WebApi)”,并在11.0935毫秒内返回结果“ Microsoft.AspNetCore.Mvc.UnauthorizedResult”。
执行HttpStatusCodeResult,设置HTTP状态码401
在95.272毫秒内执行了动作“ Deal.WebApi.Controllers.TokenController.CreateToken(Deal.WebApi)”
请求完成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>();
}
Run Code Online (Sandbox Code Playgroud)
您可以在中覆盖类别级别的日志消息appsettings.json。例如,以下appsettings.json将Microsoft日志消息设置为仅注销所考虑的日志消息Error:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Error"
}
},
...
}
Run Code Online (Sandbox Code Playgroud)
这里感兴趣的属性是Override,它表示一个对象,其中的属性是类别前缀,而值是要使用的Serilog日志级别。
因为您自己的自定义日志消息不会记录在Microsoft类别下,所以您仍然会在输出中看到该消息。
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |