为部分代码添加appender

Add an appender for a portion of code

对于我代码的某个部分,我需要将所有消息记录到第二个文件中,具体到在两个 类.

中完成的每个操作实例

这些 类(ParserImporter)都有以下记录器定义:

private static ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

两者都有这个方法:

public void AddAppender(IAppender appender)
{
    ((Logger)_logger.Logger).AddAppender(appender);
}

整个项目(ASP.NET WebForms)日志记录在AssemblyInfo.cs:

中初始化
[assembly: XmlConfigurator]

现在,当用户触发某个动作时,会发生这种情况:

var logFile = new FileInfo(ConfigurationManager.AppSettings["uploadDir"] + "/" + importId + "_log.txt");
var appender = new FileAppender() {
    Threshold = Level.Info,
    Layout = new PatternLayout("%message%newline"),
    File = logFile.FullName
};

var parser = new Parser(...);
parser.AddAppender(appender);
var candidates = parser.Parse(File.ReadAllLines(uploadFile.FullName));

var importer = new Importer(...);
importer.AddAppender(appender);
importer.Import(candidates, false, ignoreWarnings.Checked);

我的期望是,将在 logFile 位置创建一个文件,其中将包含来自两个 类.[= 中任何一个的所有 INFO 及以上消息18=]

然而,情况并非如此 - 根本没有创建任何文件。

我哪里做错了,我怎样才能让它发挥作用?

根据 documentation of FileAppender:

This appender will first try to open the file for writing when ActivateOptions is called. This will typically be during configuration. If the file cannot be opened for writing the appender will attempt to open the file again each time a message is logged to the appender. If the file cannot be opened for writing when a message is logged then the message will be discarded by this appender.

此文档有点含糊不清,因为它似乎暗示在所有情况下都将在您尝试记录消息时打开该文件,但事实并非如此——除非您调用 ActivateOptions, appender 永远不会被认为可以追加。