Log4php 是 Apache 的日志记录工具 Log4j 的 PHP 移植版本,用于在 PHP 应用中实现灵活的日志记录,以下是详细的配置指南和示例:

基础配置步骤
(1) 下载 Log4php
从官方下载最新版本:
https://logging.apache.org/log4php/download.html
解压后将 src/main/php 中的文件放入项目目录(如 libs/log4php)。
(2) 创建配置文件(XML 示例)
<!-- log4php.xml -->
<configuration xmlns="http://logging.apache.org/log4php">
<!-- 文件日志 -->
<appender name="fileAppender" class="LoggerAppenderFile">
<param name="file" value="/var/log/myapp/app.log" />
<param name="append" value="true" />
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="%d{Y-m-d H:i:s} [%p] %c: %m%n" />
</layout>
</appender>
<!-- 控制台日志 -->
<appender name="consoleAppender" class="LoggerAppenderConsole">
<layout class="LoggerLayoutSimple" />
</appender>
<!-- 根日志记录器 -->
<root>
<level value="DEBUG" />
<appender_ref ref="fileAppender" />
<appender_ref ref="consoleAppender" />
</root>
<!-- 自定义记录器(更高级别) -->
<logger name="security">
<level value="WARN" />
<appender_ref ref="fileAppender" />
</logger>
</configuration>
(3) PHP 代码初始化
<?php
require_once 'libs/log4php/Logger.php';
// 加载配置
Logger::configure('path/to/log4php.xml');
// 获取日志记录器
$logger = Logger::getLogger('main');
$secLogger = Logger::getLogger('security');
// 记录日志
$logger->info("Application started");
$secLogger->warn("Unauthorized access attempt");
关键配置详解
Appenders(输出目标)
| 类型 | Class | 说明 |
|---|---|---|
| 文件 | LoggerAppenderFile |
写入到文件 |
| 滚动文件 | LoggerAppenderRollingFile |
按大小滚动文件 |
| 每日文件 | LoggerAppenderDailyFile |
按天生成日志文件 |
| 控制台 | LoggerAppenderConsole |
输出到控制台 |
| 数据库 | LoggerAppenderPDO |
写入数据库表 |
| 邮件 | LoggerAppenderMail |
发送错误邮件 |
Layouts(日志格式)
-
LoggerLayoutPattern(推荐):<layout class="LoggerLayoutPattern"> <param name="conversionPattern" value="%d{Y-m-d} [%p] %c{1}: %m%n" /> </layout>常用占位符:

%d:日期时间(%d{Y-m-d H:i:s})%p:日志级别(DEBUG/INFO/WARN/ERROR)%c:日志记录器名称%m:日志消息%n:换行符%F:文件名,%L:行号
-
LoggerLayoutSimple:简单格式(只输出消息)
日志级别
优先级从高到低:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
高级配置示例
(1) 按日期滚动的日志文件
<appender name="dailyAppender" class="LoggerAppenderDailyFile">
<param name="file" value="/var/log/myapp/app_%s.log" />
<param name="datePattern" value="Ymd" />
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="%d{H:i:s} [%p] %m%n" />
</layout>
</appender>
生成文件名示例:app_20231015.log

(2) 数据库日志
<appender name="dbAppender" class="LoggerAppenderPDO">
<param name="dsn" value="mysql:host=localhost;dbname=logs" />
<param name="user" value="root" />
<param name="password" value="pass" />
<param name="table" value="app_logs" />
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="%d{Y-m-d H:i:s},%p,%m" />
</layout>
</appender>
(3) 错误邮件通知
<appender name="mailAppender" class="LoggerAppenderMail">
<param name="subject" value="Application Error" />
<param name="to" value="admin@example.com" />
<param name="from" value="noreply@example.com" />
<threshold value="ERROR" />
<layout class="LoggerLayoutSimple" />
</appender>
常见问题解决
- 日志文件权限问题:确保 PHP 进程有写入权限。
- 配置未生效:检查配置文件路径是否正确,或改用绝对路径。
- 日志级别不生效:确保没有冲突的
<logger>定义,根记录器会覆盖未显式定义的记录器。 - 性能优化:生产环境中避免使用
DEBUG级别,滚动日志文件避免过大。
纯 PHP 配置方式(替代 XML)
Logger::configure([
'appenders' => [
'default' => [
'class' => 'LoggerAppenderFile',
'params' => [
'file' => '/var/log/app.log',
'append' => true
],
'layout' => [
'class' => 'LoggerLayoutPattern',
'params' => ['conversionPattern' => '%d [%p] %m%n']
]
]
],
'rootLogger' => [
'level' => 'INFO',
'appenders' => ['default']
]
]);
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/287752.html

