Tomcat 日志清除(含扩展AccessLogValve)

1、tomcat的访问日志AccessLogs定期或者定量删除

a 开启tomcat访问日志

编辑${catalina}/conf/server.xml文件.注:${catalina}是tomcat的安装目录

把以下的注释(<!-- -->)去掉即可。

<!--<ValveclassName="org.apache.catalina.valves.AccessLogValve"

directory="logs"  prefix="localhost_access_log."suffix=".txt"

pattern="common" resolveHosts="false"/>-->

下图为配置文件开启访问日志,以及对应参数的解释:

b extend the AccessLogValve by override this function: log(),设置定期或定量删除访问日志

public void emptyFile() {
        String logPath = System.getProperty("catalina.base");
        // rotatable=false,定量清除只有一个日志文件localhost_access_log.log
        if (this.rotatable == false) {
            synchronized (this) {
                System.out.println("------log size is------:" + this.currentLogFile.length());
                if (this.currentLogFile.length() > 10 * 1024) {
                    this.currentLogFile.delete();
                    open();
                }
            }
        } else {
            // 含有日期的日志清除方式`
            // localhost_access_log.2016-12-16.23.37.log
            // localhost_access_log.2016-12-16.23.39.log
            if (new File(logPath).isDirectory()) {
                // 获取文件夹中的文件集合
                File[] logs = new File(logPath).listFiles();
                // 设置系统这里设置的日期格式,和配置文件里的参数保持一致
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd.HH.mm");
                // 遍历集合
                for (int i = 0; i < logs.length; i++) {
                    File log = logs[i];
                    // 获取到第i个日志的名称,截取中间的日期字段,转成long型s
                    int start = log.getName().indexOf(".") + 1;
                    int end = log.getName().lastIndexOf(".");
                    // 获取到的日志名称中的时间(2016-12-16.23.37)
                    String dateStr = logPath.substring(start, end);
                    // 将字符串型的(2016-12-16.23.37)转换成long型
                    long lonInt = 0;
                    try {
                        lonInt = dateFormat.parse(dateStr).getTime();
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("------old-log date is------:" + lonInt);
                    // 系统时间减去日志名字中获取的时间差大于配置文件中设置的时间删除
                    if ((System.currentTimeMillis() - lonInt) / (1000 * 60) > 10) {
                        log.delete();
                        open();
                    }
                }
            }
        }

    }

2、tomcat的普通日志(catlina.out、localhost)配置log4j日志框架实现日志回滚

Log4j配置tomcat日志,定期删除:

首先,需要下载3个jar包.

tomcat-juli.jar 和 tomcat-juli-adapters.jar、log4j.jar

http://www.apache.org/dist/logging/log4j/1.2.17/

http://www.apache.org/dist/tomcat/tomcat-7/v7.0.69/bin/extras/

3个jar包一次放入的目录为:

tomcat-juli-adapters.jar 和 log4j.jar放入 ($CATALINA_BASE/lib)目录下

tomcat-juli.jar放入 $CATALINA_BASE/bin/目录,直接覆盖原有的tomcat-juli.jar即可

删除$CATALINA_BASE/conf/logging.properties文件,防止java.util.logging生成零长度的日志文件。

修改Tomcat中的conf/context.xml文件,将<Context>为<Context swallowOutput="true">。

最后,在tomcat6.0.43/lib目录下创建一个log4j.properties, 加入如下内容并保存:

(这里以定期清理catalina.out为例)

******************************************************************************

log4j.rootLogger = INFO, CATALINA

# Define all the appenders

log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender

log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina

log4j.appender.CATALINA.Append = true

log4j.appender.CATALINA.Encoding = UTF-8

# Roll-over the log once per day

log4j.appender.CATALINA.DatePattern = ‘.‘yyyy-MM-dd‘.log‘

log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout

log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender

log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost

log4j.appender.LOCALHOST.Append = true

log4j.appender.LOCALHOST.Encoding = UTF-8

log4j.appender.LOCALHOST.DatePattern = ‘.‘yyyy-MM-dd‘.log‘

log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout

log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender

log4j.appender.MANAGER.File = ${catalina.base}/logs/manager

log4j.appender.MANAGER.Append = true

log4j.appender.MANAGER.Encoding = UTF-8

log4j.appender.MANAGER.DatePattern = ‘.‘yyyy-MM-dd‘.log‘

log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout

log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender

log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager

log4j.appender.HOST-MANAGER.Append = true

log4j.appender.HOST-MANAGER.Encoding = UTF-8

log4j.appender.HOST-MANAGER.DatePattern = ‘.‘yyyy-MM-dd‘.log‘

log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout

log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.Encoding = UTF-8

log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\

INFO, MANAGER

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\

INFO, HOST-MANAGER

重启tomcat,就可以看到java -Djava.util.logging.config.file变成了java -Dnop -Djava.util.logging.config.file,说明配置成功了

效果如下所示:

 

参考:

http://alvinalexander.com/java/jwarehouse/apache-tomcat-6.0.16/java/org/apache/catalina/valves/AccessLogValve.java.shtml

http://code.taobao.org/p/tomcat/diff/3/tc8.0.x/java/org/apache/catalina/valves/AccessLogValve.java

http://www.tuicool.com/articles/ymyiuiu

http://sanwen8.cn/p/520j7Qi.html

http://www.cnblogs.com/dimmacro/p/5566480.html

http://blog.csdn.net/jackljf/article/details/17428335

Shell 分析tomcat访问日志 格式

http://www.cnblogs.com/zhwj184/archive/2013/03/28/3027422.html

java类写入日志和定时删除日志

http://blog.csdn.net/high2011/article/details/50451216

http://blog.csdn.net/jsky_studio/article/details/41686597?spm=5176.8246799.blogcont.4.WnVUiV>

时间: 2024-10-09 00:15:43

Tomcat 日志清除(含扩展AccessLogValve)的相关文章

自动清除过期的Tomcat日志的shell脚本

(友好提示:本文属于初级shell编程,高手可忽略此文) 在产品环境运行过程中,每天会切割产生按天计的日志文件,这些日志文件一般在过一定期限以后就没什么用处了,因此需要定期删除掉这些过期的日志文件.本文以CentOS下的Tomcat为应用环境基础,通过shell脚本的方式定时自动删除过期的Tomcat日志文件,以减少磁盘空间的占用.减轻管理员的日常工作. 一.shell脚本代码: #!/bin/bash # # filename: clearExpiredTomcatLogs.sh # # FU

16.4 配置Tomcat监听80端口;16.5、16.6、16.7配置Tomcat的虚拟主机(上中下);16.8 Tomcat日志

扩展: 邱李的tomcat文档 https://www.linuser.com/forum.php?mod=forumdisplay&fid=37 JAR.WAR包区别 http://blog.csdn.net/lishehe/article/details/41607725 tomcat常见配置汇总 http://blog.sina.com.cn/s/blog_4ab26bdd0100gwpk.html resin安装 http://fangniuwa.blog.51cto.com/10209

《Tomcat日志系统详解》

综合:Tomcat下相关的日志文件 Cataline引擎的日志文件,文件名catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的异常,org.apache.jasper.runtime.HttpJspBase.service类丢出的,日志信息就在该文件!) Tomcat下默认manager应用日志,文件名manager.日期.log 控制台输出的日志,Linux下默认重定向到catalina.out Access日志(Ser

16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志

16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 扩展 邱李的tomcat文档 https://www.linuser.com/forum.php?mod=forumdisplay&fid=37 JAR.WAR包区别 http://blog.csdn.net/lishehe/article/details/41607725 tomcat常见配置汇总 http://blog.sina.com.cn/s/blog_4ab26b

ELK+kafka收集 Nginx与tomcat日志

ELK日志收集 ELK原理与介绍为什么用到ELK:一般我们需要进行日志分析场景:直接在日志文件中 grep.awk 就可以获得自己想要的信息.但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档.文本搜索太慢怎么办.如何多维度查询.需要集中化的日志管理,所有服务器上的日志收集汇总.常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问.一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定

Tomcat日志设定

Tomcat日志概述 Tomcat 日志信息分为两类: 运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息. 访问日志信息,它记录的访问的时间,IP,访问的资料等相关信息. 访问日志 启用访问日志 默认 tomcat 不记录访问日志,如下方法可以使 tomcat 记录访问日志 编辑${catalina}/conf/server.xml 文件(注:{catalina}是tomcat的安装目录),把以下的注释 (<!-- -->) 去掉即可. 1 2 3 4 5 <!-- &

tomcat日志配置之一自带log

问题 tomcat每次启动时,自动在logs目录下生产以下日志文件,且每天都会生成对应日期的一个文件,造成日志文件众多: localhost.2012-07-05.txt catalina.2012-07-05.txt manager.2012-07-05.txt host-manager.2012-07-05.txt 目的 Tomcat以上日志都输出到同一个文件中. 修改步骤 打开Tomcat目录conf\logging.properties,修改如下,所有日志输出到tomcat开头的文件中

自定义日志阅读器——包括了一个load取Tomcat日志的分析器

最近在写往公司产品里添加Tomcat适配器,以支持Tomcat.有一些功能需要摘取到Tomcat的部分日志.没有合适的工具,也不想去网上找了,就自己写了一个. 简单的画了一下设计方案: 下面直接上代码了: 日志阅读器: 1 package com.fjn.tools.log.reader; 2 3 import java.io.File; 4 import java.util.LinkedList; 5 import java.util.List; 6 import java.util.Scan

Tomcat日志系统详解

综合:Tomcat下相关的日志文件 catalina引擎的日志文件,文件名:catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的异常,org.apache.jasper.runtime.HttpJspBase.service类丢出的,日志信息就在该文件!) Tomcat下默认manager应用日志,文件名manager.日期.log 控制台输出的日志,Linux下默认重定向到catalina.out Access日志(Se