テスターですが何か?

ホビープログラマ略してHPです

Searsarを利用した開発環境のセットアップ(log4net編)

leave a comment »

前回に続いてSearsar(S2Container)開発環境のセットアップ。結論から言うとうまくいきませんでした...

とりあえずやったことを以下に記載しておきます。

———————————-

1.AssemblyInfo.vbに以下の記述を追加

My ProjectAcssemblyInfo.vb内に以下の記述を追加、場所はどこでもいいと思う。

   1: 'log4net用
   2: <Assembly: log4net.Config.XmlConfigurator(ConfigFile:=".configlog4net.config", Watch:=True)> 

2.log4net.configの追加

AssemblyInfo.vbに指定したディレクトリ(プロジェクトファイルを基点にした相対ディレクトリ)にlog4net.configを追加

右クリック → [追加] → [新しい項目] → [XMLファイル]

ファイルの内容は以下のとおり

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <configuration>
   3:   <configSections>
   4:     <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
   5:     <section name="seasar" type="Seasar.Framework.Xml.S2SectionHandler, Seasar" />
   6:   </configSections>
   7:   <appSettings>
   8:     <!-- log4net内部のデバッグメッセージを出力する場合、trueに設定 -->
   9:     <!-- <add key="log4net.Internal.Debug" value="true"/> -->
  10:   </appSettings>
  11:   <log4net> 
  12:  
  13:     <!-- ログファイル出力用(日付またはファイルのサイズ制約に基づいた多数のログを生成) -->
  14:     <appender name="DailyAppender" type="log4net.Appender.RollingFileAppender">
  15:       <!-- ファイル名 -->
  16:       <param name="File" value=".logWebApp_Log" />
  17:       <param name="AppendToFile" value="true" />
  18:       <param name="RollingStyle" value="Date" />
  19:       <param name="StaticLogFileName" value="false" />
  20:       <!-- 日付単位にファイルを作成 -->
  21:       <param name="DatePattern" value='"_"yyyyMMdd".log"' />
  22:       <!-- 7日分保存(数を超えた場合は古いものから削除) -->
  23:       <param name="MaxSizeRollBackups" value="7" />
  24:       <layout type="log4net.Layout.PatternLayout">
  25:         <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
  26:       </layout>
  27:     </appender> 
  28:  
  29:     <root>
  30:       <!-- 出力レベル -->
  31:       <level value="DEBUG" />
  32:       <appender-ref ref="DailyAppender" />
  33:     </root> 
  34:  
  35:   </log4net>
  36: </configuration>
  37:  

3.ログ出力プログラムの作成

Default.aspx.vbをlogを出力するように編集。

   1: Partial Public Class _Default
   2:     Inherits System.Web.UI.Page 
   3:  
   4:     'log4netオブジェクト
   5:     Public Shared log As log4net.ILog = log4net.LogManager.GetLogger( _
   6:                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType) 
   7:  
   8:     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
   9:  
  10:         log.Info("Logテスト") 
  11:  
  12:     End Sub 
  13:  
  14: End Class
  15:  

とりあえずこんな感じでログは出ました。

———————————-

2009-04-10 00:04:23,501 [4] INFO  WebAppSample._Default – Logテスト

 

ただ、S2Containerのセットアップドキュメントの以下の部分が気になり始めて...そもそもlog4net自体のセットアップはできたことは確認できたけど、S2Containerのログが出ていないので不安に。そもそも何がどうなればいいのかドキュメントに書いてないし。

今回はWebアプリケーション(ASP.NET)を想定しているけど、ドキュメントは全部Windowsアプリケーションを想定してるし。

——————————————-

 しかしlog4netの設定を行ったアプリケーション構成ファイルを含むアセンブリ内で最初にlog4netでログを出力させずに、Seasarアセンブリで最初にログが出力されると log4netはSeasarアセンブリ内のlog4netの設定を探すため、ログが出力されません。

 log4netの設定を行ったアプリケーション構成ファイルを持つアセンブリ内で最初にログを出力するか、プログラム起動時に以下のようにアプリケーション構成ファイルを読み込む処理を追加して下さい。

——————————————-

ということで、Global.aspx.vbのアプリケーションスタートイベントを以下のように編集

   1: Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
   2:  
   3:     ' アプリケーションの起動時に呼び出されます。
   4:  
   5:     Dim info As New System.IO.FileInfo("D:DevelopsampleWebAppSampleWebAppSamplebinconfiglog4net.config")
   6:     log4net.Config.XmlConfigurator.Configure(log4net.LogManager.GetRepository(), info)
   7:  
   8:     'S2Container.NET用
   9:     SingletonS2ContainerFactory.Init()
  10:  
  11: End Sub

それでも、ログファイルに出力される内容は変わりませんでした。

とりあえずこのままサンプルプログラムを書いてみたいと思います。

Written by david9142

2009年4月10日 @ 4:56 PM

カテゴリー: VisualBasic

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。