0

我正在为 Windows NT 服务使用 Log4Net 实现日志记录解决方案。我可以翻转配置文件中的开关以开始将信息记录到文件系统。到目前为止,我已经能够通过使用滚动文件附加程序并让 log4net “监视”配置文件来实现这一点。

我注意到的是,Log4Net 将在服务启动后立即创建空日志文件,即使所有日志记录都已关闭并且我不打算记录。

除了这篇文章,我找不到关于这个主题的更多信息:

如何在应用程序启动时禁用创建空日志文件?

我担心有人可以使用非常低级别的权限设置服务,甚至无权在文件系统上创建日志文件。即使我不打算记录,我也不希望每次遇到记录语句时都会引发异常而导致性能损失。

我已经用检查包装了每个日志记录语句,以查看在尝试记录之前是否启用了日志记录级别,但我仍然不确定是否在 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>
4

1 回答 1

1

“我担心有人可以使用非常低级别的权限集设置服务,甚至无权在文件系统上创建日志文件。” - 在服务启动时检测您所需的最低权限集是如果不是,则存在并抛出异常(或以其他方式处理)。

我不认为这本身就是一个日志记录问题。这更多的是您的服务是否具有所需权限的问题。

于 2011-01-11T02:35:49.433 回答