#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"
}
},