31.6.2 tomcat日志设置

说明:服务器上的tomcat运行webapps下的项目,时间长了,catalina.out日志文件会非常大,不利于每天有bug时,去查询日志处理bug。故而需要分割catalina.out 。分割日志可以按照时间来分割(如按天) ,或者按照文件大小,行数来分割
【系统环境:CentOS-6.6-x86_64】
【Tomcat版本:7.0.62】

Tomcat日志概述

http://tomcat.apache.org/tomcat-7.0-doc/logging.html

Tomcat 日志信息分为两类:
  • 访问日志信息,记录访问的时间,IP,访问的资料等相关信息。
  • 运行中的日志,主要记录运行的一些信息,尤其是一些异常错误日志信息。

访问日志:
Tomcat访问日志的配置在TOMCAT_HOME/conf/server.xml中(注:注释以下内容即可关闭访问日志)

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

参数详解:

className:官方说明必须按照默认配置不可更改。
directory:日志文件位置。
prefix:日志文件前缀。
suffix:日志文件后缀。
pattern:日志模式参数,设置参数很丰富,参数说明见下表。
resolveHosts:如果这个值是true的话,tomcat会将这个服务器IP地址通过DNS转换为主机名,如果是false,就直接写服务器IP地址。

pattern 参数:
%a - 远端IP地址
%A - 本地IP地址
%b - 发送的字节数,不包括HTTP头,如果为0,使用”-”
%B - 发送的字节数,不包括HTTP头
%h - 远端主机名(如果resolveHost=false,远端的IP地址)
%H - 请求协议
%l - 从identd返回的远端逻辑用户名(总是返回 ‘-‘)
%m - 请求的方法(GET,POST,等)
%p - 收到请求的本地端口号
%q - 查询字符串(如果存在,以 ‘?’开始)
%r - 请求的第一行,包含了请求的方法和URI
%s - 响应的状态码
%S - 用户的session ID
%t - 日志和时间,使用通常的Log格式
%u - 认证以后的远端用户(如果存在的话,否则为’-‘)
%U - 请求的URI路径
%v - 本地服务器的名称
%D - 处理请求的时间,以毫秒为单位
%T - 处理请求的时间,以秒为单位

运行日志:

  • 运行日志分为5类:catalina 、localhost 、manager 、admin 、host-manager

  • 日志的级别分为7种:SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value) 除此之外,还可以使用OFF关闭相关日志,使用ALL输出所有级别的日志

  • 修改 TOMCAT_HOME/conf/logging.properties 中的内容,设定某类日志的级别

    • 设置 catalina 日志的级别为: FINE

      catalina.org.apache.juli.FileHandler.level = FINE
      
    • 禁用 catalina 日志的输出:

      catalina.org.apache.juli.FileHandler.level = OFF
      
    • 输出 catalina 所有的日志消息:

      catalina.org.apache.juli.FileHandler.level = ALL
      

https://blog.youkuaiyun.com/pengjunlee/article/details/79477567

分割catalina.out日志文件

问题:

tomcat日志文件logs/catalina.out默认不会自动rotate,该文件会越来越大,以致打开速度很慢甚至无法打开,因而需要自动分割catalina.out,每天生成一个新的catalina-yyyy-mm-dd.out格式的文件。

解决方法:

一:cronlog

cronolog可以协助Web Server之类的做 log档的 rotate,详细的运作原理大致如下:

Tomcat先把输出写到 console(标准输出) 然后透过 pipe (|) 转为 cronolog 的输入,由cronolog针对一个事先给定的文件名的命名规则,去过滤数据,定期关闭旧文件,然后再开启新档。如果我们将文件名的命名规则设为catalina.out.%Y-%m-%d,就可以做到每天开一个新的catalina-yyyy-mm-dd.out的档案了。

1:安装cronolog

  1. 下载cronolog-1.6.2.tar.gz 至/usr/local/src/ 目录下

    cd /usr/local/src 
    tar zxvf cronolog-1.6.2.tar.gz (注意权限问题,否则可能出错)
    
  2. 当前目录下生成一个目录cronolog-1.6.2

    cd cronolog-1.6.2
    yum groupinstall "Development Tools"  安装环境(此处要有足够的权限)
    ./configure 
    make
    make install
    
  3. which cronolog查找安装路径,默认应该是/usr/local/sbin/cronolog,该路径待会在修改catalina.sh时用到。

    which cronolog
    

2:修改catalina.sh

  1. List item

	org.apache.catalina.startup.Bootstrap "$@" start \
   >> "$CATALINA_OUT" 2>&1 "&"

修改为

org.apache.catalina.startup.Bootstrap "$@" start \
  2>&1 |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" &

如图
在这里插入图片描述

  1. 将touch “$CATALINA_OUT” 一行注释掉 (或直接删除)

在这里插入图片描述
https://blog.youkuaiyun.com/weixin_38860565/article/details/81633234#
3:重启tomcat使配置生效

查看logs/目录以验证配置生效:
在这里插入图片描述
https://blog.youkuaiyun.com/loyachen/article/details/47302143

二:logrotate

Tomcat日志切割工具 logrotate
一、日志工具Logrotate简介
二、Logrotate运行机制
三、Logrotate组成
四、安装配置Logrotate
五、测试

在我们生产环境中经常遇到tomcat log清理的问题,曾经做过实验通过重定向的方式把日志清空,但是发现日志tomcat里面的catalina.out不输出日志了。这时候我们可以考虑一下日志管理工具Logrotate
在这里插入图片描述
一、日志工具Logrotate简介

Logrotate实际就是起着上述脚本作用的小工具,他通过让用户来配置规则的方式,检测和处理日志文件。配合Cron可让处理定时化;
Logrotate预制了大量判断条件和处理方式,可大大降低手写脚本的负担和出错的可能;
Logrorate检测日志文件属性,比对用户配置好的检测条件,对满足条件的再根据用户配置的要求来处理,整个可以通过Cron来定时调度,这其实是非常经典的Linux解决问题的思路,可以好好静下心来品味下,简单,好用。

二、Logrotate运行机制

系统会定时运行logrotate,一般是每天一次。系统是这么实现按天执行的。crontab会每天定时执行/etc/cron.daily目录下的脚本,而这个目录下有个文件叫logrotate

[root@ldap01 ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

三、Logrotate组成

以下是logrotate运行的关键点:

/usr/bin/logrotate 程序所在位置;
/etc/cron.daily/logrotate 默认让Cron每天执行logrotate一次;
/etc/logrotate.conf 全局配置文件;
/etc/logrotate.d 应用自个的配置文件存放目录,覆盖全局配置;

四、安装配置Logrotate

安装logrotate

[root@localhost ~]# yum install -y logrotate

配置文件logrotate

[root@localhost ~]# cat /etc/logrotate.d/tomcat
/application/tomcat/logs/catalina.out {
    daily
    copytruncate
    rotate 30
    compress
    notifempty
    dateext
    missingok
}

关于每个参数的作用我们可以查看全局文件cat /etc/logrotate.conf 我们可以把配置文件写在/etc/logrotate.conf里面或者放在/etc/logrotate.d下面

daily 表示每天整理一次
rotate 20 表示保留20天的备份文件
dateext 文件后缀是日期格式,也就是切割后文件是:xxx.log-20171205.gz
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
compress 通过gzip压缩转储以后的日志(gzip -d xxx.gz解压)
missingok 如果日志不存在则忽略该警告信息
notifempty 如果是空文件的话,不转储
#size 5M #当catalina.out大于5M就进行切割,可用可不用!

以下是不常用参数

  1. weekly 指定转储周期为每周
  2. monthly 指定转储周期为每月
  3. nocompress 不需要压缩时,用这个参数
  4. nocopytruncate 备份日志文件但是不截断
  5. create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
  6. nocreate 不建立新的日志文件
  7. delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
  8. nodelaycompress 覆盖 delaycompress 选项,转储同时压缩
  9. errors address 转储时的错误信息发送到指定的Email 地址
  10. ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
  11. mail address 把转储的日志文件发送到指定的E-mail 地址
  12. nomail 转储时不发送日志文件
  13. olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
  14. noolddir 转储后的日志文件和当前日志文件放在同一个目录
  15. prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
  16. postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

五、测试

# 1. 调试 (d = debug)参数为配置文件,不指定则执行全局配置文件 
logrotate -d /etc/logrotate.d/tomcat.conf 
# 2. 强制执行(-f = force),可以配合-v(-v =verbose)使用,注意调试信息默认携带-v;
 logrotate -v -f /etc/logrotate.d/tomcat.conf

效果图如下:
在这里插入图片描述https://www.centos.bz/
原文出处:abcdocker -> https://www.abcdocker.com/abcdocker/2837

案例:
https://www.jb51.net/article/115694.htm
https://linuxeye.com/428.html
https://www.linuxidc.com/Linux/2019-02/156972.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值