【发布时间】:2011-01-11 02:31:32
【问题描述】:
我正在使用 Log4Net 为 Windows NT 服务实现日志记录解决方案。我可以翻转配置文件中的开关以开始将信息记录到文件系统。到目前为止,我已经能够通过使用滚动文件附加程序并让 log4net “监视”配置文件来完成此操作。
我注意到,Log4Net 将在服务启动后立即创建空日志文件,即使所有日志记录都已关闭并且我不打算记录。
除了这篇文章,我找不到关于这个主题的更多信息:
How to disable creation of empty log file on app start?
我担心有人可以使用非常低级别的权限集设置服务,甚至无权在文件系统上创建日志文件。即使我不打算记录,我也不希望每次点击记录语句时都会引发异常而导致性能损失。
在尝试记录之前,我已经在每个记录语句中检查是否启用了记录级别,但我仍然不确定在 log4net 的内部工作中是否仍然会抛出异常未创建 appender 中配置的文件。
if (logger.IsDebugEnabled)
{
logger.DebugFormat(format, traceMessage);
}
有人知道如果 log4net 最初无法创建日志文件会做什么吗?
这里有一些关于我的配置的信息。开启后日志记录工作正常,我只是担心权限问题。
我的日志记录类的属性以监视配置更改:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Logging.config", Watch = true)]
附加器:
<appender name="Test" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value=".\\AppLogs\\_test.%appdomain.log" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ALL" />
<levelMax value="FATAL" />
<acceptOnMatch value="false"/>
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="Test" />
</filter>
<appendToFile value="true" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="6MB" />
<rollingStyle value="Size" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.DenyAllFilter" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level - %message%newline" />
</layout>
</appender>
【问题讨论】:
-
我不确定这在 2011 年是否属实,但至少对于最新版本的 Log4Net,它会在实际尝试记录任何内容之前在内部检查给定的日志级别是否已启用。仅当生成发送到记录器的数据需要占用大量 CPU/资源时,IsDebugEnabled 之类的函数才有用。相关的,像 DebugFormat 这样的函数具有简洁的双重目的,而且除非启用了日志级别,否则它不必执行实际的 string.Format。
标签: log4net file-permissions rollingfileappender