【问题标题】:Windows service not logging with Log4NetWindows 服务未使用 Log4Net 进行日志记录
【发布时间】:2015-02-24 19:53:11
【问题描述】:

我正在使用带有 .Net 4.5 的 Log4Net v1.2.13.0。当我将代码作为控制台应用程序运行时,它记录得很好。但是,当我将它作为服务运行时,我什么也得不到。该服务以我具有管理员权限的登录身份运行。当我附加到进程并在调试模式下逐步执行代码时,就好像配置文件中的任何内容都没有被读取。当您检查记录器对象时,没有任何属性设置为真,例如Logger.IsDebugEnabled、Logger.IsInfoEnabled 等

这是我配置记录器实例然后检索相同实例的方式。

private static readonly ILog Logger = LogManager.GetLogger(typeof(ServiceHostService));

我将日志记录级别设置为 ALL。

有什么想法可能是错的吗?

【问题讨论】:

  • 您是否在某处调用了 Log4Net.Configure?
  • 确保您的服务对 Log4net 正在写入的文件也具有写入权限。这不仅仅是一个安全访问问题。
  • 不,我没有在代码中的任何地方调用 Log4Net.Configure。我从其他人那里继承了这段代码,它从未调用过它,并且作为控制台应用程序一直运行良好,但现在我正在推广服务。我正在写入数据库表和事件日志,但不是文件。服务在盒子上有管理员,并以数据库的 dbo 身份登录。
  • 您的配置是否定义了 root 记录器?
  • 另请注意,您的服务必须在提升的进程中运行一次才能创建事件源以启用对事件日志的日志记录

标签: c# logging log4net


【解决方案1】:

如果LogManager.GetRepository().Configured返回false,那么log4net还没有初始化。

假设您有 XML 格式的配置,则需要调用 log4net.Config.XmlConfigurator.Configure(…) 或像 [assembly: log4net.Config.XmlConfigurator(…)] 这样的程序集属性来加载配置。如果它与 app.config 位于单独的文件中,请确保将该文件复制到输出中。

如果配置了 log4net,但所有日志级别仍处于禁用状态,请通过查看 LogManager.GetRepository().ConfigurationMessages.Cast<LogLog>() 的结果来检查配置问题。

如果您将配置添加到您的问题中可能会有所帮助。

【讨论】:

  • 虽然 [assembly: log4net.Config.XmlConfigurator(Watch = true)] 在用于服务的类库中,但它实际上并未在标记为服务的项目程序集文件中。
猜你喜欢
  • 2020-05-21
  • 2016-06-05
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多