/**
  * Format message
  */
 public function formatMessage(Charcoal_LogMessage $msg)
 {
     //        Charcoal_ParamTrait::validateIsA( 1, 'Charcoal_LogMessage', $msg );
     $level = $msg->getLevel();
     $tag = $msg->getTag();
     $message = $msg->getMessage();
     $file = $msg->getFile();
     $line = $msg->getLine();
     $time = date("y/m/d H:i:s");
     // Convert encoding
     $message = $this->convertEncoding(s($message));
     // Get now time
     $now_time = time();
     // set log format string as initial value
     $out = $this->log_format;
     // logging context specific values
     $now_time = time();
     $log_values = array('%Y4%' => date("Y", $now_time), '%Y2%' => date("y", $now_time), '%M2%' => date("m", $now_time), '%M1%' => date("n", $now_time), '%D2%' => date("d", $now_time), '%D1%' => date("j", $now_time), '%H2%' => date("H", $now_time), '%H1%' => date("G", $now_time), '%h2%' => date("h", $now_time), '%h1%' => date("g", $now_time), '%M%' => date("i", $now_time), '%S%' => date("s", $now_time), '%LEVEL%' => $level, '%TAG%' => $tag, '%MESSAGE%' => $message, '%FILE%' => $file, '%FILENAME%' => $file, '%LINE%' => $line);
     // replace keyword
     foreach ($log_values as $key => $value) {
         $out = str_replace($key, $value, us($out));
     }
     // replace environment values
     $out = $this->getSandbox()->getEnvironment()->fill($out);
     return $out;
 }
 public function writeln(Charcoal_LogMessage $msg)
 {
     $timestamp = date("Y-m-d H:i:s");
     $level = $msg->getLevel();
     $tag = $msg->getTag();
     $message = $msg->getMessage();
     $file = $msg->getFile();
     $line = $msg->getLine();
     $level_class_def = array("T" => "level_t", "I" => "level_i", "D" => "level_d", "W" => "level_w", "E" => "level_e", "F" => "level_f");
     $td_class = isset($level_class_def[us($level)]) ? $level_class_def[us($level)] : NULL;
     $html = '<tr>' . PHP_EOL;
     $html .= '    <td class="' . $td_class . '"><div class="value center">' . $timestamp . '</div></td>' . PHP_EOL;
     $html .= '    <td class="' . $td_class . '"><div class="value center">' . $level . '</div></td>' . PHP_EOL;
     $html .= '    <td class="' . $td_class . '"><div class="value center">' . $tag . '</div></td>' . PHP_EOL;
     $html .= '    <td class="' . $td_class . '"><div class="value">' . $message . '</div></td>' . PHP_EOL;
     $html .= '    <td class="' . $td_class . '"><div class="value">' . $file . '(' . $line . ')</div></td>' . PHP_EOL;
     $html .= '</tr>' . PHP_EOL;
     echo $html;
 }
 /**
  * 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);
         }
     }
 }