Как сделать часть сообщения log4net заглавной
Вопрос
Я использую 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, я просто использую то, что есть на их веб-сайте.