c# - 使用 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# - ASP.NET 表使用 Bootstrap 表 css
- angularjs - 如何使承诺在视图中解析为对象?
- javascript - 控制台错误:无法识别的别名:widget.feedform
- asp.net - 获取相关实体到 ASP.NET 身份用户
- c - C 新手:在 Visual Studio Code 中编译...错误:gcc 无法识别?
- php - Codeigniter 在隐藏字段上使用 id 制作更新功能的最安全方法
- c# - 协程在正常调用 VS 时的行为不同。通过事件处理程序
- node.js - Node.js 承诺、回调和异步
- ios - 检查用户是否登录到 facebook 并更改视图控制器
- python - ImportError:无法导入名称 _aligners [biopython]