Log4j配置学习文档之二 处理日滚文件-实现原理
#实现原理
##处理系统自己log4j定义的日滚日志文件
在系统中使用log4j中的RollingFileAppender和DailyRollingFileAppender可以实现日志文件的滚动,这里主要针对DailyRollingFileAppender产生的日滚文件做处理,因为DailyRollingFileAppender是每天都会滚动产生一个日志文件的(默认每天产生,DatePattern为’.'yyyy-MM-dd也会每天产生),产生的文件格式类似(设定的日志文件如果叫logfile.log的话)logfile.log.2016-12-27。而DailyRollingFileAppender又不支持MaxFileSize和MaxBackupIndex,所以时间一长的话,服务器里的日志文件就会很多,很耗存储空间,如果能够保留最近几天或者最近一周的文件就好了。所以本文档的出发点就是要让DailyRollingFileAppender产生的日滚文件保留最近一周的。
系统log4.properties配置如下
log4j.rootLogger=INFO, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%t] - <%m>%n#add the parameter can write the sql to console
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=INFO log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=${catalina.home}/logs/OpenLog.log
#DailyRollingFileAppender不支持MaxFileSize和MaxBackupIndex
#log4j.appender.logfile.MaxFileSize=100MB
# 但是这里可以通过程序来让他“支持”MaxBackupIndex
log4j.appender.logfile.MaxBackupIndex=7
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%t] - %m%n
###原理
原理大概是:定义一个监听器,监听器在启动的时候启动一个定时器,log4j.properties文件加上一个表示保留日志文件备份数的属性,比如MaxBackupIndex,然后定时器每天定时扫描tomcat下的日志文件,按日志文件后缀升序排序,和MaxBackupIndex作比较,如果产生的日志文件数比MaxBackupIndex大的话就把时间较小的多余的日志文件删除掉,这样的话就可以保证log4j里定义的logfile.log在tomcat中只保留时间最近的MaxBackupIndex这么多个的日志文件了。
##处理localhost_access_log
在tomcat的conf目录下的server.xml有这样一段配置
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
这个会在logs下每天生成一个localhost_access_log的日志文件,文件的内容记录的是http请求信息。
产生的日志文件名格式类似这样
也就是说localhost_access_log日志文件也是一个日滚文件,每天都会生成一个的话,服务器会有压力,利用上面的原理,我们可以把localhost_access_log产生的文件名格式改成像上面那样以[.日期]结尾,就可以重用上面的方法来删除掉多余的localhost_access_log文件了。
###原理:
把server.xml中的localhost_access_log的配置的[suffix=".txt"]去掉
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern ="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>去掉suffix=".txt"改为
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log."/>
这样tomcat产生的localhost_access_log就也是以日期为后缀的日志文件了
然后在上面对log4j系统日志文件做处理的时候就可以顺便处理localhost_access_log文件了。
当然了,原来就已经生成的localhost_access_log.txt文件还是会存在的,这就需要我们手动删除掉,或者批量把他们的.txt后缀去掉
linux中tomcat/logs下执行
rename 's/\.txt//' ./*
去掉文件的.txt后缀,然后就可以统一交给程序来处理了
##处理catalina.out
catalina.out里记录的内容主要是程序里System.out,e.printStackTrace等的信息,catalina.out日志文件只有一个,不会自己日滚,所以往往时间长了之后,catalina.out文件会非常大,所以需要对catalina.out做大小的控制处理,网上有些解决办法是直接把catalina.out的输出给关闭掉或者修改日志信息输出的等级来减少信息输出(参考:http://blog.csdn.net/vicky_yaoxj/article/details/25110033)。还有另外一种方法是把catalina.out变成像log4j那样的日滚文件来控制每个文件的大小,这里也主要实现一下这种方法。
###原理
首先需要把catalina.out变成每日产生一个文件并且是以[.日期]结尾的形式,然后再通过上面的处理方法来删除多余的catalina.out
把catalina.out变成日滚文件有两种办法:
Linux下使用cronolog工具来切分catalina.out (参考:http://www.tuicool.com/articles/IZNrYb)
使用log4j切割 (参考:http://baalwolf.iteye.com/blog/1464093)
这里用第二种,步骤:
下载tomcat-juli.jar放在tomcat的bin目录下
拷贝log4j.jar,lo4j.properties到tomcat的lib目录下
删除conf/logging.properties
重启tomcat
log4j.properties的配置如下
log4j.rootLogger=INFO,CATALINA
log4j.logger.com.danga.MemCached.MemCachedClient=WARN,CATALINA
#log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
#log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.encoding = UTF-8
#log4j.appender.CONSOLE.layout.conversionPattern =[%p-%d{yyyy/MM/dd/HH\:mm\:ss}]%c{1}.(%L) - %m%n # Define CATALINA appenders
log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.file = ${catalina.base}/logs/catalina.out
log4j.appender.CATALINA.DatePattern ='.'yyyy-MM-dd
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.conversionPattern = [%p-%d{yyyy/MM/dd/HH\:mm\:ss}]%c{1}.(%L) - %m%n
log4j.appender.CATALINA.append = true
这样lo4j会自动在午夜切割catalina.out成catalina.out.2011-03-07
Log4j配置学习文档之二 处理日滚文件-实现原理相关推荐
- Log4j配置学习文档之二 处理日滚文件-模拟实现
#模拟实现 定义监听器,监听器启动的时候初始化定时器 监听器 package com.tcsoft.license.util;import java.util.Calendar; import jav ...
- Log4j配置学习文档之三 参考
log4j配置详解(非常详细) 切分 Tomcat 的 catalina.out 文件,解决日志文件过大的问题 tomcat下catalina.out日志文件分割 Log4j的扩展-支持设置最大日志数 ...
- Log4j配置学习文档之一 log4j配置
#Log4j配置 Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出L ...
- nginx学习文档之二 配置负载均衡-linux配置负载均衡
#linux配置负载均衡 linux下配置tomcat负载均衡和windows下是一样的 安装完nginx后直接修改conf下的nginx.conf文件即可 配置文件如下: #user nobody; ...
- nginx学习文档之二 配置负载均衡-windows配置负载均衡
#windows配置负载均衡 nginx+tomcat负载均衡的意思大概如下图: 所有请求先经过nginx服务器,然后由nginx服务器进行转发,将请求根据配置需要分发给指定的tomcat服务器 ## ...
- nginx学习文档之二 配置负载均衡-负载均衡发现的问题
#负载均衡发现的问题 用了nginx负载均衡后,在两台tomcat正常运行的情况下,访问http://localhost 速度非常迅速,通过测试程序也可以看出是得到的负载均衡的效果,但是我们试验性的把 ...
- Git学习文档之二 应用总结-svn迁移到git
##svn迁移到git 在 Subversion,每个提交者在都在主机上有一个用户名,记录在提交信息中.如果想让这条信息更好的映射到 Git 作者数据里,则需要 从 Subversion 用户名到 G ...
- Docker学习文档之二 搭建环境-Linux环境
linux中docker部署javaweb 和上面widows中的一样,可以使用Dockerfile,然后build成镜像,再在运行时将linux的部署项目的文件夹通过 -v 挂载到镜像容器中. 也可 ...
- Docker学习文档之二 搭建环境-Windows环境
###创建镜像和在docker中搭建JavaWeb运行环境 在docker中创建镜像有两种方法: 通过进入容器修改基础镜像之后,使用docker commit <基础镜像ID> <镜 ...
最新文章
- 全球 Top 10 高材生赴神策数据的交流访问之旅
- 机器学习实战——特征工程之数据预处理
- 安装了silverlight还是提示_win10系统安装.netframework3.5方法
- asp.net 网站开发流程总结
- tensorflow计算网络占用内存_详细图解神经网络梯度下降法(tensorflow计算梯度)...
- Intel 10nm为何迟迟不肯露面?良品率偏低
- 卢伟冰为Redmi K50电竞版预热:相机拍照效果越来越出色
- 虚拟空间和服务器哪个快,云服务器快还是虚拟空间快
- 【网络文摘】编程的智慧
- 22. Django进阶:文件上传
- 每日一题/010/微积分/极限/换元/取指数
- numpy复习总结,为深度学习打下基础
- Nvidia GPU Architecture--Fermi架构笔记
- arccos(x)函数
- 论文总结之任务型对话NLU
- 计算机校招自我介绍,银行校招面试自我介绍范文
- FireStart教程:基于SharePoint的出差报销流程三
- UPC 维修栅栏(基本状态转移)
- Nexus私服仓库快速添加第三方jar包
- make编译打印详细日志
热门文章
- ajax获取后生成元素,获取动态的子元素生成的内容与jQuery AJAX
- idea中拉取项目时 没有文件_idea编译器中maven项目获取路径的方法
- unity三维向量变化为角度_三维旋转
- python做审计底稿视频_最新Python教学视频,每天自学俩小时,让你offer拿到手软...
- 【其他】编程技巧之常用缩写
- 初始化跟路由相关的定时器
- php文章远程图片,php实现异步将远程链接上内容(图片或内容)写到本地的方法
- redis cluster集群模式简述
- linux中的进程、环境变量和虚拟地址
- 我的世界java村民繁殖_我的世界:1.14版本刷新几率小的五种村庄,没有村民咋回事?...