2010-05-26 34 views
1

我的问题看起来有点奇怪 - 我希望记录转换模式用于格式化使用特定appender时使用log4net记录的消息。记录log4net使用的conversionPattern值的首选方式是什么?

举例来说,如果我的log4net的部分看起来像这样:

<log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <appender name="MainAppender" type="log4net.Appender.RollingFileAppender"> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <file type="log4net.Util.PatternString" value="${NCLOGS}\NC.Entities.Test${CI_TAG}.%processid.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <MaximumFileSize value="10MB" /> 
     <StaticLogFileName value="false" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="INFO" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="MainAppender" /> 
    </root> 
</log4net> 

然后我想看看%日[%线程]%-5level%记录仪 - %讯息%换行符日志文件。

原理我使用Log4View查看我们的日志,它需要转换模式才能格式化消息。如果在日志本身中找到转换模式,我发现它很方便,这使我无需查找相应的配置文件并从那里复制它。

现在我正在使用一些XPATH魔术,但我想知道是否有更好的解决方案,可能使用一些log4net API。

谢谢。

回答

0

执行此操作的一种方法是在启动应用程序时将模式添加为属性。你可以从配置文件中读取模式,也可以通过编程方式获取每个appender的模式,在这种情况下,你可以为每个appender添加一个属性,然后为每个appender为每个模式记录属性。

像这样添加属性:

log4net.GlobalContext.Properties["PatternForAppender"]= getLoggerPattern(); 

而且这样的事情,包括它在日志中:

<conversionPattern value="%logger (%property{PatternForAppender}) [%level] - %message%newline" /> 
+0

有一个小误会。我不希望每条日志消息都包含这个模式 - 这是您的建议似乎实现的目标。我只是希望它在日志文件的开头记录一次。 – mark 2010-06-02 07:34:11

+0

你是对的。这就是这样做的。要在文件的开头只记录一次,你必须实现你自己的appender。 – jvilalta 2010-06-02 18:17:46

相关问题