- PR -

ASP.NET で log4net のカスタムクラスを使いたいのですが…

1
投稿者投稿内容
mayumi0314
会議室デビュー日: 2008/03/14
投稿数: 5
投稿日時: 2009-01-27 12:55
ASP.NET2.0 で log4net を使おうとしています。

・WindowsXP SP2
・VisualStudio2008 SE SP1 (使用言語:VB)
・log4net 1.2.10.0

ログローテーションが独自の間隔になるので、log4net.Appender.FileAppender を
継承したカスタムクラスを作成しました。

ソースとコンフィグファイルは以下の通りで、
いずれも同プロジェクト配下に置いています。
※コンフィグはweb.config内ではなく単独ファイルにしています。

--------CustomRollingFileAppender.vb

Imports System
Imports System.Collections
Imports System.Globalization
Imports System.IO

Imports log4net.Util
Imports log4net.Core

Namespace myAppender

Public Class CustomRollingFileAppender
Inherits log4net.Appender.FileAppender



End Class

End Namespace

--------log4net.config

<?xml version="1.0" encoding="Shift_JIS"?>
<!-- [log4net.config] -->
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>

<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>

<log4net>
<appender name="CustomAppender" type="myAppender.CustomRollingFileAppender">

</appender>
<logger name="CustomLogger">
<level value="ALL"/>
<appender-ref ref="CustomAppender" />
</logger>
</log4net>
</configuration>

------------

Global.asax.vb#Application_Start でロードすると、

-----
log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [CustomAppender] of type [myAppender.CustomRollingFileAppender]. Reported error follows.
System.TypeLoadException: Could not load type [myAppender.CustomRollingFileAppender]. Tried assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821] and all loaded assemblies
場所 log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase)
場所 log4net.Util.SystemInfo.GetTypeFromString(String typeName, Boolean throwOnError, Boolean ignoreCase)
場所 log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
log4net:ERROR XmlHierarchyConfigurator: Appender named [CustomAppender] not found.
-----

とのエラーになってしまいます。

VisualStudio2008 EE SP1 で作成したものは上記で問題なく動作し、
ログも出力されていることを確認しています。

ネットで調べて、アセンブリが違うためとのことなので
log4net.config 内を

<appender name="CustomAppender" type="myAppender.CustomRollingFileAppender, myAppender">

と記述を変えてみたのですが、結果かわらずでした。

「アセンブリ」をあまり理解できてなく、根本的に間違ってるのかもしれませんが、
どうすれば認識してくれるようになるのでしょうか。

log4.net のプロジェクト一式もダウンロードしましたが、
できればこちらのリビルドはしたくなく、自作プロジェクトで解決したいです。

すみませんが、ご教授願えませんでしょうか。
mayumi0314
会議室デビュー日: 2008/03/14
投稿数: 5
投稿日時: 2009-01-27 13:13
補足…でもないのですが。。。

上記のエラーは、

log4net.Config.XmlConfigurator.Configure(New System.IO.FileInfo(絶対パス))

で発生するのですが、
Try〜Catch では例外をキャッチできませんでしたので、
イミディエイトウィンドウで実行してみて出たものです。
mayumi0314
会議室デビュー日: 2008/03/14
投稿数: 5
投稿日時: 2009-01-27 20:53
解決しました!!

> ネットで調べて、アセンブリが違うためとのことなので
> log4net.config 内を
>
> <appender name="CustomAppender" type="myAppender.CustomRollingFileAppender, myAppender">
>
> と記述を変えてみたのですが、結果かわらずでした。

この部分ですが、type属性には
・1つ目の要素 … アセンブリ名からのアペンダクラス名
・2つ目の要素 … アセンブリ名
を記述することで動きました。

例)
 アセンブリ名:MyAssembly
 namespace名:myAppender
である場合、

 <appender name="CustomAppender" type="MyAssembly.myAppender.CustomRollingFileAppender, MyAssembly">

の記述になります。

※カスタムクラスには、namespaceは必須のようです。
※クラスライブラリで作成した場合も同様の設定でいけました。
1

スキルアップ/キャリアアップ(JOB@IT)