Как сделать часть сообщения log4net заглавной

StackOverflow https://stackoverflow.com/questions/1027180

  •  06-07-2019
  •  | 
  •  

Вопрос

Я использую 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>

Вывод такой

[имя хоста] - фу бар.

Но я хочу, чтобы результат выглядел как

[ИМЯ ХОСТА] - фу бар.

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

С уважением,

Джанкут

Это было полезно?

Решение

Решение, предложенное Роном Грабовски, является расширением 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>

Другие советы

FWIW (возможно, кому-то это будет полезно), Нлог 2.0 (и, возможно, в версии 1.0 Refresh) добавлено несколько «оберток» макета, которые позволяют изменять вывод макета.Видеть это связь, ближе к низу.

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

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

Теперь uhost можно включить в «настоящую» разметку:

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

Или вы можете сделать это следующим образом:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top