misc.log

日常茶飯事とお仕事と

WCFサービスでlog4netを使う(設定ファイルをweb.configに書く)

WCFサービスで、ロギングにlog4netを使いたいのだけれど、設定ファイルの読み込みをどうしようか迷ってます。

これまでずっとやってきたのは、下記のようなコードで設定ファイルのパスとファイル名を指定するという方法でした。

static protected ILog logger = LogManager.GetLogger("CPLogger");

public TestClass()
{
    log4net.Config.XmlConfigurator
        .Configure(new System.IO.FileInfo(
        AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
}

ですが、これをweb.configなど、共通的に用いられる設定ファイルに埋設できないかと。

答えは公式サイトの設定資料に記載がありました。

Apache log4net™ Manual - Configuration
http://logging.apache.org/log4net/release/manual/configuration.html

中盤あたりの「.config Files」のところに、App.configやweb.configといったシステム設定ファイルに設定情報を追記する方法について記載されています。簡単にまとめると…

  1. configSectionsタグのところに、log4netセクションを型「log4net.Config.Log4NetConfigurationSectionHandler」として宣言する。
  2. configurationタグの中に、「log4net」タグで囲まれた設定情報を追記する(記載内容は、単独設定ファイルで書いているモノのそのままコピーでOK)。


ということのようです。1つめの宣言は、こんな感じで。web.configの冒頭にある「configSection」の頭に、log4netの記述を追記しています。

<configSections>
    <section name="log4net" type=" log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            </sectionGroup>
        </sectionGroup>
    </sectionGroup>
</configSections>

これと。そのあとにlog4net設定を追記すればOK。新しい設定ファイルを追加する必要も、設定ファイルを直接指定する必要も無く、設定処理はプログラム冒頭で下記のように引数無しのConfigureメソッドを呼べばOKです。

static protected ILog logger = LogManager.GetLogger("CPLogger");

public TestClass()
{
    log4net.Config.XmlConfigurator.Configure();
}

これからはじめるWCFプログラミング

これからはじめるWCFプログラミング