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>

我希望日志始终存储在同一个目录中,但是如果我调用上述配置,则会在不同的位置创建日志文件

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 数组的配置。这允许您使用动态代码来创建配置。

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

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

Sodirname('/').'.././libs/log4php/Logger.php'等价于"/.././libs/log4php/Logger.php",即等价于"/libs/log4php/Logger.php"。如果您的文件不小心在那里,您可能会将您的代码误解为“工作”。

于 2015-04-17T00:04:02.257 回答