Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NLog实例问题_C#_Nlog - Fatal编程技术网

C# NLog实例问题

C# NLog实例问题,c#,nlog,C#,Nlog,我正在使用NLog创建一个日志库,需要根据不同的终端设置日志。我所做的是创建一个ILoggerFacade实现,并将文件名作为构造函数传递,同时注入用于创建日志文件的文件名 这是我的密码: internal static class FileLogFactory { #region "Private Static Members" private static ILog _applicationLog; private static Dictionary<stri

我正在使用NLog创建一个日志库,需要根据不同的终端设置日志。我所做的是创建一个ILoggerFacade实现,并将文件名作为构造函数传递,同时注入用于创建日志文件的文件名

这是我的密码:

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;