因此,我正在使用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方法的自己的文件?