1 在log4j和logback中都可以配置
- 按照日期每天滚动一个日志,不需要设置日志的大小,弊端就是可能日志文件特别大,造成加载日志文件较为困难
- 按照日期每天滚动一个日志,同时设置每个文件大小的上限(比如:2g),这样就会避免加载较大的日志文件
- 按照日期每天滚动一个日志,设置每个日志文件大小的上限,在设置一天中按照日志大小最多滚动多少个日志文件,比如:按照设置日志文件最大2g,每天最大保存20个日志文件,那么一天中的日志存储量最大为:2g * 20个 = 40g,弊端就是当一天中的日志总量大于40g,则多余的日志就会被清除掉
- 按照日期每天滚动一个日志,设置每个日志文件大小的上限,然后设置最多保存30天的日志量,也可以自动清除日志,在logback中可以实现,但我使用的是log4j没有实现成功
2 日志文件和shell脚本配合使用
- 在日志配置(log4j或者logback)文件中设置按照日期每天滚动一个日志,设置每个日志文件大小的上线;在对应服务器上的定时任务执行shell脚本,脚本逻辑为当日志文件达到服务器磁盘的70%(可设置)或者日志文件个数达到150(可设置)个时,清除最早的日志文件
shell脚本
file_path="/xxx/xxx"
file_size=$(du -m ${file_path} | awk '{print $1}')
default_size=$[35 * 1024]
over_size=$[${file_size}/${default_size}]
flag_size=$[$[over_size] == 1 || $[over_size] > 1]
file_count=$(ls -l ${file_path} | grep "F*" | wc -l)
default_count=150
over_count=$[${file_count}/${default_count}]
flag_count=$[${over_count} >= 1 ]
if [ ${flag_size} == 1 ]; then
file_name=$(ls -rt ${file_path}| head -1)
echo ${file_name}
if [ -n "$file_name" ]; then
echo ${file_path}${file_name}
rm -rf ${file_path}${file_name}
echo "清除的日志为:"${file_name}
else
echo "不存在文件"
fi
elif [ ${flag_count} == 1 ]; then
if [ ${file_count} != ${default_count} ]; then
del_num=$[${file_count} - ${default_count}]
file_names=$(ls -rt ${file_path} | head -${del_num})
echo "清除的日志为:"${file_names}
cd ${file_path}
rm -rf $(ls -rt ${file_path} | head -${del_num})
fi
else
echo "日志大小为: "$[${file_size}/1024]"M"
fi