1

我正在开发一个核心 dll,我有一个类库。我想使用 log4net 来启用异常日志记录。我在类库中有一个 app.config 文件,我在其中给出了 log4net 的设置。但是,当我测试类库时,log4net 不会创建日志,直到我将 app.config 添加到调用项目中,尽管事实上我在类库的 assemblyinfo.cs 中添加了 [assembly: log4net.Config.XmlConfigurator(Watch = true)] 并且我正在使用 log4net.ILog logger = log4net.LogManager.GetLogger(typeof(ErrorHandler)) 其中 ErrorHandler 是名称我的类库的类,其中处理 log4net 的调用函数。关于出了什么问题的任何想法?

其次,我想要实现的是我的 dll 的用户只会传递他们想要创建日志的位置,以及他们是想在事件查看器中创建日志还是从他们的 app.config 中创建日志文件?他们不会处理 log4net 的任何其他设置。

关于第一个问题和第二个问题的任何建议或代码片段?

4

1 回答 1

1

对于 .Net 应用程序,只有“主”app.config 处于活动状态。您的库配置文件将被忽略。要么将设置转移到主配置文件,要么使用 log4net 的外部配置文件。然后你像这样配置它(假设你称之为 log4net.config):

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

请注意,配置文件的结构有点不同:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="YourAppender" type="..." >
      ....
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="YourAppender" />
    </root>
</log4net>

至于您的第二个问题:我不确定这必须有多灵活。它只是从文件附加程序切换到事件日志附加程序吗?根据您的回答,您可能会考虑两个准备配置文件(例如 file.log4net 和 eventlog.log4net)并根据需要读取配置(在这种情况下,您不能使用该属性:您Configure()直接调用该方法)或者您的要求更多复杂的你甚至可能最终以编程方式配置 log4net 。

于 2012-06-30T10:04:20.707 回答