2017-03-22 187 views
0

在我的.NET Core应用程序中,我使用了一些环境,并且我想为不同的路径来记录每个环境的文件。更改日志文件的动态文件路径.NET Core + NLog

例如,

Development - c:\logs 
Staging - d\apps\logs 

对于每一个环境我有配置部分中appsettings.{env}.json

"LocalPaths": { 
    "LogFileRootDirectory": "c:\\logs\\" 
} 

和部分nlog.config

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     autoReload="true" 
     internalLogLevel="Warn" 
     internalLogFile="${logFileRootDirectory}internal-nlog.txt"> 
    ... 
</nlog> 

什么来实现的最佳途径?

回答

2

您可以使用(NLog)变量。

例如

<targets> 
    <target name="file" xsi:type="File" 
     fileName="${var:mydir}/logfile.txt" ... > 

,并在C#

LogManager.Configuration.Variables["mydir"] = "c:\logs"; 

当你改变变量,路径将自动改变 - 无需重新加载。

又见the docs for ${var}

更新:你可以改变LogManager.Configuration后:

env.ConfigureNLog("nlog.config"); 

例如您的startup.cs可能如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
         ILoggerFactory loggerFactory) 
{ 
    //add NLog to ASP.NET Core 
    loggerFactory.AddNLog(); 

    //add NLog.Web 
    app.AddNLogWeb(); 

    //configure nlog.config in your project root. 
    env.ConfigureNLog("nlog.config"); 


    LogManager.Configuration.Variables["mydir"] = "c:\logs"; 
    ... 
+0

我在哪里可以配置'LogManager'?进入'Startup.cs'?因为如果我将其设置为'Startup.cs''配置'方法,我有一个错误'对象引用未设置为对象的实例。''loggerFactory.AddNLog();'后面的 –

+0

,请参阅https:// github。 com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-(project.json) – Julian

+0

它的工作机会? – Julian

0

由于他们的状态在他们的GitHub repository

.NET核心问题:

  • ${basedir}没有在.NET的核心工作意愿
  • LogManager.GetCurrentClassLogger()将使用的文件名,而不是 完整的类名(类名和名称空间,如NLog 4)。这 将被固定在NLOG 5的最终(后NETSTANDARD 2.0的版本)

所以,你不能这样做,现在。也许他们会在未来解决这个问题。