本文目录导读:

在ThinkPHP框架中,日志通道配置是非常重要的一部分,我来详细介绍一下如何配置和使用。
基础配置
配置文件位置
config/log.php 是日志的主配置文件,通常包含以下内容:
<?php
return [
// 默认日志记录通道
'default' => env('log.channel', 'file'),
// 日志记录级别
'level' => ['error', 'warning', 'notice', 'info', 'debug', 'sql'],
// 日志类型分类
'type_channel' => [
// 可以将不同的日志类型分配到不同的通道
// 'info' => 'email',
// 'error' => 'email',
],
// 关闭全局日志写入
'close' => false,
// 日志通道列表
'channels' => [
'file' => [
// 日志记录方式
'type' => 'File',
// 日志保存目录
'path' => '',
// 单文件日志写入
'single' => false,
// 独立日志级别
'apart_level' => [],
// 最大日志文件数量
'max_files' => 0,
// 使用JSON格式记录
'json' => false,
// 日志处理
'processor' => null,
// 关闭通道日志写入
'close' => false,
// 日志输出格式化
'format' => '[%s][%s] %s',
// 是否实时写入
'realtime_write' => false,
],
'error' => [
'type' => 'File',
'path' => './logs/error/',
'apart_level' => ['error'],
],
'sql' => [
'type' => 'File',
'path' => './logs/sql/',
'apart_level' => ['sql'],
],
'daily' => [
'type' => 'File',
'path' => './logs/daily/',
'single' => false,
'max_files' => 30, // 保留30天的日志
],
// 邮件日志通道
'email' => [
'type' => 'email',
'host' => 'smtp.example.com',
'port' => 465,
'user' => 'your-email@example.com',
'pass' => 'your-password',
'to' => ['admin@example.com'],
'level' => ['error', 'critical'],
],
],
];
多环境配置
开发环境配置
在 .env 文件中:
# 开发环境使用文件日志 log.channel=file log.level=debug log.path=./runtime/logs/dev/
生产环境配置
# 生产环境使用每日日志 log.channel=daily log.level=error log.path=./runtime/logs/prod/
日志通道类型
文件日志
'file' => [
'type' => 'File',
'path' => './runtime/logs/',
'single' => false, // 是否单文件
'apart_level' => ['error', 'sql'], // 独立级别的日志
'max_files' => 30, // 最多保留文件数
'json' => false, // JSON格式
'format' => '[%s][%s] %s', // 格式化
'realtime_write' => false, // 实时写入
],
Socket日志(远程日志)
'socket' => [
'type' => 'Socket',
'host' => '192.168.1.100',
'port' => 9501,
'debug' => false,
],
自定义通道
'custom' => [
'type' => 'Custom',
'class' => \app\common\log\MyLogger::class,
'config' => [
// 自定义配置参数
'api_url' => 'http://your-log-server/api',
'api_key' => 'your-api-key',
],
],
日志记录器配置
自定义日志处理器
// config/log.php
'channels' => [
'file' => [
'type' => 'File',
'processor' => function($log) {
// 对日志进行额外处理
$log['extra'] = [
'ip' => request()->ip(),
'user_id' => session('user_id'),
];
return $log;
},
],
],
使用示例
基础日志记录
use think\facade\Log;
// 记录不同级别的日志
Log::info('这是一条信息');
Log::error('这是一条错误');
Log::warning('这是一条警告');
Log::debug('调试信息', ['param' => 'value']);
// 使用数组记录
Log::write([
'module' => 'user',
'action' => 'login',
'message' => '用户登录成功',
]);
// 指定级别写入
Log::record('这是一条SQL日志', 'sql');
动态切换通道
use think\facade\Log;
// 仅为当前请求切换日志通道
Log::channel('daily')->info('今日日志');
// 写入特定通道
Log::channel('error')->error('错误日志');
Log::channel('sql')->info('SQL日志', ['sql' => $sql]);
高级配置示例
完整的日志配置示例
<?php
return [
'default' => env('log.channel', 'file'),
'level' => ['error', 'warning', 'notice', 'info'],
'channels' => [
// 默认文件日志
'file' => [
'type' => 'File',
'path' => app()->getRootPath() . 'runtime' . DIRECTORY_SEPARATOR . 'logs',
'single' => false,
'apart_level' => ['error'],
'max_files' => 0,
'json' => false,
'format' => '[%s][%s] %s',
'realtime_write' => false,
],
// 每日日志(按天存储)
'daily' => [
'type' => 'File',
'path' => './runtime/logs/daily/',
'single' => false,
'max_files' => 90, // 保留90天
'format' => '[%s][%s] %s',
],
// 错误日志(专门记录错误)
'error' => [
'type' => 'File',
'path' => './runtime/logs/error/',
'apart_level' => ['error', 'critical', 'alert', 'emergency'],
],
// SQL日志
'sql' => [
'type' => 'File',
'path' => './runtime/logs/sql/',
'apart_level' => ['sql'],
],
// 邮件日志
'email' => [
'type' => 'email',
'host' => env('MAIL_HOST', 'smtp.example.com'),
'port' => env('MAIL_PORT', 465),
'user' => env('MAIL_USER'),
'pass' => env('MAIL_PASSWORD'),
'to' => [env('ADMIN_EMAIL')],
'level' => ['error', 'critical'],
],
],
// 根据错误级别切换通道
'type_channel' => [
'error' => 'email',
'critical' => 'email',
'sql' => 'sql',
],
];
最佳实践建议
- 开发环境:使用
debug级别,记录所有日志 - 测试环境:使用
info级别,记录关键操作 - 生产环境:只记录
error和warning,避免过多IO操作 - 日志轮转:设置合理的
max_files或使用daily通道 - 敏感信息过滤:在生产环境不要记录敏感数据(如密码、Token等)
注意事项
- 日志目录需要有写入权限
- 生产环境合理控制日志级别
- 定期清理过期日志
- 对于高并发场景,考虑使用异步日志或外部日志服务
通过合理配置日志通道,可以更好的监控和管理你的ThinkPHP应用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播