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
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);
}
}
}
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 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>
<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 プリプロセッサ シンボルを定義します。
→重要、プリプロセッサの設定方法が記載されている。
[プロジェクト]→[(プロジェクト名)プロパティ]→条件付きコンパイル シンボル
で定義する。
コメント
コメントを投稿