C# NLog实例问题
我正在使用NLog创建一个日志库,需要根据不同的终端设置日志。我所做的是创建一个ILoggerFacade实现,并将文件名作为构造函数传递,同时注入用于创建日志文件的文件名 这是我的密码:C# NLog实例问题,c#,nlog,C#,Nlog,我正在使用NLog创建一个日志库,需要根据不同的终端设置日志。我所做的是创建一个ILoggerFacade实现,并将文件名作为构造函数传递,同时注入用于创建日志文件的文件名 这是我的密码: internal static class FileLogFactory { #region "Private Static Members" private static ILog _applicationLog; private static Dictionary<stri
internal static class FileLogFactory
{
#region "Private Static Members"
private static ILog _applicationLog;
private static Dictionary<string, ILog> _terminalLogs;
private static object _syncLock = new object();
#endregion
#region "Constant Fields"
private const string _APPLICATION_LOG = "applicationLog";
private const string _TERMINAL_LOG = "terminalHandlerLog";
private const string _TERMINAL_PREFIX = "filenameprefix";
public const string APPLICATION = "Application";
#endregion
#region "Static Cosntructors"
static FileLogFactory()
{
_terminalLogs = new Dictionary<string, ILog>();
}
#endregion
#region "Static Methods"
internal static ILog CreateLoggerInstance(string filename)
{
lock (_syncLock)
{
if (string.IsNullOrEmpty(filename) || filename == APPLICATION)
{
// Application Log requested.
if (_applicationLog == null)
{
_applicationLog = LogManager.GetLogger(_APPLICATION_LOG);
}
return _applicationLog;
}
// terminal log requested, check if already created else create new.
if (!_terminalLogs.ContainsKey(filename))
{
NLog.GlobalDiagnosticsContext.Set(_TERMINAL_PREFIX, filename);
_terminalLogs.Add(filename, LogManager.GetLogger(_TERMINAL_LOG));
}
return _terminalLogs[filename];
}
}
#endregion
}
内部静态类FileLogFactory
{
#区域“私有静态成员”
专用静态ILog\u应用程序日志;
专用静态词典;
私有静态对象_syncLock=新对象();
#端区
#区域“常量字段”
私有常量字符串\u APPLICATION\u LOG=“applicationLog”;
私有常量字符串\u TERMINAL\u LOG=“terminalHandlerLog”;
私有常量字符串\u TERMINAL\u PREFIX=“filenameprefix”;
public const string APPLICATION=“APPLICATION”;
#端区
#区域“静态共导体”
静态FileLogFactory()
{
_TerminalLS=新字典();
}
#端区
#区域“静态方法”
内部静态ILog CreateLoggerInstance(字符串文件名)
{
锁(同步锁)
{
if(string.IsNullOrEmpty(filename)| | filename==应用程序)
{
//请求应用程序日志。
if(_applicationLog==null)
{
_applicationLog=LogManager.GetLogger(\u APPLICATION\u LOG);
}
返回应用程序日志;
}
//已请求终端日志,请检查是否已创建或新建。
if(!\u terminalvs.ContainsKey(文件名))
{
NLog.GlobalDiagnosticsContext.Set(_TERMINAL_前缀,文件名);
_Add(文件名,LogManager.GetLogger(_TERMINAL_LOG));
}
返回[filename];
}
}
#端区
}
下面是我的NLog配置
在NLog上使用GetLogger方法时,您将获得在配置中配置的实例。如果需要多个配置,如写入运行时已知的不同文件,则需要在代码中创建日志实例:
if (!_terminalLogs.ContainsKey(filename))
{
var config = LogManager.Configuration;
var fileTarget = new FileTarget();
fileTarget.FileName = filename;
fileTarget.Layout = "${longdate}|${uppercase:${level}}|${threadid}| ${message}";
fileTarget.ArchiveAboveSize = 1024000;
然后将记录器添加到您的收藏中:
_terminalLogs.Add(filename, _fileTarget);
config.AddTarget(filename, fileTarget);
}
除此之外,还需要更新Logmanager的配置,如下所示:Logmanager.Configuration=config;