文档章节

如何解决日志文件过大问题

ifree613
 ifree613
发布于 2016/05/25 11:46
字数 1405
阅读 790
收藏 11

 

我们在运行tomcat的时候,有一个日志文件不会被拆分,会一直累积,直到预警或磁盘占用完毕,导致了文件无法打开、影响性能、无法归档等问题,故我们这里通过介绍logrotate工具来解决自动日志拆分问题

1.验证机器是否有logrotate工具,如果没有则需要安装,如centos系统安装方式(由于该工具很早就存在Linux中,目前在很多发行版本都存在,故一般不需要安装,但简化版操作系统可能有做阉割,所以需要确认)

#yum install -y logrotate

2.编写执行脚本

#vim /etc/logrotate.d/tomcat 

#输入如下内容,其中/home/admin/tomcat/logs/catalina.out代表具体需要分割的日志文件(如果是多个文件,可以空格分开,文件名中有空格,要用””,如”/home/admin/access.log” /home/dubbo.log)

/home/admin/tomcat/logs/catalina.out {

daily

rotate 30

dateext

dateformat .%Y-%m-%d

notifempty

copytruncate

}

示例section表明按文件大小触发日志自动切分,大小单位除了上面所示的k外,还可以是M或G

#vim /etc/logrotate.d/nginx 

/usr/local/nginx/logs/access.log {

copytruncate

rotate 10

start 0

size 2048k

notifempty

missingok

olddir /usr/local/nginx/logs

}

这里介绍一下里面含有的关键参数

create 644 admin admin指定权限

daily #表示每天进行一次拆分,相应的参数还有weekly、monthly

rotate 30 #表示保留最近30个文件,多余的会自动进行删除,可根据自己的情况定制(一定要配置,坑,如果没有配置,默认是0,也就是虽然滚动生成了日志文件,但是很快就删除了,记住一定要配置

dateformat #日志文件拆分后缀格式

notifempty #如果被拆分的文件是空的,那么久不做拆分处理

copytruncate #把正在输出的日志拷一份出来,再清空原来的日志(另一个参数为create,该参数表示把日志文件重命名了,创建了一个新文件,但是怎么防止数据不丢失的,是由于原来日志识别方式是通过inode标记的,所以依然还是往原日志写数据,那么如何重定向到新建的日志文件,此时某些程序提供重新打开日志文件的接口,故可以重定向到新文件,而完成日志文件切换,但是该功能需要你写日志的程序支持,否则不能达到目的)

size=1G      # 若日志文件达到1G,则触发切分(不会自动触发,只是在>1G 时,执行拆分的时候才能成功拆分)

    olddir /home/work/history # 指定历史日志存放目录

    notifempty   # 若/home/work/running.log是空文件,则不做切分

    missingok    # 若/home/work/running.log不存在,不报错

extension .log #后缀扩展

rotate COUNT

    轮转COUNT次,也就是最多保留COUNT个轮转备份。

    超出的被删除或邮寄。

    设置为0,则不保存轮转的老日志。

start COUNT

    轮转文件名基于这个数字。

    例如,指定0时,原日志文件轮转的备份文件以.0为扩展名,如果指定9,就直接从.9开始跳过0-8

    然后再继续向后轮转rotate指定的次数。

配置完成后,可以先验证一下是否有作用,手动拆分命令

#logrotate --force /etc/logrotate.d/tomcat

执行上面的命令后,会执行上面的脚本内容,看看是不是对你的文件进行了拆分,会生成一个当天日期的catalina.out.2016.xx.xx,并会清空catalina.out文件

 

关于执行时间的问题(什么时间进行文件拆分的?)

我们可以自定义文件拆分时间,具体配置文件在 /etc/anacrontab文件内,该文件安装软件后,就会有,故无需自己去新加

# cat /etc/anacrontab 

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45

# the jobs will be started during the following hours only

START_HOURS_RANGE=3-22 #这里就是具体的拆分时间,可以根据各自的情况自由设定

 

#period in days   delay in minutes   job-identifier   command

1       5       cron.daily              nice run-parts /etc/cron.daily

7       25      cron.weekly             nice run-parts /etc/cron.weekly

@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

 

提示:

一定记得把crond设为开机启动(一般系统默认启动的)

检查是否开机启动

#chkconfig --list

相关原理

1.如何处罚日志工具执行的

Linux有自己的定时任务,命令是crontab,而此时我们可以在crontab的每日定时任务中找到logrotate的配置文件

[root@tomcat ~]# ll /etc/cron.daily
total 24
-rwxr-xr-x. 1 root root  196 Jul 18  2013 logrotate

这里可以看到在linux自己的每日定时任务中,已经包含了logrotate日志文件

内容为:

[root@tomcat ~]# cat /etc/cron.daily/logrotate 
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

其中很重要的一句是:/usr/sbin/logrotate /etc/logrotate.conf,表示通过日志工具指定日志配置文件,如果我们修改了配置文件,最好在执行时带上一个 -f,促使他生效

因此触发logrotate日志工具执行其实是依赖于linux的定时任务

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
ifree613

ifree613

粉丝 29
博文 27
码字总数 44789
作品 0
成都
高级程序员
私信 提问
微信分享大图遇到的问题(Android)

起因: 要做一个微信图片分享的功能,但是对于大图会如下问题: 当时没有仔细查看错误日志,单纯的以为是图片太大的问题。 分享图片代码: 1 public void WXsharePic(String transaction, f...

懒星人
2018/09/18
0
0
php记录用户操作日志的解决方案

b/s系统,客户要求系统要记录所有用户的操作(查看、修改、删除、添加等操作)功能 现在没有很好的方案来实现,不知哪位童鞋做过,给点思路 问题: 1.保存到数据库的话,数据量会非常大--肯定...

讷言
2014/11/05
12.3K
11
如何让log4j只输出增删改sql语句,不输出查询sql语句?

现在项目使用log4j管理日志,原先会输出所有sql语句,但是项目新增的模块需要执行大量的查询,导致日志文件过大。现在希望只输出增删改sql语句不输出查询语句。 有没有大神知道如何解决?...

夏天的胖子
2018/08/28
296
3
使用cronolog实现tomcat日志切割

背景: Tomcat的日志catalina.out在使用过程中会不断增长,当日志过大时,可能会对tomcat的性能产生影响。 使用日志切割的方法,可以有效解决日志过大的问题。它可以把日志按天进行切割存储,...

icenycmh
2016/10/14
0
0
关于mysql主从配置的同步日志问题,求指导!

今天配了个MYSQL主从环境,然后进行压力测试。 测试一段时间后发现主服务器的mysql-bin.000xxx同步日志文件非常大,数据库才几个G,这个文件也有几个G,在从数据库中没有开启这个选项。所以没...

xinzaibing
2012/07/31
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

Coding and Paper Letter(六十四)

资源整理。 1 Coding: 1.交互式瓦片编辑器。 tile playground 2.R语言包autokeras,autokeras的R接口。autokeras是一个开源的自动机器学习的软件。 autokeras 3.斯坦福网络分析平台,用于网络...

胖胖雕
37分钟前
0
0
最简单的cd命令是个大坑!

BASH Shell 是大多 Linux 发行版的默认 shell,BASH 有一些自己的内置命令,cd 就是其中的一个。 在centos6里面,系统中不存在 cd 的二进制文件。但是你仍然可以运行该命令,这是因为 cd 是 ...

gaolongquan
48分钟前
1
0
spring获取bean的几种方式

使用jdk:1.8、maven:3.3.3 spring获取Bean的方式 pom.xml文件内容: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="......

Vincent-Duan
54分钟前
2
0
一段话系列-Linux中IO的同步、异步、阻塞、非阻塞

首先我们框定一下背景,我们探讨的是Linux系统下的IO模型。 同步和异步是针对内核操作数据而言的,同步是指内核串行顺序操作数据,异步是指内核并行(或并发)操作数据,然后通过回调的方式通...

EasyProgramming
58分钟前
5
0
好程序员web前端分享主流CSS image比较

好程序员web前端分享主流CSS image比较在还原设计图的时候,难免会碰到一些样式图片的引用。如何来对这些图片做优化呢?本文简单的梳理了一下目前几种比较常用的使用方式。   注: 1. 有更好...

好程序员IT
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部