Как заставить Serilog регистрировать только мои собственные сообщения журнала - PullRequest
0 голосов
/ 19 октября 2018

Я настроил Serilog в appsettings.json для регистрации записей в Logstash через tcp в моем 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-"
    }
  },
  ...
}

Но он регистрирует слишком много сообщений.Например, у меня есть метод действия CreateToken в контроллере Token:

[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 \", controller = \ "Token \"} ".Выполнение действия «Deal.WebApi.Controllers.TokenController.CreateToken (Deal.WebApi)»

Выполнение метода действия «Deal.WebApi.Controllers.TokenController.CreateToken (Deal.WebApi)» с аргументами (Deal.WebApi) ».BL.Models.Auth.CredentialsModel "]) - Состояние проверки: Действительный

Невозможно подтвердить подлинность пользователя: Логин Пароль

Метод выполненного действия" Deal.WebApi.Controllers.TokenController.CreateToken (Deal.WebApi..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>();
}

1 Ответ

0 голосов
/ 19 октября 2018

Вы можете переопределить сообщения журнала уровня категории в вашем appsettings.json.Например, следующие appsettings.json устанавливают Microsoft сообщения журнала для выхода только из рассмотренных Error:

"Serilog": {
    "MinimumLevel": {
        "Default": "Information",
        "Override": {
            "Microsoft": "Error"
        }
    },
    ...
}

Интересующее здесь свойство - Override, которое представляет объект, в которомсвойства имеют категорию префиксы , а значения Уровень журнала Serilog для использования.

Поскольку ваше собственное сообщение журнала не будет зарегистрировано в категории Microsoft,вы все равно увидите , что на выходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...