【问题标题】:log4php : Cannot create log filelog4php:无法创建日志文件
【发布时间】:2012-11-21 03:25:57
【问题描述】:

我使用 log4php 来写文件日志。这是配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns="http://logging.apache.org/log4php/">
    <appender name="default" class="LoggerAppenderDailyFile">
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date %logger %-5level %msg%n" />
        </layout>
        <param name="file" value="/path/to/log/register-%s.log" />
        <param name="datePattern" value="Y-m-d" />
        <param name="append" value="true" />
    </appender>
    <root>
        <level value="info" />
        <appender_ref ref="default" />
    </root>
</configuration>

这是 PHP 中的初始化代码:

require_once('/path/to/log4php/Logger.php');
require_once('/path/to/log4php.xml');
$logger = Logger::getLogger(basename(__FILE__));
$logger->info('Testing');

文件夹权限设置为 777(它是 Ubuntu Linux 服务器),但未创建日志文件。如何调试 log4php?

【问题讨论】:

  • 您是否尝试使用Logger::configure('/path/to/log4php.xml'); 而不是require?
  • 刚试过。没运气。日志仍然没有创建。
  • 那太奇怪了,我刚刚下载了 log4php,并在调用 $logger = Logger::getLogger(basename(__FILE__)); 之前用你的代码替换了 Logger::configure('/path/to/log4php.xml'); insead 的 require,我成功地写入了日志。 error_logs 是怎么说的?
  • 宾果游戏。 Apache 错误日志显示权限问题。现在修复了。谢谢!请把它放到Answer。
  • 我在我的 PHP Laravel 应用程序中使用 Apache log4PHP,以下是我如何初始化记录器:Logger::configure(base_path().'/config.xml'); 和 config.xml:&lt;param name="file" value="app/storage/logs/log.ERROR.log" /&gt; 我的应用程序部署在 Amazon EC2 上,我同意存储目录的权限如下:sudo chmod -R 777 app/storage 但是仍然没有创建日志文件。我怎样才能检查出问题所在?

标签: php log4php


【解决方案1】:

使用配置调用的正确方法是:

require_once('/path/to/log4php/Logger.php');
Logger::configure('/path/to/log4php.xml');
$logger = Logger::getLogger(basename(__FILE__));
$logger->info('Testing');

正如 Shivan Raptor 所说,首先要做的是检查日志是否存在权限问题。

【讨论】:

  • 这不适用于命令行脚本。也没有错误。我看到没有创建日志文件。
【解决方案2】:

试试这个

一开始看起来很复杂,其实不然。

ma​​in.php

require_once('/path/to/log4php/Logger.php');
Logger::configure('log4php.xml');

Class Log
{
    private $log;

    public function __construct()
    {
        $this->log = Logger::getLogger(__CLASS__);
    }
    public function myLog()
    {
        //this prints your data.
        $this->log->info("Hello, this is log here");
    }
}

//simply call the function
$log=new Log();
$log->myLog();

log4php.xml

<?xml version="1.0" encoding="UTF-8"?>
<log4php:configuration xmlns:log4php="http://logging.apache.org/log4php/">
    <appender name="fileappender" class="LoggerAppenderFile">
        <layout class="LoggerLayoutSimple" />
        <param name="file" value="/path/to/log/register-%s.log" />
        <!-- <param name="append" value="true" /> -->
    </appender>
    <logger name="Log">
        <appender_ref ref="fileappender" />
    </logger>
</log4php:configuration>

注意:别忘了给文件夹 777 权限:)

【讨论】:

  • 感谢您的回答,但发现的错误很少。永远不要永远不要使用 777 权限(您不想制造安全漏洞,对吧?)。同样关于面向对象的方法,永远不要将类放在主逻辑文件中。使用单独的文件来存储您的课程。结论:重新考虑你的逻辑。
  • @Raptor 这只是一个例子。不过谢谢你的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 2011-11-28
相关资源
最近更新 更多