【发布时间】:2012-02-10 09:38:27
【问题描述】:
我有一个应用程序正在加载带有反射的插件模块。 应用程序在 app.config 中定义了一个 log4net-log-appender,例如:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\xxx.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<threshold value="DEBUG" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" />
</layout>
</appender>
我在如下代码中得到了 Logger:
private static readonly ILog log = LogManager.GetLogger(typeof(Indexer));
现在,我正在寻找一种方法来为每个模块(程序集)声明不同的日志文件,这些模块是通过反射加载为插件的。
第一个问题是,模块一起使用 Business-Library-Classes(它们位于所有模块使用的程序集中),这也会生成日志条目。这些条目也应该插入到模块的日志文件中。
第二个问题是,我不知道开发时的模块。所以我不能在 app.config 中插入一些配置。
【问题讨论】:
-
那么,如果从不同的程序集调用相同的实例方法,您希望其私有记录器写入不同的日志文件吗?这是不可能的。你为什么要这样做?看来您使用日志记录的目的不仅仅是故障排除。
-
@Groo - 不,不同的程序集使用了不同的实例(但相同的类)。
-
但是它们是从同一个appdomain(单个应用程序)中的不同程序集中使用的?如果您的记录器被
static字段引用(如您所示),那么只有一个记录器实例。
标签: c# .net plugins log4net log4net-configuration