[追記] 「log4net出力設定のON」の部分、ジェネレーターのプロパティ設定を追記しました。(2013.2.26)
1.Log4net
.net環境におけるログ出力といえばLog4netがスタンダードですが、GeneXusも標準でlog4net.dllをバンドルしています。(ビルドするとターゲットディレクトリ下のbinディレクトリに出力されます) 今回はこれをそのまま使用します。2.外部オブジェクト
log4net.dllをGeneXusから利用するために外部オブジェクトを作成します。必要なオブジェクトは以下の通りです。・LogManager(Loggerを取得するオブジェクト)
・Logger(ログ出力用オブジェクト)
こちらからlog4net.xpzをダウンロードし、ナレッジベースにインポートして下さい。
3.使い方
&Logger = &LogManager.GetLogger("Genexus.Programs.SubsystemA")LogManager、Logger双方の外部オブジェクトを変数として宣言します。
&Logger.Debug("Debug message")
&Logger.Error("Error message")
&Logger.Fatal("Fatal message")
&Logger.Info("Info message")
&Logger.Warn("Warn message")
GetLoggerメソッドのパラメータがログを出力する単位の指定になります。「GeneXus.Programs」はGeneXusが自動生成するweb.configの名前空間名になるので固定とし、それ以降にアプリ内固有の名前を指定してください。(サブシステムやチーム、担当者など)
4.設定
4-1.web.config
log4net出力設定のONジェネレーターのプロパティ「log level」の値により、web.configファイルの「log4net」タグのアトリビュート「threshold(スレッシュホールド:しいき値)」が設定されます。
但し、この設定により、GeneXusフレームワークに仕込んであるログ出力もONになります。ディフォルトの出力先(Client.log)にはこのフレームワーク側のログ出力とアプリ側のログ出力が混在する事になります。アプリケーション側のみのログファイルを出力したい場合は、下記4-2、4-3の設定をします。
<log4net threshold="OFF"> → <log4net threshold="ALL">web.configを直接変更する事は可能ですが、ビルドのたびに上書きされるので要注意。自分で追記した設定(以下4-2、4-3)はGeneXusが変更を加えることはありません。
4-2.appender( ログ出力先の設定 )
<appender name="SubsystemA_RollingFile" type="log4net.Appender.RollingFileAppender">複数種類定義する事により、出力先を複数設定する事が可能です。この例ではログファイルとして出力する設定です。詳しくはLog4netの情報を参照ください。
<file value="subsystem_A.log" />
<appendToFile value="true" />
<maximumFileSize value="9000KB" />
<maxSizeRollBackups value="4" />
<rollingStyle value="Size" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{HH:mm:ss,fff} [%t] %-5p %c{1} - %m%n" />
</layout>
</appender>
4-3.出力レベルの設定
<logger name="GeneXus.Programs.SubsystemA">
<level value="INFO" />
<appender-ref ref="SubsystemA_RollingFile" />
</logger>
<logger name="GeneXus.Programs.SubsystemB">
<level value="DEBUG" />
<appender-ref ref="SubsystemB_RollingFile" />
</logger>
<root>
<level value="FATAL" />
<appender-ref ref="RollingFile" />
</root>
GetLoggerのパラメータで指定された名前空間ごとに出力先(appender)と出力レベル(FATAL/ERROR/WARN/INFO/DEBUG)を指定します。ディフォルトの設定はrootに記述します。
[注意]当ブログの投稿はあくまでも情報提供であり、動作の保証をするものではありません。また当情報を元にした実装により何らかの問題が発生した場合でも当方は一切の保証は致しません。
いつも参考にさせていただいております。
返信削除log4j環境でのログ出力方法についても記載していただけると助かります。
log4j-1.2.15.jarをGeneXusから利用するための外部オブジェクトの.xpzファイルがあれば助かります。