繁体   English   中英

配置log4net以写入不同的日志文件,没有配置文件

[英]Configure log4net to write to different log files, no config files

我想做这个:

配置Log4net以写入多个文件

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

这是我尝试过的:

// 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");

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

我怎样才能让它发挥作用?

我不完全理解为什么,但以下修复了这个问题:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM