appsettings.json
のSerilogを構成して、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();
}
メッセージを1つだけ記録する必要があります。
ユーザーのログインパスワードを認証できません
ただし、Serilogは次のログを記録します。
HTTP/1.1を開始するリクエストPOST http:// localhost:5000/api/token application/json 57
「{action =\"CreateToken \"、controller =\"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.0935msで結果「Microsoft.AspNetCore.Mvc.UnauthorizedResult」を返しました。
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>();
}
appsettings.json
のカテゴリレベルのログメッセージを上書きできます。たとえば、次のappsettings.json
はMicrosoft
ログメッセージを設定して、Error
と見なされるメッセージのみをログアウトします。
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Error"
}
},
...
}
ここで注目するプロパティはOverride
で、プロパティがカテゴリprefixesで、値が Serilogログレベル 使用します。
独自のカスタムログメッセージはMicrosoft
カテゴリの下に記録されないため、出力にはthatが引き続き表示されます。