您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
ThinkPHP(TP)是一个基于PHP的轻量级Web应用开发框架。在TP框架中,日志文件默认存储在/runtime/log/
目录下。随着时间的推移,日志文件可能会变得非常大,影响系统性能。因此,我们需要对日志文件进行切割和归档。
以下是一种实现日志切割和归档的方法:
LogArchive.php
,并将其放在application/command/
目录下。<?php
namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\Output;
class LogArchive extends Command
{
protected function configure()
{
// 设置命令名称
$this->setName('log:archive')->setDescription('Archive and compress log files');
}
protected function execute(Input $input, Output $output)
{
// 获取日志文件目录
$logDir = config('log.path');
$logFiles = glob($logDir . '*.log');
if (empty($logFiles)) {
$output->writeln("No log files found.");
return;
}
// 创建归档目录
$archiveDir = $logDir . 'archive/';
if (!is_dir($archiveDir)) {
mkdir($archiveDir, 0755, true);
}
// 循环处理每个日志文件
foreach ($logFiles as $logFile) {
$filename = basename($logFile);
$output->writeln("Processing log file: {$filename}");
// 获取日期部分
$date = substr($filename, 0, strpos($filename, '.'));
// 创建按月份的子目录
$monthDir = $archiveDir . date('Y-m', strtotime($date)) . '/';
if (!is_dir($monthDir)) {
mkdir($monthDir, 0755, true);
}
// 压缩日志文件
$archiveFile = $monthDir . $filename . '.gz';
$gz = gzopen($archiveFile, 'wb9');
$content = file_get_contents($logFile);
gzwrite($gz, $content);
gzclose($gz);
// 删除原始日志文件
unlink($logFile);
}
$output->writeln("Log archive completed.");
}
}
application/console.php
文件,将新创建的LogArchive
命令添加到commands
数组中。<?php
// application/console.php
return [
// ...
'commands' => [
// ...
'app\command\LogArchive',
],
];
# crontab -e
0 1 * * * cd /path/to/your/project && php think log:archive
这样,你的TP框架的日志文件将在每天凌晨1点进行切割和归档。归档后的日志文件将存储在/runtime/log/archive/
目录下,按月份进行分类。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。