log4php配置日志目录

时间:2015-04-14 15:22:57

标签: php log4php

我用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' ;

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您可以(也可能应该)为Log4PHP使用基于PHP数组的配置。这允许您使用动态代码来创建配置。

顺便说一下:有一个魔术常量__DIR__,它包含当前PHP文件所在的目录。同时__FILE__包含当前PHP文件的文件名。那个dirname('/')技巧不起作用 - 它将输出字符串"/" - 将它与以“..”开头的路径组合将导致尝试超出根目录一级 - 这是根目录。

访问路径"."也没用,因为点是“当前目录”的同义词。路径中间的一个点将无处可去,它将保持原样。

因此dirname('/').'.././libs/log4php/Logger.php'相当于"/.././libs/log4php/Logger.php",相当于"/libs/log4php/Logger.php"。如果您的文件偶然出现,您可能会将您的代码误解为“正常工作”。