我用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>
我希望日志始终存储在同一目录中,但如果我调用
,上面的配置会在不同的地方创建logFileLogger::getLogger('MyLogger');
在不同的位置。如何获取XML中的父目录?我在考虑类似的事情:
<param name="file" value=dirname('/').".././logs/main_log-%s.log" />
那当然不起作用。 通常在PHP中避免这个问题我使用:
include_once dirname('/').'.././libs/log4php/Logger.php' ;
感谢您的帮助
答案 0 :(得分:1)
您可以(也可能应该)为Log4PHP使用基于PHP数组的配置。这允许您使用动态代码来创建配置。
顺便说一下:有一个魔术常量__DIR__
,它包含当前PHP文件所在的目录。同时__FILE__
包含当前PHP文件的文件名。那个dirname('/')
技巧不起作用 - 它将输出字符串"/"
- 将它与以“..”开头的路径组合将导致尝试超出根目录一级 - 这是根目录。
访问路径"."
也没用,因为点是“当前目录”的同义词。路径中间的一个点将无处可去,它将保持原样。
因此dirname('/').'.././libs/log4php/Logger.php'
相当于"/.././libs/log4php/Logger.php"
,相当于"/libs/log4php/Logger.php"
。如果您的文件偶然出现,您可能会将您的代码误解为“正常工作”。