Регистрация файлового регистратора Serilog для внедрения зависимостей в приложении WinNETms .NET Core 3.0 - PullRequest
0 голосов
/ 25 июня 2019

Я занимаюсь разработкой приложения WinForms в .NET Core 3.0. Я хотел бы записать отладочную информацию в файл. Я видел, что Serilog был хорошим вариантом, но я тоже рад рассмотреть альтернативы. В идеале я хотел бы получить ссылку на мой регистратор в различных классах, используя внедрение зависимостей.

Большинство статей и документации, которые я нашел, были сосредоточены на ASP .NET, а не на WinForms, поэтому мне пришлось немного проявить воображение при настройке Serilog в моем методе static void Main() *1004*.

Я правильно сделал? Не совсем!

 public class Program
    {
        private static Logger _logger; // I noticed that you don't have to do
                                       // this in the ASP .NET samples as it's
                                       // taken care of "under the hood".
                                       // However, I couldn't see any
                                       // alternative in the standard
                                       // WinForms template in VS.

        private static void Main()
        {
            //Omitted some code about configuration files and WinForms initialization for brevity

            var services = new ServiceCollection();
            ServiceProvider = ConfigureServices(services);

            Application.Run(Form1);
        }

        public static IServiceProvider ServiceProvider { get; private set; }

        private static ServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(GetLogger(), true));
            GetLogger().Debug("Hello!!"); // Just testing... nothing happens. Where's my log file?
            //Omitted registration of various unrelated services for brevity

            return services.BuildServiceProvider();
        }


        private static Logger GetLogger()
        {
            if(_logger is null)
            {
                _logger = new LoggerConfiguration()
                .WriteTo.File(@"c:\BenjaminLog-.txt", rollingInterval: RollingInterval.Day)
                .CreateLogger();
            }

            return _logger;
        }
    }
}

Мой код собирается и запускается, но файл журнала не создается.

1 Ответ

0 голосов
/ 26 июня 2019

Уровень журнала по умолчанию (MinimumLevel) - Информация. Поскольку вы не указываете другой уровень журнала при настройке вашего регистратора, а ваше тестовое сообщение регистрируется на уровне отладки, оно не будет обработано. Попробуйте изменить GetLogger().Debug("Hello!!"); на GetLogger().Information("Hello!!");.

...