Nlog.configをDebug / Rlease構成で使い分ける

ビルド時のソリューション構成で利用するNlog.configを使い分けたい。
最終的に作った構成をメモしておく。
(環境)
  • IDE: Visual Studio Community 2019
  • Framework: .NetFramework4.5
本当は、${buildConfiguration}を使いたいがNlogに不具合があり、まだ治っていない。
よって、プリプロセッサを使ってコードに埋め込む。

プロジェクト構成は以下の通り。



























  • NLog.Debug.config
  • NLog.Release.config
を使う。
※NLog.configは存在しているが使わない。

Global.asax.csにNlog.configの読み込みコードを埋め込む。

Global.asax.cs
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace WebMVC
{
    public class MvcApplication : HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

#if RELEASE
            string logFilename = "NLog.Release.config";
#elif LOCAL_ENV
            string logFilename = "NLog.Localenv.config";
#elif DEBUG
            string logFilename = "NLog.Debug.config";
#else
            string logFilename = "NLog.Release.config";   
#endif
            // Nlog Configのフルパス生成
            string appRootDir = System.AppDomain.CurrentDomain.BaseDirectory;
            string fullPath = appRootDir + logFilename;

            // Nlog Configの読み込み
            NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(fullPath);
        }
    }
}


Nlog.Debug.config
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

    <targets>
        <target xsi:type="File" name="logfileDebug" fileName="./logs/${shortdate}-debug.log"
            encoding="UTF-8"
            archiveFileName="${basedir}/logs/archives/archive.{#}-debug.log"
            archiveEvery="Day"
            archiveNumbering="Rolling"
            maxArchiveFiles="30"
            layout="${longdate},${uppercase:${level}},${callsite},${callsite-linenumber},${message}" />
       
        <target xsi:type="Debugger" name="debugger" layout="${longdate} ${uppercase:${level}}|${callsite}|${callsite-linenumber}|${message}|${stacktrace}" />
    </targets>

    <rules>
        <logger name="*" minlevel="Debug" writeTo="logfileDebug" >
            <filters>
                <when condition="equals('${buildConfiguration}','Debug')" action="Ignore" />
            </filters>
        </logger>
        <logger name="*" minlevel="Trace" writeTo="debugger" />
    </rules>
</nlog>


Nlog.Release.config
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

    <targets>
        <target xsi:type="File" name="logfileRelease" fileName="./logs/${shortdate}-release.log"
            encoding="UTF-8"
            archiveFileName="${basedir}/logs/archives/archive.{#}-release.log"
            archiveEvery="Day"
            archiveNumbering="Rolling"
            maxArchiveFiles="365"
            layout="${longdate},${uppercase:${level}},${callsite},${callsite-linenumber},${message}" />
        <target xsi:type="Debugger" name="debugger" layout="${longdate} ${uppercase:${level}}|${callsite}|${callsite-linenumber}|${message}|${stacktrace}" />
    </targets>

    <rules>
        <logger name="*" minlevel="Info" writeTo="logfileRelease" >
            <filters>
                <when condition="equals('${buildConfiguration}','Release')" action="Ignore" />
            </filters>
        </logger>
        <logger name="*" minlevel="Trace" writeTo="debugger" />
    </rules>
</nlog>


あとは、前回から修正なしでできる。


(参考)

${buildConfiguration}を使いたいがNlogに不具合がある。

→これはNG

→ログ解析ツール、Elasticsearch、elmah.io

→プロジェクトルートパスを見つけた

→-define プリプロセッサ シンボルを定義します。

→重要、プリプロセッサの設定方法が記載されている。

 [プロジェクト][(プロジェクト名)プロパティ]→条件付きコンパイル シンボル

 で定義する。





コメント

このブログの人気の投稿

ソリューション構成ごとにconfigファイルを作成する

C++の古いプロジェクトのビルドでerror MIDL2311 : statements outside library block are illegal in mktyplib compatability mode

web.config debug/releaseの内容を変換構文を使って切り替える