作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个接收 WCF 请求的 Windows 服务进程。对于每个请求,它都会创建一个新线程来完成一些工作。我想为主机进程创建一个日志文件,并为每个线程实例创建一个单独的唯一日志文件。例如,我希望日志文件类似于“%date{yyyyMMdd}_%property{UniqueId}.log”。这是我目前所拥有的。
<appender name="ThreadAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="c:\Logs\%date{yyyyMMdd}\%date{HHmmss}_%property{FileID}.log"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10MB"/>
<rollingStyle value="Size"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<header value="[Header]
"/>
<footer value="[Footer]
"/>
<conversionPattern value="[%date] [%thread] [%-5level] %logger - %message%newline"/>
</layout>
</appender>
<appender name="ServiceAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\Logs\Service.log"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10MB"/>
<rollingStyle value="Size"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<header value="[Header]
"/>
<footer value="[Footer]
"/>
<conversionPattern value="[%date] [%thread] [%-5level] %logger - %message%newline"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="ThreadAppender"/>
</root>
<logger name="ServiceLogger" additivity="false">
<level value="INFO"/>
<appender-ref ref="ServiceAppender"/>
</logger>
然后,在我的线程中,我使用 LogicalContext.Properties["FileID"] = <some id>
.我还有[assembly: log4net.Config.XmlConfigurator(Watch = true)]
assemblyinfo.cs 文件中的行。
几乎一切正常 :)。一个问题是,当我启动 Windows 服务时,它会自动创建新的 %date{HHmmss}_(null).log 文件。我需要配置什么以使 log4net 不创建此虚拟文件?另外,是否需要为 ServiceAppender 和 ThreadAppender 指定文件锁定?
最佳答案
由于并发问题,该代码无法按预期工作。 log4net.Config.XmlConfigurator.Configure 强制应用新的属性值,但它会影响所有线程,因此其他并发请求的消息将被重定向到新文件。
我唯一可行的解决方案是使用 ILoggerRepository。
关于c# - log4net 和每个线程唯一的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869394/
我是一名优秀的程序员,十分优秀!