Как сделать часть сообщения log4net заглавными - PullRequest
2 голосов
/ 22 июня 2009

Я использую AdoNetAppender для регистрации сообщений. Я добавил шаблон свойства% property {log4net: HostName} к параметру сообщения.

<parameter>
      <parameterName value="@message"/>
      <dbType value="String"/>
      <size value="4000"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%property{log4net:HostName}] - %message"/>
      </layout>
</parameter>

Вывод как

[ hostname ] - панель foo.

Но я хочу вывод как

[ HOSTNAME ] - foo bar.

Как я могу сделать имя хоста прописным, используя шаблоны преобразования?

С уважением,

Cankut

Ответы [ 2 ]

3 голосов
/ 23 июня 2009

Решение, предложенное Роном Грабовски, расширяет PatternConverter.

public class HostNameToUpperConverter : PatternConverter
{
    protected override void Convert(TextWriter writer, object state)
    {
        string hostName = (string)GlobalContext.Properties[LoggingEvent.HostNameProperty];
        writer.Write(hostName.ToUpper());
    }
}

использование в файле конфигурации:

<layout type="log4net.Layout.PatternLayout">
        <converter>
          <name value="hostNameToUpper" />
          <type value="MyApplication.HostNameToUpperConverter" />
        </converter>
        <conversionPattern value="[%hostNameToUpper] - %message" />
</layout>
0 голосов
/ 30 сентября 2010

FWIW (может быть, кто-то найдет это полезным), NLog 2.0 (и, возможно, обновление 1.0) добавили некоторые «обертки» макета, которые позволяют модифицировать вывод макета. Смотрите эту ссылку вниз.

Среди оберток есть прописные, строчные, пробельные символы, блокнот и некоторые другие. Таким образом, вы, вероятно, могли бы определить макет, который определяет поля, которые должны быть включены в вывод, и «обернуть» либо всю вещь, либо ее часть в оболочку «верхнего регистра». Я не знаю точного синтаксиса. Я знаю, что вы можете включить макеты в другие макеты, чтобы вы могли определить макет для «имени хоста», обернуть его в оболочку «верхнего регистра», а затем включить этот макет в окончательный макет. , В псевдокоде (псевдокод файла конфигурации, а не псевдокод кода) (очень псевдо!):

var host=${gdc:hostname}
var uhost=${uppercase=true,inner=host}

Теперь uhost можно включить в «реальный» макет:

${datetime} | ${uhost} | ${message}

Или вы можете сделать это так:

${datetime} | ${uppercase=true, inner=${gdc:hostname}} | ${message}

Обратите внимание, что я на самом деле не пытался сделать это в NLog, я просто иду по тому, что находится на их сайте.

...