【问题标题】:Log4net is not creating the log file after installation of the windows service安装 Windows 服务后,Log4net 未创建日志文件
【发布时间】:2015-12-17 05:40:54
【问题描述】:

我正在使用 log4net 记录器实现 Windows 服务。问题是当我调试服务时,会创建日志,但安装后,日志没有创建。我使用 app.config 文件和另一个配置文件来添加配置细节

这是我的 app.config 文件

<?xml version="1.0" encoding="utf-8" ?> <configuration>   <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />   </startup>   <appSettings>
<!--Log file configuration-->
<add key="log4net.Config" value="log4.config"/>
<add key="log4net.Config.Watch" value="True"/>
<add key="log4net.Internal.Debug" value="false"/>   </appSettings> </configuration>

这是另一个名为 log4.config 的配置文件

<?xml version="1.0" encoding="utf-8" ?>
 <configuration>   
  <configSections>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
 </configSections>

<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="D:\applications\ActualSys\FujiOrder\log\log.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>
<root>
  <level value="ALL" />
  <appender-ref ref="RollingFileAppender" />
</root>   </log4net> </configuration>

我正在使用以下方式创建日志消息

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

log.Info("Interface " + CODE + " - sendOrderThreadRoutine started!");

这在我调试时非常有效。但这在安装服务后不起作用。

我已尝试使用 AssemblyInfo.cs 文件执行以下代码 sn-ps。但是问题还没有解决

[程序集:log4net.Config.XmlConfigurator(Watch = true)]

当我安装服务时,以下文件在安装的文件夹中

  1. .exe文件
  2. .config 文件
  3. log4net.dll

尽管我可以看到很多在调试阶段没有创建日志文件的示例,但我在安装阶段找不到关于相同问题的文章。

【问题讨论】:

  • 您是否将服务安装在与您正在调试的机器相同的机器上?服务在什么凭据下运行?可能是权限问题。
  • 为什么需要另一个配置文件?您是否尝试将它们全部放入 app.config 中?

标签: windows-services log4net


【解决方案1】:

首先在您的配置中启用 log4net 调试:

<configuration>
   <appSettings>
      <add key="log4net.Internal.Debug" value="true"/>
   </appSettings>
</configuration>

log4net faq

在开始记录之前,您需要调用 log4net 配置。因为当你作为服务运行时,你有一个不同的入口点,当你在调试器中运行时。检查您是否确实调用了配置。

另一个问题可能是写入日志目录时某种访问被拒绝。您正在以不同的用户身份运行。这将在 log4net 的调试日志中。或者该文件可以被您的调试会话锁定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多