internalLogFile是否可以在 nlog.config 檔案中的屬性中ProjectName添加 自定義變數,例如internalLogFile="c:\logs\${gdc:ProjectName}\internal-nlog.txt"?
我試過這個:
<nlog internalLogFile="c:\logs\${gdc:ProjectName}\internal-nlog.txt">
...
</nlog>
和
private static void ConfigureLogging(IServiceCollection services)
{
GlobalDiagnosticsContext.Set("ProjectName", "some-project-name");
LogManager.LoadConfiguration("nlog.config");
services.AddLogging(loggingBuilder =>
{
loggingBuilder.AddConfiguration(Config.GetSection("Logging"));
loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Debug);
loggingBuilder.AddNLog();
});
}
但是LoadConfiguration會拋出一個錯誤(在 VS 中作為第一次機會例外捕獲,所以它實際上被默默地忽略了):
System.IO.IOException: The directory name is invalid. : 'c:\logs\${gdc:ServiceRunnerFolder}'
我逐步瀏覽了 NLog 代碼,它似乎只ExpandFilePathVariables在設定檔案名之前呼叫擴展一些已知的環境變數。
有沒有辦法為此檔案名使用自定義變數,而無需創建環境變數?
uj5u.com熱心網友回復:
沒關系,我找到了檔案,從 NLog 5 開始似乎不可能:
當您使用組態檔配置 NLog 時,您可以通過在元素上設定以下屬性來啟用內部日志記錄:
internalLogFile="file.txt"- 添加 internalLogFile 導致 NLog 將其內部除錯訊息寫入指定檔案。這包括在記錄期間可能引發的任何例外。
- 注意:僅支持少數布局,因為內部日志需要盡可能穩定。
- NLog 4.6 :還支持環境變數:例如
%appdata%或%HOME%- NLog 4.6 :支持渲染器(無選項):
${currentdir},,,${basedir}${tempdir}- NLog 4.7.1 :支持渲染器(無選項):
${processdir}- NLog 5.0 :支持渲染器(無選項) :
${commonApplicationDataDir},,,${userApplicationDataDir}${userLocalApplicationDataDir}
uj5u.com熱心網友回復:
而不是使用 ${gdc}GlobalDiagnosticsContext.Set("ProjectName", "some-project-name");然后直接更新 InternalLogger :
var projectName = "some-project-name";
NLog.Common.InternalLogger.LogFile = $"c:\logs\{some-project-name}\internal-nlog.txt";
另請參閱:https ://github.com/NLog/NLog/wiki/Internal-Logging#example-with-internal-logging-from-code
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/490312.html
