Это должен быть принятый ответ. Если я правильно понимаю ОП, вопрос следует перефразировать, чтобы конкретно рассмотреть этот вопрос: «Я также хочу использовать разные макеты для разных уровней серьезности», и тогда это будет правильным ответом для этого.

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

<variable name="commonLog" value="${logDir}\Common.log" />
<variable name="username" value="${identity:fSNormalize=true:authType=false:isAuthenticated=false}" />
<variable name="userLog" value="${logDir}\ByUser\${username}.log" />
<variable name="dateLog" value="${logDir}\ByDate\${shortdate}.log" />

<target name="logFiles" xsi:type="SplitGroup">
  <target xsi:type="File" fileName="${commonLog}" layout="${myLayout}" />
  <target xsi:type="File" fileName="${userLog}" layout="${myLayout}" />
  <target xsi:type="File" fileName="${dateLog}" layout="${myLayout}" />
</target>

Это здорово, ноЯ также хочу использовать разные макеты для разных уровней серьезности, Например,errorLayout будет включать информацию об исключении и вставить[!] маркер, чтобы позже я мог выделить ошибки в средствах просмотра журналов, таких какBareTail:

<variable name="stamp" value="${date} ${username} ${logger}" />

<variable name="debugLayout" value="${stamp} ... ${message}" />
<variable name="infoLayout" value="${stamp} [i] ${message}" /> 
<variable name="warnLayout" value="${stamp} [!] ${message}" />
<variable name="errorLayout"
   value="${warnLayout}${newline}${pad:padding=10:inner=${exception:format=ToString}}" />

<!-- logFiles target -->

<rules>
  <logger name="*" level="Debug" writeTo="logFiles" layout="debugLayout"  />
  <logger name="*" level="Info" writeTo="logFiles" layout="infoLayout" />
  <logger name="*" level="Warn" writeTo="logFiles" layout="warnLayout" />
  <logger name="*" level="Error" writeTo="logFiles" layout="errorLayout" />
</rules>

Этот код предполагаетErrorвсегда приходят с исключениями иWarningНет, но дело не в этом.

Проблема вэта конфигурация неверна, Это не сработает, потому чтоlogger не имеетlayout приписывать. Это определено дляtarget только.

Используемый макет должен быть объявлен самими целями, но я не вижу возможности указать разные макеты для разных уровней серьезности.

На данный момент мне пришлось копировать и вставлять один и тот же код конфигурации четыре раза, чтобы получить четыре разныхlayouts для того же набора файлов:

<targets>
  <target name="logFilesDebug" xsi:type="SplitGroup">
    <target xsi:type="File" fileName="${commonLog}" layout="${debugLayout}" />
    <target xsi:type="File" fileName="${userLog}" layout="${debugLayout}" />
    <target xsi:type="File" fileName="${dateLog}" layout="${debugLayout}" />
  </target>

  <target name="logFilesInfo" xsi:type="SplitGroup">
    <target xsi:type="File" fileName="${commonLog}" layout="${infoLayout}" />
    <target xsi:type="File" fileName="${userLog}" layout="${infoLayout}" />
    <target xsi:type="File" fileName="${dateLog}" layout="${infoLayout}" />
  </target>

  <target name="logFilesWarn" xsi:type="SplitGroup">
    <target xsi:type="File" fileName="${commonLog}" layout="${warnLayout}" />
    <target xsi:type="File" fileName="${userLog}" layout="${warnLayout}" />
    <target xsi:type="File" fileName="${dateLog}" layout="${warnLayout}" />
  </target>

  <target name="logFilesError" xsi:type="SplitGroup">
    <target xsi:type="File" fileName="${commonLog}" layout="${errorLayout}" />
    <target xsi:type="File" fileName="${userLog}" layout="${errorLayout}" />
    <target xsi:type="File" fileName="${dateLog}" layout="${errorLayout}" />
  </target>
</targets>

<rules>
  <logger name="*" level="Debug" writeTo="logFilesDebug"  />
  <logger name="*" level="Info" writeTo="logFilesInfo" />
  <logger name="*" level="Warn" writeTo="logFilesWarn" />
  <logger name="*" level="Error" writeTo="logFilesError" />
</rules>

Это просто ранит мои глаза.
Есть ли лучший способ сделать это и избежать дублирования?

Ответы на вопрос(2)

Ваш ответ на вопрос