Создание второго лога используя Nlog

493
20 декабря 2017, 19:23

Задача: создать два лога.Первый для записи Info, второй для записи Errors. Использую NLog. С первой половиной задачи справился: создал первый логгер и записал его в файл (file.txt). Не получается создать второй, прошу помощи.

Файл App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="logfile" xsi:type="File" fileName="D://file.txt" />
    </targets>
    <rules>
      <logger name="*" minlevel="Info" writeTo="logfile" />
    </rules>
  </nlog>
</configuration>

Фрагмент кода с логгером:

 public partial class FormDepocs : Form
    {
        Depo depo;
        FormSelectLoco form;
        private Logger log;
        public FormDepocs()
        {
            InitializeComponent();
            log = LogManager.GetCurrentClassLogger();
            depo = new Depo(5);
            for (int i = 1; i < 6; i++)
            {
                listBoxLevels.Items.Add("Уровень " + i);
            }
            listBoxLevels.SelectedIndex = depo.getCurrentLevel;
            Draw();
        }

Далее строчкой log.Info("Сообщение с логом!"); добавляю все в лог.

Answer 1

В настройках есть так называемые цели (target) и правила (rules).

Посмотрим ваш код:

<targets>
  <target name="logfile" xsi:type="File" fileName="D://file.txt" />
</targets>
<rules>
  <logger name="*" minlevel="Info" writeTo="logfile" />
</rules>

Вы имеете:

  • Одну цель (записать в файл D://file.txt").
  • Одно правило (отлавливать любые логи, минимальный уровень которых Info и отдавать их цели logfile).

То есть тут все довольно просто, действуйте аналогично...

К примеру, хотите записать в отельный файл только ошибки:

  • Создаете новую цель

    <target name="errorfile" xsi:type="File" fileName="D://errors.txt" />
  • Создаем новое правило, которое будет отлавливать ошибки Warn, Error и Fatal. (заметьте, я тут явно указал какие уровни логов мне нужны, можно и указать минимальный).

    <logger name="*" levels="Fatal,Error" writeTo="errorfile" />

Все, остальное за вас сделает сам NLog. Советую прочитать документацию.

READ ALSO
Метод касательных (Ньютона) на c#, приближенное нахождение производной

Метод касательных (Ньютона) на c#, приближенное нахождение производной

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

261
PasswordBox C# WPF

PasswordBox C# WPF

Здрастувуйте! Как сделать чтобы при выборе CheckBox пароль скрывался и наоборот, все никак не могу понять

185
BlockingCollection - как не блокировать поток

BlockingCollection - как не блокировать поток

Применение BlockingCollection, используя подход, когда элементы вытаскиваются из очереди(например ConcurrentQueue), используя метод Take в цикле - всегда блокирует...

248
Теги в движке Unity3D

Теги в движке Unity3D

Можно ли на один игровой объект поставить два тега? Если можно, то как?

182