2

私はxmlでlog4phpを設定しています。ここで私の設定:

<appender name="mainAppender" class="LoggerAppenderDailyFile">
    <layout class="LoggerLayoutPattern">
        <param name="conversionPattern" value="%d{Y-m-d H:i:s.u T P} [%logger] [%level],[%method,%location] %message;%ex%newline" />
    </layout>

    <param name="file" value=".././logs/main_log-%s.log" />
    <param name="datePattern" value="Y-m-d" />

</appender>

<logger name="MainLogger">
    <appender_ref ref="mainAppender" />
</logger>

<root>
    <level value="TRACE" />
    <appender_ref ref="mainAppender" />
</root>

ログを常に同じディレクトリに保存したいのですが、上記の設定では logFile を別の場所に作成してしまいます。

Logger::getLogger('MyLogger');

別の場所にあります。XML 内の親ディレクトリを取得するにはどうすればよいですか? 私は次のようなことを考えていました:

<param name="file" value=dirname('/').".././logs/main_log-%s.log" />

もちろん、それは機能していません。通常、私が使用しているこの問題を回避するためにphpで:

include_once dirname('/').'.././libs/log4php/Logger.php' ;

ご協力いただきありがとうございます

4

1 に答える 1

1

Log4PHP には、PHP 配列ベースの構成を使用できます (おそらく使用する必要があります)。これにより、動的コードを使用して構成を作成できます。

ちなみに、現在の PHP ファイルがあるディレクトリを含む魔法の定数が__DIR__あります。同時に、__FILE__現在の PHP ファイルのファイル名も含まれています。そのdirname('/')トリックは機能しないはずです-文字列を出力します"/"-それを「..」で始まるパスと組み合わせると、ルートディレクトリを1レベル超えて移動しようとする結果になります-ルートディレクトリです。

"."ドットは「現在のディレクトリ」と同義であるため、パスにアクセスすることも役に立ちません。パスの真ん中にあるドットはどこにも行きません。そのままの場所にとどまります。

Sodirname('/').'.././libs/log4php/Logger.php'は と同等で"/.././libs/log4php/Logger.php"、これは と同等"/libs/log4php/Logger.php"です。偶然ファイルがそこにあった場合、コードを「動作中」と誤解する可能性があります。

于 2015-04-17T00:04:02.257 に答える