Linux下定时切割Tomcat日志并删除指定天数前的日志记录
ystem.out和System.err都被打印到catalina.out。catalina.out不会rotate。一般在部署Tomcat后,运行久了,catalina.out文件会越来越大,对系统的稳定造成了一定的影响。
1、可通过修改conf/logging.properties日志配置文件来屏蔽掉这部分的日志信息。
[root@localhost conf]# pwd /usr/local/tomcat/conf [root@localhost conf]# cp logging.properties logging.propertiesbak [root@localhost conf]# vim logging.properties 25 1catalina.org.apache.juli.FileHandler.level = FINE 26 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 27 1catalina.org.apache.juli.FileHandler.prefix = catalina.
将level级别设置成WARNING就可以大量减少日志的输出,当然也可以设置成OFF,直接禁用掉。
一般日志的级别有:
SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)
2、使用cronolog工具切分Tomcat的catalina.out日志文件
下载、安装cronolog
[root@localhost src]# rpm -qa |grep cronolog [root@localhost src]# tar zxvf cronolog-1.6.2.tar.gz [root@localhost src]# cd cronolog-1.6.2 [root@localhost cronolog-1.6.2]# mkdir /usr/local/cronolog [root@localhost cronolog-1.6.2]# ./configure --prefix=/usr/local/cronolog/ ...... checking for working makeinfo... missing checking for gcc... no checking for cc... no configure: error: no acceptable cc found in $PATH [root@localhost cronolog-1.6.2]# yum -y install gcc gcc-c++ [root@localhost cronolog-1.6.2]# ./configure [root@localhost cronolog-1.6.2]# make && make install [root@localhost cronolog-1.6.2]# which cronolog /usr/local/sbin/cronolog [root@localhost cronolog-1.6.2]#
用which cronolog可以查到安装的路径,这个路径待会在修改catalina.sh时会用到。
修改catalina.sh 将183行修改成184行内容,注释掉355行,368、369行替换成370、371行,379、380行替换成381、382行
[root@localhost cronolog-1.6.2]# cp /usr/local/tomcat/bin/catalina.sh /usr/local/tomcat/bin/catalina.shbak [root@localhost cronolog-1.6.2]# vim /usr/local/tomcat/bin/catalina.sh 182 if [ -z "$CATALINA_OUT" ] ; then 183 # CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out 184 CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out 185 fi ...... 355 # touch "$CATALINA_OUT" ...... 368 # org.apache.catalina.startup.Bootstrap "$@" start 369 org.apache.catalina.startup.Bootstrap "$@" start 2>&1 370 # >> "$CATALINA_OUT" 2>&1 & 371 | /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null & ...... 363 -Djava.security.manager 364 -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy 365 -Dcatalina.base="$CATALINA_BASE" 366 -Dcatalina.home="$CATALINA_HOME" 367 -Djava.io.tmpdir="$CATALINA_TMPDIR" 368 # org.apache.catalina.startup.Bootstrap "$@" start 369 # >> "$CATALINA_OUT" 2>&1 & 370 org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \ 371 | /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null & 372 373 else 374 "$_RUNJAVA" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 375 -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" 376 -Dcatalina.base="$CATALINA_BASE" 377 -Dcatalina.home="$CATALINA_HOME" 378 -Djava.io.tmpdir="$CATALINA_TMPDIR" 379 # org.apache.catalina.startup.Bootstrap "$@" start 380 # >> "$CATALINA_OUT" 2>&1 & 381 org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \ 382 | /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null & 383 384 fi [root@localhost cronolog-1.6.2]# service tomcat stop [root@localhost cronolog-1.6.2]# service tomcat start
这样在/usr/local/tomcat/logs每天会自动生成catalina.%Y-%m-%d.out文件,下面我们要做的是定期清理这些过期的文件,我们可以通过crontab来实现
[root@localhost logs]# crontab -e no crontab for root - using an empty one crontab: installing new crontab [root@localhost logs]# crontab -l 30 5 * * 6 /bin/find /usr/local/tomcat/logs/ -mtime +7 -type f -name "catalina.*.out" -exec /bin/rm -f {} \; [root@localhost logs]# cat /var/spool/cron/root 30 5 * * 6 /bin/find /usr/local/tomcat/logs/ -mtime +7 -type f -name "catalina.*.out" -exec /bin/rm -f {} \; [root@localhost logs]#
补:nginx的log日志分为access.log和error.log;其中access.log 记录了哪些用户、哪些页面以及用户浏览器、ip和其他的访问信息;error.log则是记录服务器错误日志.
error.log日志的形式如下:
201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] fwf[-] tip[-] 127.0.0.1:9000 0.007 0.007 MX pythontab.com GET /html/test.html HTTP/1.1 "200" 2426 "http://a.com" "es-ES,es;q=0.8" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" 187.171.69.177 - - [03/Jan/2013:21:17:20 -0600] fwf[-] tip[-] 127.0.0.1:9000 0.006 0.006 MX pythontab.com GET /html/test2.html HTTP/1.1 "200" 2426 "http://a.com" "es-ES,es;q=0.8" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"
从上面我们可以看出几部分信息:
1.客户端(用户)IP地址。如:上例中的 201.158.69.116
2.访问时间。如:上例中的 [03/Jan/2013:21:17:20 -0600]
3.访问端口。如:上例中的 127.0.0.1:9000
4.响应时间。如:上例中的 0.007
5.请求时间。如:上例中的 0.007
6.用户地理位置代码(国家代码)。如:上例中的 MX(墨西哥)
7.请求的url地址(目标url地址)的host。如:上例中的 pythontab.com
8.请求方式(GET或者POST等)。如:上例中的 GET
9.请求url地址(去除host部分)。如:上例中的 /html/test.html
10.请求状态(状态码,200表示成功,404表示页面不存在,301表示永久重定向等,具体状态码可以在网上找相关文章,不再赘述)。如:上例中的 "200"
11.请求页面大小,默认为B(byte)。如:上例中的 2426
12.来源页面,即从哪个页面转到本页,专业名称叫做“referer”。如:上例中的 "http://a.com"
13.用户浏览器语言。如:上例中的 "es-ES,es;q=0.8"
14.用户浏览器其他信息,浏览器版本、浏览器类型等。如:上例中的 "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"
access.log日志的格式不是一成不变的,是可以自定义的。在nginx的nginx.conf配置文件找到:log_format 这里就是日志的格式
log_format main ‘$remote_addr - $remote_user [$time_local] ‘ ‘fwf[$http_x_forwarded_for] tip[$http_true_client_ip] ‘ ‘$upstream_addr $upstream_response_time $request_time ‘ ‘$geoip_country_code ‘ ‘$http_host $request ‘ ‘"$status" $body_bytes_sent "$http_referer" ‘ ‘"$http_accept_language" "$http_user_agent" ‘;
112.97.37.90 - - [14/Sep/2013:14:37:39 +0800] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenovo A326 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.1.259" -
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。