Интеграция Serilog в проект библиотеки классов .Net core 2.0

Я хотел бы использовать Serilog для входа в проект библиотеки классов .Net core 2.0. Я искал много мест и не нашел ни одного примера интеграции Serilog в проект библиотеки классов. Может ли кто-нибудь сослаться на образец?

Спасибо.


person Prasad    schedule 12.10.2017    source источник
comment
Какую версию вы используете? Покажите нам также код, который вы сделали до сих пор.   -  person Jeroen Heier    schedule 12.10.2017
comment
Это версия библиотеки, которую я хотел бы использовать: Serilog.AspNetCore (расположение: github.com/serilog/serilog -aspnetcore). Не знаю, как интегрироваться в проект библиотеки классов net core 2.0.   -  person Prasad    schedule 12.10.2017
comment
Это задокументировано. Кроме того, простое добавление Serilog требует... просто добавления Serilog, как вы это делали раньше. Нет необходимости редактировать вручную, просто используйте диспетчер пакетов или dotnet add. Интеграция с конфигурацией .NET Core, инфраструктура ведения журналов занимает немного больше времени, но все еще документируется.   -  person Panagiotis Kanavos    schedule 12.10.2017


Ответы (2)


Вы не должны не настраивать ведение журнала Serilog внутри библиотеки классов. Библиотека классов предназначена для использования другими приложениями, например веб-приложением ASP.NET Core, консольным приложением и т. д. Библиотека классов не является точкой входа в приложение, поэтому она не должна нести ответственность за настройку всего приложения, например ведение журнала. Это также было бы очень сложно сделать, потому что библиотека классов не имеет центральной точки входа (по замыслу), поэтому где именно вы ожидаете настроить ведение журнала?

Вместо этого ваша библиотека должна просто полагаться на ведение журналов и иметь способ получать регистраторы, когда они ей нужны. Если ваше приложение построено с учетом внедрения зависимостей, вы можете просто внедрить свои регистраторы туда, где они вам нужны.

Затем точка входа приложения отвечает за настройку ведения журнала и предоставление вашей библиотеке инфраструктуры ведения журнала.

Поэтому, если вы используете это в контексте ASP.NET Core, просто следуйте рекомендациям по настройке Serilog с ASP.NET Core.

person poke    schedule 12.10.2017

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

public static Microsoft.Extensions.Hosting.IHostBuilder UseGloabalLogger(this Microsoft.Extensions.Hosting.IHostBuilder app)
    {
        return app.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                .ReadFrom.Configuration(hostingContext.Configuration)
                .WriteTo.File(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\LOG\\"+string.Format("Logging-{0}.txt",DateTime.Now.ToString("yyyyMMdd")))
                .WriteTo.Debug()
                .WriteTo.Console(
                    outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}"));
    }

затем в вашем Program.cs webApi или WebApp вы должны импортировать свою библиотеку классов, которая ссылается на serilog, и инициализировать их с помощью

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .UseGloabalLogger()
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

Лучшие практики требуют, чтобы любая конфигурация ведения журнала была вставлена ​​​​в ваш файл appsettings.json.

"Serilog": { "MinimumLevel": { "Default": "Информация",//или Ошибка или любое другое "Переопределение": { "Microsoft": "Предупреждение", "Система": "Предупреждение" } .... .............. } }

person ettore ct    schedule 30.03.2020