Пусть NLog записывает в консоль

Я новичок в NLog. У меня есть консольное приложение .NET Framework, использующее NLog. Я надеюсь настроить NLog для прямой записи журнала в консоль. Я установил NLog и пакет NLog.Config NuGet со следующим содержимым в nlog .конфиг:

<?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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
  <targets>
    <target xsi:type="Console"
            name="String"
            layout="Layout"
            footer="Layout"
            header="Layout"
            encoding="Encoding"
    />
  </targets>
</nlog>

Затем в C# следующие две строки не будут выводиться на консоль:

var logger = LogManager.GetCurrentClassLogger();
logger.Info("hello");

Поискал в интернете, но пока ничего не нашел.


person checai    schedule 15.06.2018    source источник


Ответы (3)


Ознакомьтесь с официальным руководством здесь.

Вам нужно добавить правила вывода:

<rules>
    <logger name="*" minlevel="Info" writeTo="console" />
</rules>

Также упростите свою консольную цель:

<target name="console" xsi:type="Console" />

Много полезных примеров здесь: Наиболее полезные конфигурации NLog

person Alexey.Petriashev    schedule 15.06.2018
comment
Как вы видите консоль при работе в Visual Studio над веб-приложением. Какой файл меню › просмотра › окна меню? У меня открыто окно вывода в Visual Studio › Показать вывод из отладки, но ничего не регистрируется. Я регистрируюсь в текстовом файле, который работает нормально. Спасибо. - person Moojjoo; 04.05.2020
comment
запустите его как консоль (выберите в поле со списком рядом с Пуск) - person Alexey.Petriashev; 14.05.2020

Ответ. Решение реализовано для записи в окно отладчика вывода в Visual Studio, чтобы журналы NLog отображались в окне вывода со следующей разметкой Web.Config.

Хотя я обнаружил, что лучше открыть NotePad++ в другом окне.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
  </configSections>
<nlog xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 
        autoReload="true" 
        throwExceptions="true"         
        xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <extensions>
      <add assembly="WellsFargo.Diagnostics.Integration" />
    </extensions>
    <!-- optional, add some variables
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
    <!--<variable name="myvar" value="myvalue" />-->
    <!--
  See https://github.com/nlog/nlog/wiki/Configuration-file
  for information on customizing logging rules and outputs.
   -->
    <targets async="true">
      <!--
    add your targets here
    See https://github.com/nlog/NLog/wiki/Targets for possible targets.
    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
    -->
      <target name="Mail" xsi:type="Mail" html="true" subject="Error Received" body="${longdate} ${uppercase:${level}} | ${callsite} | ${message} | ${newline}" to="[email protected]" from="[email protected]" smtpServer="SMTP.AZURE.WELLSFARGO.NET" smtpPort="25"/>
      <target xsi:type="File" name="logfile" fileName="..\..\..\logs\1TIX_NLog\AppNLog.log"
              archiveEvery="Day"
              archiveFileName="..\..\..\logs\App_NLog\AppNLog.{#}.log"
              archiveNumbering="DateAndSequence"
              archiveDateFormat="yyyy-MM-dd"
              archiveAboveSize="104857600"
              maxArchiveFiles="14" />
      <target xsi:type="Debugger" name="debugger" layout="${longdate} ${uppercase:${level}}|${callsite}|${message}" />
      <target xsi:type="NLogAppender" name="NLogAppender" layout="${longdate} ${uppercase:${level}}|${callsite}|${message}|${newline}" />
      <!--<target xsi:type="Console" name="f" layout="${longdate} ${uppercase:${level}} | ${callsite} | ${message} | ${newline}" />-->
    </targets>
    <rules>
      <!-- add your logging rules here -->
      <logger name="*" levels="Error,Fatal" writeTo="Mail" />
      <logger name="*" minlevel="Debug" writeTo="logfile" />
<!-- Writes NLog to debugger window in Visual Studio -->
      <logger name="*" minlevel="Trace" writeTo="debugger" />
<!-- Writes NLogs to Splunk -->
      <logger name="*" minlevel="Trace" writeTo="NLogAppender" /> 
      <!--
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
    <logger name="*" minlevel="Debug" writeTo="f" />  -->
    </rules>
  </nlog>
<connectionStrings>
<!-- Code Omitted ... -->

person Moojjoo    schedule 15.05.2020

Вы также можете настроить из кода:

var config = new NLog.Config.LoggingConfiguration();

// Targets where to log to: Console
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");

// Rules for mapping loggers to targets
config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole);

// Apply config
NLog.LogManager.Configuration = config;

Использовать:

var logger = NLog.LogManager.GetCurrentClassLogger();
logger.Info("hello");
person Mariusz Jamro    schedule 19.06.2020