Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

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

lon4netでは、3つの主要なコンポーネント

  • ロガー
  • アペンダ
  • レイアウト

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

アペンダ・ロガーについては、以下が参考になる。

レイアウト(Layout)

アペンダが出力するログのフォーマットを定義する。

アペンダ(Appender)

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

ロガー(Logger)

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

アペンダ種類

アペンダには以下のような種類がある。

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

ファイル

  • .FileAppender?
    テキストファイル
  • .RollingFileAppender?
    ローリング・テキストファイル

コンソール

  • .ConsoleAppender?
  • .ColoredConsoleAppender?
  • .AnsiColorTerminalAppender?

イベントログ

  • .EventLogAppender?

DBMS

  • .AdoNetAppender?
  • .AdoNetAppenderParameter?

ネットワーク

  • .UdpAppender?
  • .NetSendAppender?
  • .TelnetAppender?
  • .SmtpAppender?
  • .SmtpPickupDirAppender?
  • .RemotingAppender?

TraceListener?

  • .DebugAppender?
    System.Diagnostics.Debug system
  • .TraceAppender?
    System.Diagnostics.Trace system
  • .AspNetTraceAppender?
    ASP.NET TraceContext?

Syslog(LinuxおよびUNIX)

  • .LocalSyslogAppender?
  • .RemoteSyslogAppender?

その他

  • .TextWriterAppender?
    .TextWriter?クラス
  • .OutputDebugStringAppender?
    OutputDebugString? Win32API
  • .MemoryAppender?
  • .AppenderCollection?
  • .ForwardingAppender?
  • .BufferingForwardingAppender?

ログ ヘッダ

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

(例)

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

ログ レベル

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

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

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

ログの種類

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

アクセス トレース ログ

デバッグや、パフォーマンス・アクセス分析で重宝する。

  • アプリケーションへのアクセス状況と処理状況(処理内容、処理時間)をフレームワークに埋め込んだトレースからログ ファイルに出力する。
  • アクセス トレース ログの実装は、”Open棟梁”の各レイヤの「ベースクラス2」(画面コード親クラス2、業務コード親クラス2)上に共通処理として実装できる。
  • 例外発生時のExceptionの情報もコチラに出力する。
    • 正常時のログ出力情報は、性能の観点から、最小限とする。
    • 異常時のログ出力情報は、エラー・障害原因の究明のため
      詳細に出力する(エラー メッセージ、スタックトレースなど)。

フォーマット

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

  • ヘッダ
  • log4netヘッダ
    • タイムスタンプ
    • ログ レベル
    • スレッドID
  • カスタム ヘッダ
    • (認証)ユーザ名
    • IPアドレス(端末の識別が可能な情報)
  • メッセージ
    • レイヤ、開始・終了
      • [Init] or [Postback] : P層の画面のイベント処理
      • "----->" : P層 のコントロール イベント処理の開始
      • "<-----" : P層 のコントロール イベント処理の終了
      • "----->>" : B層 業務処理の開始
      • "<<-----" : B層 業務処理の終了
  • 画面名
  • コントロール名
  • メソッド名
  • 処理区分
    • 実行時間(ミリ秒)
    • CPU時間(ミリ秒)
  • 例外情報
    • ErrorMessageID
    • ErrorMessage?
    • StackTrace?
    • ToString?した方がイイかも。

SQLトレース ログ

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

フォーマット

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

  • ヘッダ
  • log4netヘッダ
    • タイムスタンプ
    • ログ レベル
    • スレッドID
  • カスタム ヘッダ
    • (認証)ユーザ名
    • 実行時間(ミリ秒)
    • CPU時間(ミリ秒)
  • メッセージ
    • CommandText?(実行時のSQL文)
    • CommandParameter?(実行時のパラメタ一覧)
  • 例外情報
    • StackTrace?
    • ToString?した方がイイかも。

オペレーション トレース ログ

業務のイベントをログ出力する。

設定

設定例

ローリング

既定(日付でローリング、バックアップ数管理無し)

<!-- ローリング・ログファイル出力用アペンダ -->
<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>

バックアップ数が固定となるローリング

指定のサイズを超えている場合にローリングを行う。
ファイル サイズは必ず、この設定値未満になるわけではない。

<!-- ローリングの設定-->
<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?パラメタ値により制御する。

日付とサイズを合わせたローリング

<!-- ローリングの設定 -->
<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)では、ログファイル数を一定数に保つ役割を果たさない。

参考

設定の詳細は、”Open棟梁”の利用ガイド(纏め者編)の1.3節:「log4net」を参照のこと。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-28 (金) 10:54:18 (575d)