nlog 的包装函数 - 分配日志级别
Wrapper function for nlog - assigning log level
我想要一个自定义日志 class,然后将其属性注入 nlog Logger。 class 应该初始化 nlog target 和 config ,然后其他人可以使用它而无需知道这些细节。
public interface ILogger
{
void Log(LogEntry entry);
}
public enum LoggingEventType { Debug, Information, Warning, Error, Fatal};
public class LogEntry
{
public readonly LoggingEventType Level;
public readonly string Message;
public readonly Exception Ex;
public LogEntry(LoggingEventType level, string message, Exception exception = null)
{
this.Level = severity;
this.Message = message;
this.Ex = exception;
}
}
public static Main(){
//Should happen in Class MyLogger that implements ILogger
var config = new NLog.Config.LoggingConfiguration();
var logfile = new NLog.Targets.FileTarget("logfile") { FileName
"file.txt" };
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
NLog.LogManager.Configuration = config;
LogEntery log = new LogEntry( Error , "Bad stuff" , IOException);
Logger nlog = logger.Error( log.Ex , log.Message);
//How can I inject log level to Nlog class Logger?
}
如何将日志级别注入 Nlog class 记录器?
也许是这样的:
class NLogLogger : ILogger
{
private readonly NLog.Logger _logger;
public NLogLogger(string name)
{
_logger = NLog.LogManager.GetLogger(name);
}
public void Log(LogEntry entry)
{
var nlogLevel = GetNLogLevel(entry.Level);
if (_logger.IsEnabled(nlogLevel))
{
var nlogEvent = NLog.LogEventInfo.Create(nlogLevel, _logger.Name, entry.Message, entry.Ex);
_logger.Log(typeof(NLogLogger), nlogEvent);
}
}
NLog.LogLevel GetNLogLevel(LoggingEventType level)
{
switch (level)
{
case LoggingEventType.Debug: return NLog.LogLevel.Debug;
case LoggingEventType.Information: return NLog.LogLevel.Info;
case LoggingEventType.Warning: return NLog.LogLevel.Warn;
case LoggingEventType.Error: return NLog.LogLevel.Error;
case LoggingEventType.Fatal: return NLog.LogLevel.Fatal;
default: return NLog.LogLevel.Trace;
}
}
}
对于任何语法错误,我们深表歉意。
另请参阅:https://github.com/NLog/NLog/wiki/Custom-extension-of-Logger-interface
我想要一个自定义日志 class,然后将其属性注入 nlog Logger。 class 应该初始化 nlog target 和 config ,然后其他人可以使用它而无需知道这些细节。
public interface ILogger
{
void Log(LogEntry entry);
}
public enum LoggingEventType { Debug, Information, Warning, Error, Fatal};
public class LogEntry
{
public readonly LoggingEventType Level;
public readonly string Message;
public readonly Exception Ex;
public LogEntry(LoggingEventType level, string message, Exception exception = null)
{
this.Level = severity;
this.Message = message;
this.Ex = exception;
}
}
public static Main(){
//Should happen in Class MyLogger that implements ILogger
var config = new NLog.Config.LoggingConfiguration();
var logfile = new NLog.Targets.FileTarget("logfile") { FileName
"file.txt" };
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
NLog.LogManager.Configuration = config;
LogEntery log = new LogEntry( Error , "Bad stuff" , IOException);
Logger nlog = logger.Error( log.Ex , log.Message);
//How can I inject log level to Nlog class Logger?
}
如何将日志级别注入 Nlog class 记录器?
也许是这样的:
class NLogLogger : ILogger
{
private readonly NLog.Logger _logger;
public NLogLogger(string name)
{
_logger = NLog.LogManager.GetLogger(name);
}
public void Log(LogEntry entry)
{
var nlogLevel = GetNLogLevel(entry.Level);
if (_logger.IsEnabled(nlogLevel))
{
var nlogEvent = NLog.LogEventInfo.Create(nlogLevel, _logger.Name, entry.Message, entry.Ex);
_logger.Log(typeof(NLogLogger), nlogEvent);
}
}
NLog.LogLevel GetNLogLevel(LoggingEventType level)
{
switch (level)
{
case LoggingEventType.Debug: return NLog.LogLevel.Debug;
case LoggingEventType.Information: return NLog.LogLevel.Info;
case LoggingEventType.Warning: return NLog.LogLevel.Warn;
case LoggingEventType.Error: return NLog.LogLevel.Error;
case LoggingEventType.Fatal: return NLog.LogLevel.Fatal;
default: return NLog.LogLevel.Trace;
}
}
}
对于任何语法错误,我们深表歉意。
另请参阅:https://github.com/NLog/NLog/wiki/Custom-extension-of-Logger-interface