Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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# 两个处理器可以';t使用NLog同时记录信息_C#_Nlog - Fatal编程技术网

C# 两个处理器可以';t使用NLog同时记录信息

C# 两个处理器可以';t使用NLog同时记录信息,c#,nlog,C#,Nlog,我有两个项目A和B,它们都使用NLog库。现在我有一个问题: 如果A首先将loginfo写入日志文件,则B从不记录。如果B先将loginfo写入日志文件,则A从不记录。 由于A和B使用相同的NLog库,所以它们使用相同的NLog配置,但它们将构建在两个处理器中,下面是配置信息 有人对这个问题有什么好主意吗 //Set NLog Config by: //https://github.com/nlog/NLog/wiki/Configuration-API private static Logge

我有两个项目A和B,它们都使用NLog库。现在我有一个问题:

如果A首先将loginfo写入日志文件,则B从不记录。如果B先将loginfo写入日志文件,则A从不记录。

由于A和B使用相同的NLog库,所以它们使用相同的NLog配置,但它们将构建在两个处理器中,下面是配置信息

有人对这个问题有什么好主意吗

//Set NLog Config by:
//https://github.com/nlog/NLog/wiki/Configuration-API
private static Logger GenerateLogInstance()
{
    // Step 1. Create configuration object 
    var config = new LoggingConfiguration();
    // Step 2. Create targets
    var fileTarget = new FileTarget()
    {
        FileName = @"C:\Logs\${shortdate}.log",
        Layout = @"${longdate} ${uppercase:${level}} ${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}"

    };
    //var wrapper = new AsyncTargetWrapper(fileTarget, 5000, AsyncTargetWrapperOverflowAction.Discard);

    // Step 3. Define rules
    config.AddTarget("myprojectLog", fileTarget);
    config.LoggingRules.Add(new NLog.Config.LoggingRule("*", NLog.LogLevel.Trace, fileTarget));
    // Step 4. Activate the configuration
    var factory = new LogFactory(config);

    return factory.GetLogger("myprojectLog");
}
我不使用nlog,但请看以下内容。您可能需要设置
concurrentWrites=“true”

concurrentWrites—支持对的优化并发写入 来自同一计算机主机上多个进程的同一日志文件,如果 使用keepFileOpen=true。通过使用一种特殊的技术 保持文件在多个进程中处于打开状态。如果只有一个进程 (和单个AppDomain)应用程序正在进行日志记录,则可以更快地 设置为concurrentWrites=False。布尔值默认值:True。注:在UWP中 此设置应为false


你能试试这个吗

private static LogFactory GenerateLogFactory()
{
    // Step 0. Create isolated LogFactory
    var logFactory = new LogFactory();
    // Step 1. Create configuration object 
    var config = new LoggingConfiguration(logFactory);
    // Step 2. Create targets
    var fileTarget = new FileTarget()
    {
        FileName = @"C:\Logs\${shortdate}.log",
        Layout = @"${longdate} ${uppercase:${level}} ${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}"
    };
    // Step 3. Define rules
    config.AddTarget("myprojectLog", fileTarget);
    config.LoggingRules.Add(new NLog.Config.LoggingRule("*", NLog.LogLevel.Trace, fileTarget));
    // Step 4. Activate the configuration
    logFactory.Configuration = config;
    return logFactory;
}

private static Logger GenerateLogInstance()
{
    return GenerateLogFactory().GetLogger("myprojectLog");
}
如果同一解决方案中的两个项目使用相同的方法,那么你可以考虑这样做:

Lazy<LogFactory> LazyLogFactory = new Lazy<LogFactory>(() => GenerateLogFactory());

private static Logger GenerateLogInstance(string loggerName = "myprojectLog")
{
    return LazyLogFactory.Value.GetLogger(loggerName);
}
LazyLogFactory=newlazy(()=>GenerateLogFactory());
专用静态记录器GenerateLogInstance(string loggerName=“myprojectLog”)
{
返回LazyLogFactory.Value.GetLogger(loggerName);
}

你的问题一开始是“处理器”提示线程,但实际上听起来像两个应用程序。2个应用程序不写入同一文件听起来很可能,因为它可能会打开带有锁的文件。感谢您的建议,我检查了NLog,concurrentWrites默认值为true:(