redwarrior’s diary

C#, ASP.NET, WEB, G*などの雑多な情報

NLogを使用して、ログの出力先を切り替える(TFSのリリース管理を使用する版)

Visual Studioからの発行について、以前に以下の記事を書きました。

redwarrior.hateblo.jp

ひとつ前の記事でリリース管理について書きました。

redwarrior.hateblo.jp

リリース管理を使用して、ログの出力先を切り替えたいと思ったので、やり方を調べました。

ポイントは以下の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変数を追加します。

f:id:redwarrior:20191227194826p:plain

f:id:redwarrior:20191227194456p:plain

これで、TFSでリリースする時にログの出力先を変更することが出来ました。

ちなみに、これに書き換えた後にVisual Studioからの発行する場合は、同様にappSettingsを置き換えるようにWeb.***.configの修正が必要になります。

以上

動作環境: