2015-04-14 161 views
1

我正在用xml配置log4php。在這裏我的配置: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> 

我希望日誌總是存儲在同一目錄中,但如果我叫

上述配置將產生在不同的地方日誌文件
Logger::getLogger('MyLogger'); 

在不同的位置。我如何獲得XML內的父目錄?我正在考慮類似的東西:

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

這當然是行不通的。 通常在PHP來避免這個問題我使用:

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

感謝您的幫助

回答

1

可以(並且可能應該)使用一個基於PHP陣列配置Log4PHP。這使您可以使用動態代碼來創建配置。

順便說一句:有一個神奇的常量__DIR__,它包含當前PHP文件所在的目錄。同時__FILE__包含當前PHP文件的文件名。 dirname('/')技巧不應該工作 - 它會輸出字符串"/" - 將它與以「..」開頭的路徑組合會導致嘗試超出根目錄(即根目錄)一級。

訪問路徑"."也沒用,因爲該點是「當前目錄」的同義詞。在路徑中間的一個點將不會出現,它將保持在原來的位置。

所以dirname('/').'.././libs/log4php/Logger.php'相當於"/.././libs/log4php/Logger.php",相當於"/libs/log4php/Logger.php"。如果偶然發現你的文件在那裏,你可能會誤解你的代碼爲「正常工作」。