首页 > 解决方案 > 使用 Log4Net 记录到多个文件

问题描述

所以我正在使用 log4net 向应用程序添加日志记录功能。我创建了一个类来设置日志记录,因为我需要实例化多个记录器。每次我需要创建一个新的日志记录实例时,我都打算调用此方法并将必要的参数传递给它。

public class Logging
{
    /// <summary>
    /// Sets up a new logging instance
    /// </summary>
    public void Setup(string logName, log4net.Core.Level logLevel)
    {
        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

        PatternLayout patternLayout = new PatternLayout
        {
            ConversionPattern = "%date [%thread] %-5level - %message%newline"
        };
        patternLayout.ActivateOptions();

        RollingFileAppender roller = new RollingFileAppender
        {
            Name = logName,
            AppendToFile = true,
            File = "path\\to\\log\\ " + logName + ".txt",
            Layout = patternLayout,
            MaxSizeRollBackups = 5,
            MaximumFileSize = "1GB",
            RollingStyle = RollingFileAppender.RollingMode.Size,
            StaticLogFileName = true,
            Threshold = logLevel                   
        };
        roller.ActivateOptions();
        hierarchy.Root.AddAppender(roller);

        //MemoryAppender memory = new MemoryAppender();
        //memory.ActivateOptions();
        //hierarchy.Root.AddAppender(memory);
        hierarchy.Name = logName;
        hierarchy.Root.Level = Level.Info;
        hierarchy.Configured = true;


    }
}

使用此代码,我可以像这样初始化并将新的记录器添加到集合中:

        //in a certain context
        //loglevel is an assigned log level
        var fileName = "Client Execution Log";
        var logging = new Logging();
        logging.Setup(fileName, logLevel);
        var executionLog = log4net.LogManager.GetLogger(fileName);

         //in another context
         //loglevel is an assigned log level
        var fileName = "Server Response Log";
        var logging = new Logging();
        logging.Setup(fileName, logLevel);
        var serverLog = log4net.LogManager.GetLogger(fileName);

问题是每当我调用该方法来写入日志serverLog.info("server responded 404")时,它最终都会写入所有文件,而不是在Setup调用时传入的文件。如何正确设置日志记录,以便每个日志记录实例仅写入其自己的传递给 setup 方法的文件?

标签: c#log4net

解决方案


推荐阅读