前言
在项目运行过程中,服务器和后端会产生大量的日志,占用磁盘空间。那么我们如何找到这些常用的占用大量日志的地方和自动清理他们的方法呢?
方案
- 宝塔定时任务(计划任务),这里是一个大蛀虫,假如任务多且调用频率高(秒级或者分钟级),日志量很大。
- 位置
find /www/server/cron/ -name “.log"; // 查找
find /www/server/cron/ -name ".log” -exec rm -rf {} ; // 删除
- 定时删除
即:直接在宝塔计划任务中创建一个shell脚本,把这个命令添加进去
周期的话:建议一个礼拜或者一个月
- 服务器日志
- 位置
/var/log
- 常用的目录介绍
/var/log/messages 绝大多数的系统日志都记录到该文件
/var/log/secure 所有跟安全和认证授权等日志都会记录到此文件
/var/log/maillog 邮件服务的日志
/var/log/cron crond计划任务的日志
/var/log/boot.log 系统启动的相关日志
- 清理方法
使用journalctl
自动维护空间
1)只保留近一周的日志
journalctl --vacuum-time=1w
2)只保留500MB的日志
journalctl --vacuum-size=500M
3)直接删除 /var/log/journal/ 目录下的日志文件
rm -rf /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1
注:执行 journalctl 命令时报错:Error was encountered while opening journal files: Input/output error
Error was encountered while opening journal files: Input/output error
问题分析:日志文件损坏
解决方法:删除之前的日志,并重启 journalctl 服务
mv journal/f9d400c5e1e8c3a8209e990d887d4ac1 journal/f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122
systemctl restart systemd-journald.service
- thinkphp日志
- 位置
/runtime/log; // 项目根目录下的
- 修改日志配置文件:
/config/log.php
// +----------------------------------------------------------------------
// | 日志设置
// +----------------------------------------------------------------------
return [
// 默认日志记录通道
'default' => env('log.channel', 'file'),
// 日志记录级别
'level' => [],
// 日志类型记录的通道 ['error'=>'email',...]
'type_channel' => [],
// 关闭全局日志写入
'close' => false,
// 全局日志处理 支持闭包
'processor' => null,
// 日志通道列表
'channels' => [
'file' => [
// 日志记录方式
'type' => 'File',
// 日志保存目录
'path' => '',
// 单文件日志写入
'single' => false,
// 独立日志级别
'apart_level' => [],
// 最大日志文件数量
'max_files' => 200,
'file_size' => 1024 * 1024 * 2,
// 使用JSON格式记录
'json' => false,
// 日志处理
'processor' => null,
// 关闭通道日志写入
'close' => false,
// 日志输出格式化
'format' => '[%s][%s] %s',
// 是否实时写入
'realtime_write' => false,
],
// 其它日志通道配置
],
];
- 配置文件说明
1.max_files:最大日志文件数量设置为200,超过了200,之前的日志会被系统自动删除,防止日志太多
2.file_size:设置单个日志文件大小,这里设置为2M