3

我正在使用 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>

输出就像

[主机名] - foo 栏。

但我想要像这样的输出

[主机名] - 富吧。

如何使用转换模式使主机名大写?

问候,

坎库特

4

2 回答 2

4

Ron Grabowski 建议的解决方案是扩展 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>
于 2009-06-23T16:55:01.993 回答
0

FWIW(也许其他人会发现这很有用),NLog 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 中执行此操作,我只是按照他们网站上的内容进行操作。

于 2010-09-29T22:14:55.570 回答