1

そこで私は最近、log4 *パッケージがPHPで利用可能であることを発見しました。これを見て、log4php Webサイトから最新のものを熱心にダウンロードし、インストール手順に従いました。指示は、tarパッケージをダウンロードしてuntarし、選択した場所に次のディレクトリを配置することを示しています:log4php / src / main / php

したがって、の内容をlog4php/src/main/phplib/log4phpの下のlibディレクトリにコピーしました。

スクリプトでは、必要に応じて、「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");
?>

したがって、メッセージをプレーンメッセージとしてフォーマットするようにサンプルロガーを構成しているにもかかわらず、ロガー宣言だけでなく、thresholdコマンドでも、ロガーのレベルを最大FATALに設定しているにもかかわらず、コンソールへの出力は私に見えますデフォルトのルートロガーのように:

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

指定されたプレーンフォーマットなしのprintステートメントが表示されます。2つのprintステートメントが表示されます。debugprint(ロガー構成でFATALが設定されているために出力されないはずです。FATALはDEBUGよりもはるかに高いです)。

一体何が間違っているのですか?私はおそらく考えられるセットアップのすべての組み合わせを試しました。誰か提案はありますか?

編集-更新-これはまだ問題です。進捗はありません。

Edit2-本当に?このフォーラムの誰も、この非常に人気のあるロギングパッケージとその化身をPHPモジュールとして使用しようとしたことがありませんか?

log4phpユーザーのメーリングリストを含め、考えられるすべての方法で質問に回答してもらいました。

4

1 に答える 1

3

構成ファイルをさらに何時間も操作した後、私は小さいが非常に重要なファクトイドを発見しました。「ロガー」を指定するには、「ロガー」階層の下に名前を付け、「アペンダー」階層の下にそのアペンダーなどの名前を付ける必要があります。例:

# 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時間以上でそれを見つけることはまったくないよりはましだと思います:)

デバッグ作業がまだまだあることを思い出させてくれた人たちのおかげで、試してみることを思い出させてくれたことに感謝しています。

于 2010-10-20T05:36:14.197 に答える