【问题标题】:Configure log4net to write to different log files, no config files配置 log4net 写入不同的日志文件,没有配置文件
【发布时间】:2015-01-08 17:33:51
【问题描述】:

我想这样做:

Configure Log4net to write to multiple files

但我想使用代码即配置。我该怎么做?

这是我尝试过的:

// Configure log A
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date %level %logger: %message%newline";
patternLayout.ActivateOptions();

RollingFileAppender appender = new RollingFileAppender();
appender.Name = @"MyLogA";
appender.File = @"C:\Temp\MyLogs\A.log";
appender.AppendToFile = true;
appender.MaxSizeRollBackups = 2;
appender.RollingStyle = RollingFileAppender.RollingMode.Size;
appender.MaximumFileSize = "10MB";
appender.Layout = patternLayout;
appender.LockingModel = new FileAppender.MinimalLock();
appender.StaticLogFileName = true;
appender.ActivateOptions();
hierarchy.Root.AddAppender(appender);

hierarchy.Configured = true;

// Configure log B
Hierarchy hierarchyB = (Hierarchy)LogManager.GetRepository();

PatternLayout patternLayoutB = new PatternLayout();
patternLayoutB.ConversionPattern = "%date %level %logger: %message%newline";
patternLayoutB.ActivateOptions();

RollingFileAppender appenderB = new RollingFileAppender();
appenderB.Name = @"MyLogB";
appenderB.File = @"C:\Temp\MyLogs\B.log";
appenderB.AppendToFile = true;
appenderB.MaxSizeRollBackups = 2;
appenderB.RollingStyle = RollingFileAppender.RollingMode.Size;
appenderB.MaximumFileSize = "10MB";
appenderB.Layout = patternLayout;
appenderB.LockingModel = new FileAppender.MinimalLock();
appenderB.StaticLogFileName = true;
appenderB.ActivateOptions();
hierarchyB.Root.AddAppender(appenderB);

hierarchyB.Configured = true;


// Test Log A

var loggerA = log4net.LogManager.GetLogger("MyLogA");

loggerA.Info("TestA");
loggerA.Info("TestA");
loggerA.Info("TestA");
loggerA.Info("TestA");
loggerA.Info("TestA");

// Test Log B
var loggerB = log4net.LogManager.GetLogger("MyLogB");
loggerB.Info("TestB");
loggerB.Info("TestB");
loggerB.Info("TestB");
loggerB.Info("TestB");
loggerB.Info("TestB");

但是当我这样做时,所有 10 条日志消息都被转储到 LogA 和 LogB 中,它们不会转到各自的日志文件中。

我怎样才能让它工作?

【问题讨论】:

    标签: c# log4net


    【解决方案1】:

    我不完全明白为什么,但以下解决了问题:

    var hierarchy = (Hierarchy)LogManager.GetRepository();
    hierarchy.Threshold = Level.Debug;
    
    // Configure LoggerA
    string logNameA = @"A";
    string fileNameA = @"C:\Temp\MyLogs\A.log";
    var loggerA = hierarchy.LoggerFactory.CreateLogger("LoggerA");
    loggerA.Hierarchy = hierarchy;
    loggerA.AddAppender(CreateFileAppender(logNameA,fileNameA));
    loggerA.Repository.Configured = true;
    loggerA.Level = Level.Debug;
    
    ILog logA = new LogImpl(loggerA);
    
    // Configure LoggerB
    
    string logNameB = @"B";
    string fileNameB = @"C:\Temp\MyLogs\B.log";
    var loggerB = hierarchy.LoggerFactory.CreateLogger("LoggerB");
    loggerB.Hierarchy = hierarchy;
    loggerB.AddAppender(CreateFileAppender(logNameB, fileNameB));
    loggerB.Repository.Configured = true;
    loggerB.Level = Level.Debug;
    
    ILog logB = new LogImpl(loggerB);
    
    // Test
    
    logA.Error("logA");
    logA.Error("logA");
    logA.Error("logA");
    logA.Error("logA");
    logA.Error("logA");
    
    logB.Error("logB");
    logB.Error("logB");
    logB.Error("logB");
    logB.Error("logB");
    logB.Error("logB");
    logB.Error("logB");
    

    CreateFileAppender() 在哪里:

    private static IAppender CreateFileAppender(string name, string fileName)
    {
        PatternLayout patternLayout = new PatternLayout();
        patternLayout.ConversionPattern = "%date %level %logger: %message%newline";
        patternLayout.ActivateOptions();
    
        RollingFileAppender appender = new RollingFileAppender();
        appender.Name = name;
        appender.File = fileName;
        appender.AppendToFile = true;
        appender.MaxSizeRollBackups = 2;
        appender.RollingStyle = RollingFileAppender.RollingMode.Size;
        appender.MaximumFileSize = "10MB";
        appender.Layout = patternLayout;
        appender.LockingModel = new FileAppender.MinimalLock();
        appender.StaticLogFileName = true;
        appender.ActivateOptions();
        return appender;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 2010-11-25
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多