如何使用 config c# 中的规则在 NLog 中发送特定功能
how to send for specific functions in NLog using rules in config c#
我有一个这样的 Logger class:
public class Logger : ILogging
{
private ILogger _logger;
public Logger()
{
_logger = LoggerFactory<ILogging>.Resolve();
}
public void log(string priority, string message)
{
//to do the code here
}
}
这是我的配置文件:
<rules >
<logger name="Priority1" minlevel="Error" writeTo="logfile" />
<logger name="Priority2" minlevel="Warn" writeTo="logfile" />
<logger name="Priority3" minlevel="Debug" writeTo="logfile" />
<logger name="Priority4" minlevel="Trace" writeTo="logfile" />
我想通过"Name"规则写入nlog中的特定函数
例如:如果用户调用
logger.log("Priority1","errorMessage");
函数知道去 logger.error("error")
我试图在 google 中查看,但我没有看到任何好的解决方案
更新
public void log( Priority priority, string message)
{
string currentLogLevel;
_logger = NLog.LogManager.GetLogger(priority.ToString());
LogEventInfo logEvent = new LogEventInfo(currentLogLevel , _logger.Name, message);
_logger.Log(logEvent);
}
您可以管理包装器 class(工厂),
参见示例:
How to retain callsite information when wrapping NLog
关注 OP 的评论:
而不是
public void log( Priority priority, string message)
{
string currentLogLevel; // <= This can't work
_logger = NLog.LogManager.GetLogger(priority.ToString());
LogEventInfo logEvent = new LogEventInfo(currentLogLevel , _logger.Name, message);
_logger.Log(logEvent);
}
做
public void log( Priority priority, string message)
{
LogLevel logLevel;
switch(priority)
{
case Priority.Priority1 : loglevel = LogLevel.Error; break;
case Priority.Priority2 : loglevel = LogLevel.Warn; break;
case Priority.Priority3 : loglevel = LogLevel.Debug; break;
case Priority.Priority4 : loglevel = LogLevel.Trace; break;
default: loglevel = LogLevel.None; break;
}
_logger = NLog.LogManager.GetLogger(priority.ToString());
LogEventInfo logEvent = new LogEventInfo(logLevel , _logger.Name, message);
_logger.Log(logEvent);
}
开始。
但我也建议仅使用一个记录器并将其作为包装器的静态字段。
我个人通常使用不带包装器的 NLog。这让我可以自由地获取 class-based 记录器和我可以在配置文件中路由和过滤的专用记录器。但是,如果您需要或想要使用包装器,如果您没有在消息本身中这样做,我会考虑将一些上下文与消息一起传递。
我有一个这样的 Logger class:
public class Logger : ILogging
{
private ILogger _logger;
public Logger()
{
_logger = LoggerFactory<ILogging>.Resolve();
}
public void log(string priority, string message)
{
//to do the code here
}
}
这是我的配置文件:
<rules >
<logger name="Priority1" minlevel="Error" writeTo="logfile" />
<logger name="Priority2" minlevel="Warn" writeTo="logfile" />
<logger name="Priority3" minlevel="Debug" writeTo="logfile" />
<logger name="Priority4" minlevel="Trace" writeTo="logfile" />
我想通过"Name"规则写入nlog中的特定函数 例如:如果用户调用
logger.log("Priority1","errorMessage");
函数知道去 logger.error("error")
我试图在 google 中查看,但我没有看到任何好的解决方案
更新
public void log( Priority priority, string message)
{
string currentLogLevel;
_logger = NLog.LogManager.GetLogger(priority.ToString());
LogEventInfo logEvent = new LogEventInfo(currentLogLevel , _logger.Name, message);
_logger.Log(logEvent);
}
您可以管理包装器 class(工厂),
参见示例:
How to retain callsite information when wrapping NLog
关注 OP 的评论:
而不是
public void log( Priority priority, string message)
{
string currentLogLevel; // <= This can't work
_logger = NLog.LogManager.GetLogger(priority.ToString());
LogEventInfo logEvent = new LogEventInfo(currentLogLevel , _logger.Name, message);
_logger.Log(logEvent);
}
做
public void log( Priority priority, string message)
{
LogLevel logLevel;
switch(priority)
{
case Priority.Priority1 : loglevel = LogLevel.Error; break;
case Priority.Priority2 : loglevel = LogLevel.Warn; break;
case Priority.Priority3 : loglevel = LogLevel.Debug; break;
case Priority.Priority4 : loglevel = LogLevel.Trace; break;
default: loglevel = LogLevel.None; break;
}
_logger = NLog.LogManager.GetLogger(priority.ToString());
LogEventInfo logEvent = new LogEventInfo(logLevel , _logger.Name, message);
_logger.Log(logEvent);
}
开始。
但我也建议仅使用一个记录器并将其作为包装器的静态字段。
我个人通常使用不带包装器的 NLog。这让我可以自由地获取 class-based 记录器和我可以在配置文件中路由和过滤的专用记录器。但是,如果您需要或想要使用包装器,如果您没有在消息本身中这样做,我会考虑将一些上下文与消息一起传递。