質問
そこで、私は最近、log4*パッケージがPHPで利用可能であることを発見し、これがlog4phpウェブサイトから最新の最新をダウンロードし、インストール手順に従ったことを発見しました。指示は、タールパッケージをダウンロードし、次のディレクトリを選択する場所に配置することであることを示しています:log4php/src/main/php
したがって、私はその内容をコピーしました log4php/src/main/php
lib/log4phpの下で私のlib dirに。
私のスクリプトでは、必要に応じて、「logger.php」クラスを必要とし、付録を管理するためにプロパティファイルを示しました。プロパティファイル、log4php.propertiesは、「/home1/ioforgec/www/devlab/pnotes/config/log4php.properties」のファイルシステムにあります。
これがログファイルのコンテンツです:
#
# Example Logger
#
log4php.appender.EA1 = LoggerAppenderConsole
log4php.appender.EA1.target = STDOUT
log4php.appender.EA1.layout = LoggerLayoutPattern
log4php.appender.EA1.ConversionPattern = "%m"
log4php.appender.EA1.threshold = FATAL
log4php.exampleLogger = FATAL, EA1
したがって、ここに私のスクリプトのコピーがあります(多かれ少なかれLOG4PHP機能を「ラップ」します):
<?php
require_once('/home1/ioforgec/www/devlab/pnotes/lib/log4php/Logger.php');
class LogUtil
{
public $logger;
public $properties_file = "/home1/ioforgec/www/devlab/pnotes/config/log4php.properties";
public static function logExample($msg)
{
Logger::configure($properties_file);
$logger = Logger::getLogger("example");
$logger->debug("Shouldnt see this print because of config max level FATAL");
$logger->fatal($msg);
}
}
?>
これが適切に機能していることをテストするために、次のスクリプトは上記のlogutil.phpを呼び出します。
#!/usr/bin/php
<?php
require_once("lib/utils/LogUtil.php");
LogUtil::logExample("example message");
?>
したがって、ロガーのレベルを致命的な最大に設定したにもかかわらず、ロガーのレベルをロガー宣言だけでなくしきい値コマンドにも設定するにもかかわらず、メッセージをプレーンメッセージとしてフォーマットするように例のロガーを設定するにもかかわらず、コンソールへの印刷は私に見えるように見えるデフォルトのルートロガーのように:
Mon Oct 18 20:30:05 2010,705 [827] DEBUG example - Shouldnt see this print because of config max level FATAL
Mon Oct 18 20:30:05 2010,711 [827] FATAL example - example message
指定されたプレーンフォーマットのない印刷ステートメントが表示されます。2つの印刷ステートメント、デバッグプリント(ロガー構成の致命的な設定のために印刷されていないはずです - 致命的はデバッグよりもはるかに高くなっています)
私は一体何をしているのですか?私は私が考えることができるセットアップのすべての組み合わせを試しました。誰かが何か提案はありますか?
編集 - 更新 - これはまだ問題です。進歩はありません。
edit2-本当に?このフォーラムの誰も、この非常に人気のあるロギングパッケージとその化身をPHPモジュールとして使用しようとしたことはありませんか?
log4phpユーザーのメーリングリストを含む、私の質問に答えてみるために、考えられるすべての手段を試しました。
解決
さらに多くの時間の構成ファイルを操作した後、私は小さく、しかし非常に重要なファクトイドを発見しました。 「ロガー」を指定するには、「ロガー」階層とその付録の下で「Appender」階層などの下で名前を付けなければなりません。たとえば
# for the 'console' logger named 'example' we first define the appender:
log4php.appender.consoleAppender = LoggerAppenderConsole
log4php.appender.consoleAppender.target = STDOUT
log4php.appender.consoleAppender.layout = LoggerLayoutSimple
# we then assign the appender and the minimum log level to the logger:
log4php.logger.example = WARN, consoleAppender
私の間違いは、ルートロガーの階層名「log4php.rootlogger」を見ることであり、ロガーを割り当てるには、「log4php.lognameLogger」の値のみに名前を付ける必要があると仮定することでした。悲しいことに、これは文書に埋もれた例があったので言い訳ではありません。 9時間以上でそれを見つけるのはまったく良いと思います:)
もっとデバッグ作業があったことを思い出させてくれた人に感謝します。