您好,登錄后才能下訂單哦!
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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。