「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>アプリケーション設計のポイント]]

*目次 [#h94eb5ed]
#contents

*概要 [#e0d82e07]
ログ出力方式について纏める。

*lon4net [#qca89bc7]
Open棟梁では内部でlon4netを使用しているので、~
-ログ出力方式について纏める。
-Open棟梁では内部でlon4netを使用しているので、~
ココの記述は ≒ lon4netの仕様を説明となっている。

lon4netでは、3つの主要なコンポーネント
-ロガー
-アペンダ
-レイアウト

の設定を定義ファイルに定義できる。

アペンダ・ロガーについては、以下が参考になる。
-1. Log4J の基本 | TECHSCORE(テックスコア)~
http://www.techscore.com/tech/Java/ApacheJakarta/Log4J/1/#log1-3
-log4j - Wikipedia~
https://ja.wikipedia.org/wiki/Log4j

**レイアウト(Layout) [#cfbd1341]
アペンダが出力するログのフォーマットを定義する。

**アペンダ(Appender) [#t3dd1f58]
-具体的な出力処理を行う。
-出力先毎にアペンダの種類が存在する。
-アペンダの種類毎に設定可能な項目が異なる。
-出力先、ローリング設定等を定義する。

**ロガー(Logger) [#gd110238]
-論理的なログファイル名
-アペンダをロガーで束ねると複数の出力先へ出力できる。
-ログレベル毎にFilterすることができる。
-ルートロガーとロガーがあり階層構造をとる。

**設定 [#r5ab32c2]
設定の詳細は、”Open棟梁”の[[利用ガイド(纏め者編)>https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/ja-JP/2_User_Guide(Leaders).doc]]の1.3節:「log4net」を参照のこと。

*出力先 [#g907f29b]
アペンダの種類毎に出力先が異なる。

**アペンダ種類 [#v2ffec90]
*アペンダ種類 [#v2ffec90]
アペンダには以下のような種類がある。

-名前空間は、log4net.Appender
-ベースクラスは、.AppenderSkeleton

-参考:Apache log4net – Apache log4net: Config Examples~
https://logging.apache.org/log4net/release/config-examples.html

***ファイル [#g9c6971b]
**ファイル [#g9c6971b]
-.FileAppender~
テキストファイル
-.RollingFileAppender~
ローリング・テキストファイル

***コンソール [#s820b4d0]
**コンソール [#s820b4d0]
-.ConsoleAppender
-.ColoredConsoleAppender
-.AnsiColorTerminalAppender

***イベントログ [#i7123a08]
**イベントログ [#i7123a08]
-.EventLogAppender

***DB [#r4d9bf6f]
**DBMS [#r4d9bf6f]
-.AdoNetAppender
-.AdoNetAppenderParameter

***ネットワーク [#u6f73c8e]
**ネットワーク [#u6f73c8e]
-.UdpAppender
-.NetSendAppender
-.TelnetAppender
-.SmtpAppender
-.SmtpPickupDirAppender
-.RemotingAppender

***TraceListener [#me36b346]
**TraceListener [#me36b346]
-.DebugAppender~
System.Diagnostics.Debug system
-.TraceAppender~
System.Diagnostics.Trace system
-.AspNetTraceAppender~
ASP.NET TraceContext

***Syslog(LinuxおよびUNIX) [#g7f451b2]
**Syslog(LinuxおよびUNIX) [#g7f451b2]
-.LocalSyslogAppender
-.RemoteSyslogAppender

***その他 [#u103adde]
**その他 [#u103adde]
-.TextWriterAppender~
.TextWriterクラス

-.OutputDebugStringAppender~
OutputDebugString Win32API

-.MemoryAppender

-.AppenderCollection
-.ForwardingAppender
-.BufferingForwardingAppender

*ログ ヘッダ [#ee167b05]
定義ファイルでレイアウト(Layout)を定義することにより、~
アペンダ(Appender)毎、ログ ヘッダを設定できる。

(例)
 ↓時間               ↓レベル ↓スレッドID ↓メッセージ
 [2007/10/25 15:22:21,750], [DEBUG], [9], 任意のメッセージ

*ログ レベル [#v8ba26dd]
定義ファイルでロガー(Logger)を定義することにより、~
出力するログ レベルのフィルタを設定できる。~

ログ レベルには次の5つのレベルがあり、~
ロガー(Logger)のログ出力APIを使い分ける。

|レベル|説明|h
|Fatal|システム停止するような致命的な障害|
|Error|システム停止はしないが、問題となる障害|
|Warn|障害ではない注意警告|
|Info|操作ログなどの情報|
|Debug|開発用のデバッグメッセージ|

*ログの種類 [#w5c95d04]
ログの種類毎に主要コンポーネント(ロガー、アペンダ、レイアウト)を準備

**アクセス トレース ログ [#kbba3fe0]
デバッグや、パフォーマンス・アクセス分析で重宝する。

-アプリケーションへのアクセス状況と処理状況(処理内容、処理時間)をフレームワークに埋め込んだトレースからログ ファイルに出力する。
-アクセス トレース ログの実装は、”Open棟梁”の各レイヤの「[[ベースクラス2]]」(画面コード親クラス2、業務コード親クラス2)上に共通処理として実装できる。

-例外発生時のExceptionの情報もコチラに出力する。
--正常時のログ出力情報は、性能の観点から、最小限とする。
--異常時のログ出力情報は、エラー・障害原因の究明のため~
詳細に出力する(エラー メッセージ、スタックトレースなど)。


***フォーマット [#c0e1a06c]
下記は、アクセス トレース ログ出力のテンプレート・フォーマット。

-ヘッダ

--log4netヘッダ
---タイムスタンプ
---ログ レベル
---スレッドID

--カスタム ヘッダ
---(認証)ユーザ名
---IPアドレス(端末の識別が可能な情報)

-メッセージ
--レイヤ、開始・終了
---[Init] or [Postback] : P層の画面のイベント処理
---"----->" : P層 のコントロール イベント処理の開始
---"<-----" : P層 のコントロール イベント処理の終了
---"----->>" : B層 業務処理の開始
---"<<-----" : B層 業務処理の終了

--画面名
--コントロール名

--メソッド名
--処理区分
---実行時間(ミリ秒)
---CPU時間(ミリ秒)

--例外情報
---ErrorMessageID
---ErrorMessage
---StackTrace
---ToStringした方がイイかも。

**SQLトレース ログ [#x304c13e]
SQLに絞ってになるが、アクセス トレース ログと同様に、~
デバッグや、パフォーマンス・アクセス分析で重宝する。

***フォーマット [#a20fef56]
下記は、SQLトレース ログ出力のテンプレート・フォーマット。

-ヘッダ

--log4netヘッダ
---タイムスタンプ
---ログ レベル
---スレッドID

--カスタム ヘッダ
---(認証)ユーザ名
---実行時間(ミリ秒)
---CPU時間(ミリ秒)

-メッセージ
--CommandText(実行時のSQL文)
--CommandParameter(実行時のパラメタ一覧)

--例外情報
---StackTrace
---ToStringした方がイイかも。

**オペレーション トレース ログ [#f8c56ed4]
業務のイベントをログ出力する。

*設定 [#r5ab32c2]
**設定例 [#daf683be]
-既定値、詳細は下記を参照。~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/files/resource/Log/SampleLogConf.xml

**ローリング [#h161590b]
***既定(日付でローリング、バックアップ数管理無し) [#u7d88a2f]
 <!-- ローリング・ログファイル出力用アペンダ -->
 <appender name="ACCESS" type="log4net.Appender.RollingFileAppender">
     <param name="File" value="C:\root\files\resource\Log\ACCESS" />
     <!-- ローリングの設定 -->
     <param name="StaticLogFileName" value="false" />
     <param name="RollingStyle" value="date " />
     <param name="DatePattern" value='"."yyyy-MM-dd".log"' />
     <!-- 書き込み時の設定(追加 or 上書き、出力エンコーディング) -->
     <param name="AppendToFile" value="true" />
     <encoding value="utf-8" />
     <!-- メッセージのフォーマット -->
     <layout type="log4net.Layout.PatternLayout">
         <param name="ConversionPattern" value="[%date{yyyy/MM/dd HH:mm:ss,fff}],[%-5level],[%thread],%message%newline" />
     </layout>
     <!-- フィルタ(範囲)の設定 -->
     <filter type="log4net.Filter.LevelRangeFilter">
         <levelMin value="DEBUG" />
         <levelMax value="FATAL" />
     </filter>
 </appender>

***バックアップ数が固定となるローリング [#i6724530]
指定のサイズを超えている場合にローリングを行う。~
ファイル サイズは必ず、この設定値未満になるわけではない。

 <!-- ローリングの設定-->
 <param name="StaticLogFileName" value="true" />
 <param name="RollingStyle" value="size" />
 <param name="MaximumFileSize" value="10MB" />
 <param name="MaxSizeRollBackups" value="2" />
 <param name="CountDirection" value="-1" />

サイズ10MB(MaximumFileSize)毎にローリングし、~
下記のように、2つ(MaxSizeRollBackups)のバックアップを保持する 。~

-(ログファイル名)   → 現在出力中のログ
-(ログファイル名).1  → 過去のログバックアップ(古い)
-(ログファイル名).2  → 過去のログバックアップ(最も古い)

付与される番号の順番は、CountDirectionパラメタ値により制御する。

***日付とサイズを合わせたローリング [#g4560df4]

 <!-- ローリングの設定 -->
 <param name="StaticLogFileName" value="false" />
 <param name="RollingStyle" value="composite" />
 <param name="DatePattern" value='"."yyyy"-"MM"-"dd".log"' />
 <param name="MaximumFileSize" value="10MB" />
 <param name="MaxSizeRollBackups" value="10" />
 <param name="CountDirection" value="-1" />

-MaxSizeRollBackupsパラメタ値は、サイズによるローリングにのみ適用される。~
-日付とサイズを合わせたローリング(composite)では、ログファイル数を一定数に保つ役割を果たさない。

**参考 [#d751b38d]
設定の詳細は、”Open棟梁”の[[利用ガイド(纏め者編)>https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/ja-JP/2_User_Guide(Leaders).doc]]の1.3節:「log4net」を参照のこと。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS