以编程方式使用Log4Net强制新的日志文件

时间:2013-04-30 16:32:29

标签: .net logging log4net

注意:我读过这个问题和答案,但它不适用于我想要的内容:Log4Net: Programmatically specify multiple loggers (with multiple file appenders)

我有一个WCF服务,它是一个“问答”式服务。它获得输入并发送输出。它根本不存在。

我需要将每个问答会话记录在一个单独的文件中。

我有一个Appender(目前是RollingAppender)。

是否有某种方法可以为每次调用WCF服务启动新的日志文件?

注意:我使用的是XML Layout,其想法是可以解析日志的输出并以图形方式显示(稍后的功能)。有点像“查询计划”。这是我在一个单独的文件中需要它们的另一个原因。

注意:如果需要其他原因,Log4Net XmlLayoutBase将不会删除xml页脚,直到应用程序关闭。这不是IIS中托管的WCF服务的计划事件。

3 个答案:

答案 0 :(得分:4)

这似乎对我有用:

public static void StartNewFile(this ILog log, string newFileName)
{
    Logger logger = (Logger) log.Logger;

    while (logger != null)
    {
        foreach (IAppender appender in logger.Appenders)
        {
            FileAppender fileAppender = appender as FileAppender;
            if (fileAppender != null)
            {
                fileAppender.File = newFileName;
                fileAppender.ActivateOptions();
            }
        }
        logger = logger.Parent;
    }
}

需要以下参考资料:

using log4net;
using log4net.Appender;
using log4net.Repository.Hierarchy;

答案 1 :(得分:2)

您可以尝试登录数据库表并使用记录的数据记录会话ID,而不是记录到文件。这样,您可以根据会话ID对表进行选择,并仅查看其数据。

答案 2 :(得分:0)

也许不是您正在寻找的确切解决方案,但您可以通过在每个接口调用开始时调用它来为每个会话创建不同的记录器:

ILog logger = LogManager.GetLogger(<SessionID>);

您将获得同一日志文件中的所有条目,但使用log4view等查看器分别查看每个会话非常容易。

希望有所帮助