C# 为日志行log4net添加前缀
我有一个写日志的类,我使用log4net:C# 为日志行log4net添加前缀,c#,log4net,C#,Log4net,我有一个写日志的类,我使用log4net: class MyClass { private readonly ILog _logger = LogManager.GetLogger(typeof(MyClass)); public void Work(int i) { _logger.Info($"{i} start"); _logger.Info($"{i} work");
class MyClass
{
private readonly ILog _logger = LogManager.GetLogger(typeof(MyClass));
public void Work(int i)
{
_logger.Info($"{i} start");
_logger.Info($"{i} work");
_logger.Info($"{i} finished");
}
}
日志起作用了。但如何更改此代码,即在写入日志块之前设置的前缀“{i}”
,而不需要在每次写入日志时添加?像这样的事情:
using(_logs.Startprefix("{i}"))
{
_logger.Info("start");
_logger.Info("work");
_logger.Info("finished");
}
因此,文件中的每一行都将写入
{i}
您想要做的不是log4net的内置功能。您需要围绕log4net逻辑编写一个包装器来添加此功能。像这样的东西,但这是一个粗略的草案,你需要修复和完成它
class MyLogger
{
private readonly string _prefix;
private readonly ILog _logger = LogManager.GetLogger(typeof(MyClass));
public MyLogger(string prefix)
{
_prefix = prefix;
}
public void Info(string info)
{
_logger.Info($"{_prefix} {info}");
}
}
最简单的部分是使用如下新方法和前缀属性:
class MyClass
{
private readonly ILog _logger = LogManager.GetLogger(typeof(MyClass));
public int Prefix {get;set;}
public void Work()
{
PrintLine("start");
PrintLine("work");
PrintLine("finished");
}
private void PrintLine(string txt) {
_logger.Info(Prefix + " " + txt);
}
}
制作自己的记录器,将
ILog
压缩,并在那里实现前缀
成员
class MyLogger
{
private readonly ILog _logger;
public int? Prefix;
public MyLogger(Type t)
{
_logger = NLog.LogManager.GetLogger(t.Name);
}
public void Info(string message)
{
_logger.Info($"{Prefix?.ToString() ?? ""} {message}");
}
}
然后您可以使用和语句:
using (myLogger.Prefix = i)
{
myLogger.Info("start");
myLogger.Info("work");
myLogger.Info("finished");
}
我为这个案子找到了standart<代码>LogicalThreadContext
用于log4net,我的问题如下所示:
using (LogicalThreadContext.Stacks["NDC"].Push($"{i}"))
{
_logger.Info("start");
_logger.Info("work");
_logger.Info("finished");
}
你可以在方法的开头再加一行显示前缀吗_logger.Info(“{i}”)?当调用log.Info、log.Warn等时,我需要在日志的每一行中使用“{i}”
。我不想每次都写前缀。