我正在使用Log4Net为Windows NT服务实现日志记录解决方案。我可以翻转配置文件中的开关,开始将信息记录到文件系统。到目前为止,我已经能够通过滚动文件appender和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>
答案 0 :(得分:1)
“我担心的是有人可以使用非常低级别的权限设置服务,甚至无法访问文件系统上的日志文件。” - 在服务启动时检测您的最小设置如果不存在,则存在所需的权限并抛出异常(或以其他方式处理)。
我认为这本身并不是日志记录问题;这是您的服务是否具有所需权限的问题。