2017-03-22 186 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的版本)

所以,你不能這樣做,現在。也許他們會在未來解決這個問題。