2010-06-09 205 views
16

我使用RollingFileAppender进行登录到一个conversionPattern一个文件中的一些信息(在web.config)看起来像这样为每个日志节的标题:Log4net可以有多个appender写入同一个文件吗?

<conversionPattern value="%date - %property{userId} - %property{method}%newline--------------------------------%newline%message%newline%newline"/> 

我想登录在这个标题下的细节作为项目符号。我目前正试图用另一种RollingFileAppender进行,它记录到同一文件只是一个破折号的简单conversionPattern,就像这样:

<conversionPattern value="- %message%newline"/> 

但这些消息不会使它到日志文件。我使用Log.Info()作为标题,使用Log.Debug()作为项目符号点,并在各自的日志级别上筛选每个appender。我正在尝试做什么?或者是否有更好的方法将标题和详细信息从log4net中获取到日志文件中?

回答

32

是的,你可以有两个log4net appender附加(写入)到同一个日志文件。

您需要将下面一行在每个附加目的地的:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

这将使log4net的使用最小的锁定模式,允许多个进程写入同一文件。

下面是一个使用了两个附加目的地写同一个日志文件的示例XML:

<log4net debug="false"> 
<appender name="RollingLogFileAppender1" type="log4net.Appender.RollingFileAppender"> 
    <!-- this configures a log for the application messages --> 
    <file value="TestLog.log" /> 
    <appendToFile value="true" /> 
    <!-- next line uses a minimal locking model that allows multiple processes to write to the same file --> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <!-- make the most recent log the highest numbered log --> 
    <countDirection value="1" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level %date{MM-dd-yyyy HH:mm:ss.ff} [%property{NDC}] %message%newline [Thread: %thread] %c{1} Method:%method(%file{1}, Line:%line) %newline" /> 
    </layout> 
    <!-- The following two filters insure only log requests of 
     version '1' use this Appender --> 
</appender> 
<appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender"> 
    <file value="TestLog.log" /> 
    <appendToFile value="true" /> 
    <!-- next line uses a minimal locking model that allows multiple processes to write to the same file --> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <!-- make the most recent log the highest numbered log --> 
    <countDirection value="1" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level %date{MM-dd-yyyy HH:mm:ss.ff} [%property{NDC}] [Thread: %thread] %c{1} Method:%method(%file{1}, Line:%line) %newline%message" /> 
    </layout> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender1" /> 
    <appender-ref ref="RollingLogFileAppender2" /> 
</root> 

这可以在Apache文档在这里找到: Apache Log4Net Docs 此页'上只要搜索相同的文件'。

希望这会有所帮助。

+0

注意只有最新版本的log4net有这个lockingModel Xml设置和MinimalLock类如果你使用旧版本,没有错误会抛出,但它不会工作。 – 2015-01-05 09:34:37

1

你可以认识到,如果log4net在visual studio上检查输出窗口时有任何问题。那里的库日志错误,对于检测配置错误非常有用。

+0

不幸的是,没有错误报告可以帮助我:( – adam0101 2010-06-10 15:52:49

+0

你执行代码来配置log4net,对吗? – 2010-06-10 16:46:08

相关问题