在我的.NET Core应用程序中,我使用了一些环境,我想为每个环境执行不同的路径来记录文件.
例如,
Development - c:\logs
Staging - d\apps\logs
Run Code Online (Sandbox Code Playgroud)
对于每个环境,我都有配置部分appsettings.{env}.json:
"LocalPaths": {
"LogFileRootDirectory": "c:\\logs\\"
}
Run Code Online (Sandbox Code Playgroud)
部分原因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>
Run Code Online (Sandbox Code Playgroud)
实现它的最佳方法是什么?
您可以使用(NLog)变量.
例如
<targets>
<target name="file" xsi:type="File"
fileName="${var:mydir}/logfile.txt" ... >
Run Code Online (Sandbox Code Playgroud)
并在C#
LogManager.Configuration.Variables["mydir"] = "c:\logs";
Run Code Online (Sandbox Code Playgroud)
更改变量时,路径会自动更改 - 无需重新加载.
另请参阅$ {var}的文档
更新:您可以更改LogManager.Configuration后:
env.ConfigureNLog("nlog.config");
Run Code Online (Sandbox Code Playgroud)
例如你的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";
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3648 次 |
| 最近记录: |