NLog добавление логирования в .NET Core WEB приложение

.NET Core

Пример добавления логирования в WEB приложение на .NET Core на основе NLog.

Первоначально добавляем через Nuget пакет:

NLog.Web.AspNetCore


Затем добавляем в корень проекта файл nlog.config следующего содержания:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="info"
      internalLogFile="internal-nlog.txt">

    <!-- enable asp.net core layout renderers -->
    <extensions>
        <add assembly="NLog.Web.AspNetCore"/>
    </extensions>

    <!-- the targets to write to -->
    <targets>
        <!-- write logs to file  -->
        <target xsi:type="File" name="allfile" fileName="logs/nlog-all-${shortdate}.log"
                layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />

        <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
        <target xsi:type="File" name="ownFile-web" fileName="logs/nlog-own-${shortdate}.log"
                layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
    </targets>

    <!-- rules to map from logger name to target -->
    <rules>
        <!--All logs, including from Microsoft-->
        <logger name="*" minlevel="Trace" writeTo="allfile" />

        <!--Skip non-critical Microsoft logs and so log only own logs-->
        <logger name="Microsoft.*" maxLevel="Info" final="true" />
        <!-- BlackHole without writeTo -->
        <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
    </rules>
</nlog>

В данном файле содержатся настройки логирования, куда и как и что сохранять. Обязательно для данного файла необходимо выставить в параметрах свойство Copy to output directory: Copy Always.

Теперь переходим к настройкам самого проекта.


Добавляем в Program.cs сам объект логера:
public static NLog.Logger Logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
не забываем там же в Program.cs подключить библиотеку:
using NLog.Web;

И опять же в Program.cs перенаправляем логирование в методе CreateWebHostBuilder:
.ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
                })
                .UseNLog()  // Подключаем NLog


Пример файла Program.cs целиком:
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Web;

namespace JQueryPostRequestNetCore
{
    public class Program
    {
        public static NLog.Logger Logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
        
        public static void Main(string[] args)
        {
            Logger.Debug("Запуск приложения");

            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
                })
                .UseNLog()  // Подключаем NLog
                .UseUrls("http://localhost:5000");
    }
}


Теперь, после всех манипуляций, логирование будет происходить посредством NLog, учитывая настройки из nlog.config, в нашем примере выше, в 2 файла.

Запись любых своих сообщений в коде приложения в LOG, теперь можно произвести следующим образом:
Program.Logger.Info("Информационное сообщение");
Program.Logger.Warn("Предупреждающее сообщение");
Program.Logger.Error("Сообщение об ошибке");

Разумеется все стандартные события для настроенного в appsettings.json режима логирования:
{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}
Тоже попадут в лог.

Вот и всё.

NLog NET Core WEB C# логирование

Оставить первый комментарий:

ASP.NET MVC проект на .NET Core в VS Code. Часть 1 (Создаем проект и Добавляем Контроллер)

В этой публикации я надеюсь начать цикл повествований по разработке ASP.NET MVC приложения на .NET C (читать далее...)

160  
Авторизация в приложении через Вконтакте VK на C#

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

143  
Работаем с базой данных MySql из .NET Core

В данной публикации мы рассмотрим как подключиться к базе данных MySql из приложения на .Net Core. 1 (читать далее...)

107  
Пример синхронного AJAX запроса на JQuery и .NET Core

В данной публикации приведен пример того как выполнить асинхронный запрос к серверу без перезагрузки (читать далее...)

98  
Класс для транслитерации предложений на Русском по ГОСТ и ISO на C# под .NET Core

Бывает так, что приходится заниматься преобразованием предложения на русском в русский текст но на л (читать далее...)

87