/**
  * flush a message
  *
  * @param Charcoal_LogMessage $msg    message object to flush
  */
 public function flushMessage($msg)
 {
     //        Charcoal_ParamTrait::validateIsA( 1, 'Charcoal_LogMessage', $msg );
     if (!$this->log_enabled) {
         return;
     }
     // 対象ロガーに対してのみ出力
     $output_loggers = array_flip($this->log_loggers);
     $level = $msg->getLevel();
     $logger_names = $msg->getLoggerNames();
     // プロファイルに設定したレベル以下ならば出力しない
     $cmp = self::_compareLogLevel($level, $this->log_level);
     if ($cmp > 0) {
         return;
     }
     // タグフィルタが設定されている場合、マッチしないログは無視
     $log_tag_filters = $this->log_tag_filters;
     if (is_array($log_tag_filters) && !empty($log_tag_filters)) {
         if (!in_array($msg->getTag(), $log_tag_filters)) {
             return;
         }
     }
     foreach (uv($logger_names) as $key) {
         // 登録されていて、かつプロファイルにエントリがあるログだけに出力する
         if (isset($this->loggers[$key]) && isset($output_loggers[$key])) {
             /** @var Charcoal_ILogger $logger */
             $logger = $this->loggers[$key];
             $logger->writeln($msg);
         }
     }
 }