Как настроить поля Serilog в SQL Server? - PullRequest
0 голосов
/ 22 апреля 2020

Я написал промежуточное программное обеспечение, которое я обнаружил ошибки с Serilog. Я хочу записать захваченные ошибки в базу данных. Данные, которые я хочу записать, включают в себя такую ​​информацию, как имя пользователя и имя соответствующего контроллера.

Промежуточное программное обеспечение, которое я написал, выглядит следующим образом:

public static class ApiGlobalExceptionHandlerExtension
{
    public static IApplicationBuilder UseWebApiExceptionHandler(this IApplicationBuilder app)
    {
        var loggerFactory = app.ApplicationServices.GetService(typeof(ILoggerFactory)) as ILoggerFactory;

        return app.UseExceptionHandler(HandleApiException(loggerFactory));
    }

    public static Action<IApplicationBuilder> HandleApiException(ILoggerFactory loggerFactory)
    {
        return appBuilder =>
        {
            appBuilder.Run(async context =>
            {
                var exceptionHandlerFeature = context.Features.Get<IExceptionHandlerFeature>();

                if (exceptionHandlerFeature != null)
                {
                    var logger = loggerFactory.CreateLogger("Serilog Global exception logger");
                    logger.LogError(500, exceptionHandlerFeature.Error, exceptionHandlerFeature.Error.Message);

                }

                context.Response.StatusCode = 500;
                await context.Response.WriteAsync("An unexpected fault happened. Try again later.");

            });
        };
    }
}

Как я уже говорил в SERILOG SQLServer Sink часть, в которой я сделал дополнительные настройки столбцов в настройках приложения, выглядит следующим образом:

"columnOptionsSection": {
    "disableTriggers": true,
    "clusteredColumnstoreIndex": false,
    "primaryKeyColumnName": "Id",
    "addStandardColumns": [
      "LogEvent"
    ],
    "removeStandardColumns": [
      "MessageTemplate",
      "Properties"
    ],
    "additionalColumns": [
      {
        "ColumnName": "EventType",
        "DataType": "int",
        "AllowNull": false
      },

У меня есть способ использовать его при запуске:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
                UserManager<AlpIdentityUser> userManager,
                RoleManager<IdentityRole> roleManager,
                ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();

    loggerFactory.AddDebug(LogLevel.Information);
}

Как управлять необязательными столбцами I добавить в эту настройку?

...