Я использую nLog 2.0 и после это интересное чтение Я пытался применить условия к простому макету как таковому:
layout="${message:when=logger==A}"
layout="${message:when=logger=='A'}"
layout="${message:when='logger==A'}"
Мало того, что ни один из них не имеет никакого эффекта, они также не выдают ошибку, поэтому кажется, что условие где-то молча проглатывается (throwExceptions
установлено в true)
- Как с условными макетами работать? Они даже работают
- Может ли nLog генерировать исключения, если что-то не так / не распознано?
Вот полный код, это базовое консольное приложение.
main.cs:
class Program
{
static void Main( string[] args )
{
NLog.LogManager.GetLogger( "A" ).Info( "from A" );
NLog.LogManager.GetLogger( "B" ).Info( "from B" );
}
}
NLog.config (в каталоге исполняемых файлов):
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwExceptions="true">
<targets>
<target name="main" xsi:type="File" fileName="my.log"
deleteOldFileOnStartup="true" keepFileOpen="true"
layout="${callsite} ${message:when=logger=='A'}"/>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="main" />
</rules>
</nlog>
Выход:
ConsoleApplication1.Program.Main from A -> this should only log ${callsite}
ConsoleApplication1.Program.Main from B