【问题标题】:Log4net for windows service用于 Windows 服务的 Log4net
【发布时间】:2013-07-26 08:21:43
【问题描述】:

这是我第一次使用Log4net。它没有显示任何错误,但没有写入文件。我在AppConfig 文件中添加了以下内容:

<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
    </configSections>

 <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/>
      </layout>
    </appender>

    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\CE\FileControllerLog.txt"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>-->
        <param name="ConversionPattern" value="%d %m%n"/>
      </layout>
      <appendToFile value="true"/>
      <rollingStyle value="Composite"/>
      <maxSizeRollBackups value="2"/>
      <maximumFileSize value="10MB"/>
      <staticLogFileName value="true"/>
    </appender>
    <logger name="FileControllerLog">
      <level value="INFO"/>
      <appender-ref ref="LogFileAppender" />
      <appender-ref ref="ConsoleAppender"/>
    </logger>
[assembly: log4net.Config.XmlConfigurator(Watch = true)] //added in assembly info file

在代码中:

ILog logger = log4net.LogManager.GetLogger("FileControllerLog");
logger.Info("Method starts");

它没有记录。

【问题讨论】:

  • 在常规控制台应用程序中尝试该代码和配置,看看它是否有效。

标签: .net c#-4.0 app-config


【解决方案1】:

试试这个:

 <log4net>
    <root>
      <level value="Error" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="<FilePath>" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="14" />
      <countDirection value="1" />
      <maximumFileSize value="4096KB" />
      <lockingModel type="log4net.Appender.FileAppender.MinimalLock" />
      <staticLogFileName value="true" />
      <PreserveLogFileNameExtension value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newlineDate[%date] ThreadID[%thread] Level[%-5level] Logger[%logger]] - %message%newline" />
      </layout>
    </appender>
  </log4net>

除此之外,Config部分应该有一个Log4Net的入口,例如:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
</configuration>

在您的 Logger 类中有 ILog 变量,并在构造函数中配置记录器,如下所示:

private ILog log;

public Log4NetLogger()
{
    log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    log4net.Config.XmlConfigurator.Configure();
}

【讨论】:

  • 问题出在配置文件上。该项目没有读取配置文件。为了解决这个问题,我在程序集文件中添加了 [assembly: log4net.Config.XmlConfigurator(ConfigFile = @"fullpath\App.config", Watch = true)]。如何在程序集文件中直接给出根路径
  • 检查一下,它肯定会解决你的问题:logging.apache.org/log4net/release/manual/…
【解决方案2】:

确保使用他的凭据运行服务的用户对您尝试保存日志的位置具有写入权限

【讨论】:

    【解决方案3】:

    可能是用户权限问题。

    Windows 服务通常以没有写入权限的 NetworkService 凭据启动。

    您可以为 C:\CE 文件夹添加 write 和 midify 权限或使用另一个 Appender(如 EventLog Appender)

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多