ядро c # Microsoft.Расширения.Ведение журнала и конфигурация журнала

#c# #logging #.net-core

#c# #ведение журнала #.net-ядро

Вопрос:

У меня есть небольшое консольное приложение. Я включил ведение журнала отладки и консоли. Однако, похоже, они не соблюдают мою конфигурацию для уровня журнала. Вот моя настройка:

Добавьте файл конфигурации и создайте регистратор

 // global to Program
private static ILogger<Program> _logger;
private const string _configFile = "appsettings.json";


 //inside Main
_config = new ConfigurationBuilder()
    .AddJsonFile(_configFile, optional: false, reloadOnChange: true)
    //.AddEnvironmentVariables()
    .AddCommandLine(args)
    .Build();

using var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddDebug();
    builder.AddSimpleConsole();
});

_logger = loggerFactory.CreateLogger<Program>();
 

appconfig.json

 "Logging": {
    "IncludeScopes": true,
    "LogLevel": {
        "Default": "Debug",
        "Microsoft": "Warning"
    },
    "Debug": {
        "LogLevel": {
            "Default": "Trace",
            "Microsoft": "Warning",
            "FleetLogix.TcaProcessor": "Trace"
        }
    },
    "SimpleConsole": {
        "IncludeScopes": "false",
        "SingleLine": "false",
        "TimestampFormat": "yyyy-MM-dd HH:mm:ss ",
        "LogLevel": {
            "Default": "Information",
            "Microsoft": "Warning",
            "FleetLogix.TcaProcessor": "Information"
        }
    }
},
 

В настоящее время он настроен для входа в систему для двух поставщиков: Debug (панель запуска Visual studio) и Console. Это работает. Debug предназначен для входа в трассировку, но регистрируется только в Info. Консоль регистрируется в Info, но не добавляет метку времени к сообщениям.

Правильно ли настроена моя конфигурация? (правильные имена свойств, правильная глубина и т. Д.) На что я должен это изменить?

Консоль также имеет ужасный разрыв строки, чтение которого говорит мне, что вам нужно раскошелиться на Microsoft.Расширения.Ведение журнала.Консоль для исправления, так что в другой день. :/

Комментарии:

1. Вы можете посмотреть документы по форматированию журналов и журналов консоли

Ответ №1:

В итоге я переключился на Serilog, так как мне все равно нужен был файл для записи. Единственной сложной частью было устранение различий между старой и текущей версиями, где rollingfile sink теперь интегрирован в file sink

Program.cs

 #region Initialise Logger

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(_config)
    .CreateLogger();

Log.Information("Logger started");

#endregion
 

appsettings.json

 "Serilog": {
    "Using": [
        "Serilog.Sinks.Console",
        "Serilog.Sinks.File" 
    ],
    "MinimumLevel": "Debug",
    "WriteTo": [
        {
            "Name": "Console" 
        },
        {
            "Name": "File",
            "Args": {
                "path": "c:\scripts\log\myprogram.log",
                "rollingInterval": "Day",
                "retainedFileCountLimit": 7
            }
        }
    ],
    "Properties": {
        "Application": "MyProgram"
    }
},