• Showing Page History #80361
  • Showing Page History #80349
  • Showing Page History #80366
  • Showing Page History #80341

ログ出力時の処理の流れ(概念的なもの)

 ここでは、log4cpp::Categoryクラスのlogメソッド(あるいは優先度ごとに用意されたメソッド、すなわち、debuginfonoticewarnerrorcritalertemergfatal)を呼んだときにどのような流れで実際にログ出力が行われるかを説明します。

 図1はログ出力時の処理の流れをUML2.0のシーケンス図で表記したものです。
細かい部分は省いています。実際には、Category::log()が呼ばれると、

Category::log()
Category::_logUnconditionally()を呼び出し
 →Category::_logUnconditionally2()を呼び出し
  →LoggingEventを生成
  →Category::callAppenders()を呼び出し
   →Category::_appenderSetMutexをロック(図1のcritical複合フラグメントの部分)
   →Categoryが持つ全appenderに対してdoAppend()を呼び出し
   →additivityがtrue(かつ、親カテゴリがある(今のカテゴリがルートカテゴリではない))の場合、親のCategoryに対しcallAppenders()を呼び出し

という感じなのですが、図1ではさすがにここまで記述していません。