【问题标题】:Load log4net configuration from Assembly in Mono在 Mono 中从 Assembly 加载 log4net 配置
【发布时间】:2011-10-15 02:07:00
【问题描述】:

我正在使用 Mono 开发 C# 应用程序并尝试使用 log4net。当我手动加载配置时,记录器工作得很好,但是我想要更优雅的东西。

在 log4net 文档中,它声明可以使用以下(或类似的)行从程序集中加载配置:

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

我已确保将配置文件移至构建目录并具有该扩展名。我还确保在 MonoDevelop 中将 AssemblyInfo.cs 标记为“应用程序定义”。我不知道为什么这不起作用。有人有什么想法吗?

顺便说一句:我已经到处寻找答案。我还尝试从资源加载配置,但它也不想工作。

【问题讨论】:

  • .log4net 文件是根据你的 .exe 命名的吗?例如myapp.exe.log4net
  • 不,应该是这样吗?我看到了这样的例子,但没有人说它“必须是”。我以为这只是一个约定。
  • 试了试,结果一样:没有日志消息。
  • 文档说它必须是:“ConfigFileExtension 如果指定,这是配置文件的扩展名。程序集文件名用作附加此扩展名的基本名称。例如,如果程序集是" (logging.apache.org/log4net/release/manual/configuration.html)
  • 您的解决方案的设置是什么?一个.exe?没有项目参考?

标签: c# mono log4net monodevelop


【解决方案1】:

在 log4net 中使用多个配置文件是可能的,但很尴尬。请参阅此处的讨论:log4net - configure using multiple configuration files

您是否在 .exe 和 .dll 中进行日志记录?

你可以用一个配置文件吗?

请记住文档中的这一部分:“如果您使用配置属性,则必须调用 log4net 以允许它读取属性。对 LogManager.GetLogger 的简单调用将导致调用程序集上的属性被读取和处理. 因此,必须在应用程序启动期间尽早进行日志调用,并且肯定是在加载和调用任何外部程序集之前。”

尝试将问题提炼成一个简单的例子。

  • 确保您的配置文件名称为 exename.exe.log4net
  • 确保将问题中的 AssemblyAttribute 放入 .exe 的 AssemblyInfo.cs 中
  • 确保在调用 .DLL 中的任何代码之前尽快在 .exe 中调用 LogManager.GetLogger

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多