NLogを使用して、ログの出力先を切り替える(TFSのリリース管理を使用する版)
Visual Studioからの発行について、以前に以下の記事を書きました。
ひとつ前の記事でリリース管理について書きました。
リリース管理を使用して、ログの出力先を切り替えたいと思ったので、やり方を調べました。
ポイントは以下の2つ
- NLog.Extended を使用して、appSettingsに設定した値を出力先に使用する
- TFSのリリース管理で、appSettingsの値を置き換える
NLog.Extended を使用して、appSettingsに設定した値を出力先に使用する
NLog.Extendedは、v4.0.0.1を使用しました。
Web.configを以下のように編集します。
<appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> <add key="LogDir" value="c:/inetpub/logs/AppLogs"/> <!-- この行を追加 --> </appSettings> ~中略~ <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true"> <targets> <!-- 変更前 <target xsi:type="File" name="f" fileName="c:/inetpub/logs/AppLogs/app.log" layout="${longdate} [${uppercase:${level:padding=-5}}][${logger:shortName=True}] ${message} ${exception:format=tostring}" archiveEvery="Day" archiveFileName="c:/inetpub/logs/AppLogs/app_{#}.log" archiveNumbering="Date" archiveDateFormat="yyyyMMdd" maxArchiveFiles="30" keepFileOpen="true"> </target> --> <!-- 変更後 --> <target xsi:type="File" name="f" fileName="${appsetting:name=LogDir}/app.log" layout="${longdate} [${uppercase:${level:padding=-5}}][${logger:shortName=True}] ${message} ${exception:format=tostring}" archiveEvery="Day" archiveFileName="${appsetting:name=LogDir}/app_{#}.log" archiveNumbering="Date" archiveDateFormat="yyyyMMdd" maxArchiveFiles="30" keepFileOpen="true"> </target> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="f" /> </rules> </nlog>
targetタグのfileName、archiveFileNameを、appSettingsに設定したLogDirを使って書き換えています。
TFSのリリース管理で、appSettingsの値を置き換える
リリース管理のタスクで、XML変数置換にチェックをつけて、変数タブでLogDir変数を追加します。


これで、TFSでリリースする時にログの出力先を変更することが出来ました。
ちなみに、これに書き換えた後にVisual Studioからの発行する場合は、同様にappSettingsを置き換えるようにWeb.***.configの修正が必要になります。
以上
動作環境:
- TFS 2018 Update 3
- 開発環境:Visual Studio 2017
- ASP.NET MVC 5
- NLog 4.4.12
- NLog.Extended 4.0.0.1