Как подключиться к файлу без использования стороннего регистратора в .Net Core?

Как подключиться к файлу без с помощью стороннего регистратора (serilog, elmah и т.д.) в .NET CORE?

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
}

Ответ 1

В фреймворке в настоящий момент не включен регистратор файлов, но добавляется один: http://github.com/aspnet/Logging/issues/441. Не стесняйтесь поднимать вопрос на github.

Ответ 2

.NET Core 2.0 2.1 вышла, но все еще не предоставляет реализацию ILoggerProvider для ведения журнала файлов.

Я искал жизнеспособную и легкую стороннюю реализацию, но не нашел ни одной, поэтому решил написать такую, которая бы охватывала функции встроенного ConsoleLogger и предоставляла дополнительные важные функции. Моя библиотека бесплатная, с открытым исходным кодом и имеет только каркасные зависимости.

Он полностью соответствует реализациям провайдера Microsoft. Использование так же просто, как указано ниже:

Install-Package Karambolo.Extensions.Logging.File

.NET Core 2.1:

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(lb =>
    {
        lb.AddConfiguration(Configuration.GetSection("Logging"));
        lb.AddFile(o => o.RootPath = AppContext.BaseDirectory);
    });
}

.NET Core 2.0:

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(lb =>
    {
        lb.AddConfiguration(Configuration.GetSection("Logging"));
        lb.AddFile(new FileLoggerContext(AppContext.BaseDirectory, "default.log"));
    });

    services.Configure<FileLoggerOptions>(Configuration.GetSection("Logging:File"));
}

.NET Core 1.1:

var context = new FileLoggerContext(AppContext.BaseDirectory, "default.log");
loggerFactory.AddFile(context, Configuration.GetSection("Logging:File"));

Подробнее о конфигурации см. На сайте проекта.

Ответ 3

Выпуск http://github.com/aspnet/Logging/issues/441 закрыт, и MS официально рекомендует использовать сторонние регистраторы файлов. Возможно, вы захотите избегать использования тяжеловесных каркасов журналирования, таких как serilog, nlog и т.д., Потому что они просто чрезмерны в случае, если все, что вам нужно, - это простой регистратор, который пишет в файл и ничего более (без каких-либо дополнительных зависимостей).

Я столкнулся с такой же ситуацией и реализовал простой (но эффективный) файловый регистратор: https://github.com/nreco/logging

  • может использоваться в приложениях .NET Core 1.x и .NET Core 2
  • поддерживает пользовательский обработчик сообщений журнала для записи журналов в формате JSON или CSV
  • реализует простую функцию "скользящего файла", если указан максимальный размер файла журнала

Ответ 4

Если вы используете IIS, вы можете включить и просмотреть журналы стандартного вывода:

  1. Отредактируйте файл web.config.
  2. Установите для stdoutLogEnabled значение true.
  3. Измените путь stdoutLogFile, чтобы он указывал на папку журналов (например ,.\Logs .\logs\stdout).
  4. Сохраните файл.
  5. Сделайте запрос к приложению.
  6. Перейдите в папку журналов. Найдите и откройте самый последний журнал stdout.

Сведения о ведении журнала стандартного вывода см. В разделе Устранение неполадок ядра ASP.NET в IIS.

Ответ 5

Поскольку .Net core (2.2) пока не реализует это, тем не менее, мы должны использовать сторонний плагин для этого. Если вы хотите записать ошибки, предупреждения и т.д. В текстовый файл в проекте .Net Core API. Вы можете использовать то, что я использовал в своем проекте, который называется Serilog.

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

http://anthonygiretti.com/2018/11/19/common-features-in-asp-net-core-2-1-webapi-logging/