#实现原理

##处理系统自己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 &quot;%r&quot; %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 &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>去掉suffix=".txt"改为
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %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变成日滚文件有两种办法:

  1. Linux下使用cronolog工具来切分catalina.out (参考:http://www.tuicool.com/articles/IZNrYb)

  2. 使用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配置学习文档之二 处理日滚文件-实现原理相关推荐

  1. Log4j配置学习文档之二 处理日滚文件-模拟实现

    #模拟实现 定义监听器,监听器启动的时候初始化定时器 监听器 package com.tcsoft.license.util;import java.util.Calendar; import jav ...

  2. Log4j配置学习文档之三 参考

    log4j配置详解(非常详细) 切分 Tomcat 的 catalina.out 文件,解决日志文件过大的问题 tomcat下catalina.out日志文件分割 Log4j的扩展-支持设置最大日志数 ...

  3. Log4j配置学习文档之一 log4j配置

    #Log4j配置 Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出L ...

  4. nginx学习文档之二 配置负载均衡-linux配置负载均衡

    #linux配置负载均衡 linux下配置tomcat负载均衡和windows下是一样的 安装完nginx后直接修改conf下的nginx.conf文件即可 配置文件如下: #user nobody; ...

  5. nginx学习文档之二 配置负载均衡-windows配置负载均衡

    #windows配置负载均衡 nginx+tomcat负载均衡的意思大概如下图: 所有请求先经过nginx服务器,然后由nginx服务器进行转发,将请求根据配置需要分发给指定的tomcat服务器 ## ...

  6. nginx学习文档之二 配置负载均衡-负载均衡发现的问题

    #负载均衡发现的问题 用了nginx负载均衡后,在两台tomcat正常运行的情况下,访问http://localhost 速度非常迅速,通过测试程序也可以看出是得到的负载均衡的效果,但是我们试验性的把 ...

  7. Git学习文档之二 应用总结-svn迁移到git

    ##svn迁移到git 在 Subversion,每个提交者在都在主机上有一个用户名,记录在提交信息中.如果想让这条信息更好的映射到 Git 作者数据里,则需要 从 Subversion 用户名到 G ...

  8. Docker学习文档之二 搭建环境-Linux环境

    linux中docker部署javaweb 和上面widows中的一样,可以使用Dockerfile,然后build成镜像,再在运行时将linux的部署项目的文件夹通过 -v 挂载到镜像容器中. 也可 ...

  9. Docker学习文档之二 搭建环境-Windows环境

    ###创建镜像和在docker中搭建JavaWeb运行环境 在docker中创建镜像有两种方法: 通过进入容器修改基础镜像之后,使用docker commit <基础镜像ID> <镜 ...

最新文章

  1. 全球 Top 10 高材生赴神策数据的交流访问之旅
  2. 机器学习实战——特征工程之数据预处理
  3. 安装了silverlight还是提示_win10系统安装.netframework3.5方法
  4. asp.net 网站开发流程总结
  5. tensorflow计算网络占用内存_详细图解神经网络梯度下降法(tensorflow计算梯度)...
  6. Intel 10nm为何迟迟不肯露面?良品率偏低
  7. 卢伟冰为Redmi K50电竞版预热:相机拍照效果越来越出色
  8. 虚拟空间和服务器哪个快,云服务器快还是虚拟空间快
  9. 【网络文摘】编程的智慧
  10. 22. Django进阶:文件上传
  11. 每日一题/010/微积分/极限/换元/取指数
  12. numpy复习总结,为深度学习打下基础
  13. Nvidia GPU Architecture--Fermi架构笔记
  14. arccos(x)函数
  15. 论文总结之任务型对话NLU
  16. 计算机校招自我介绍,银行校招面试自我介绍范文
  17. FireStart教程:基于SharePoint的出差报销流程三
  18. UPC 维修栅栏(基本状态转移)
  19. Nexus私服仓库快速添加第三方jar包
  20. make编译打印详细日志

热门文章

  1. ajax获取后生成元素,获取动态的子元素生成的内容与jQuery AJAX
  2. idea中拉取项目时 没有文件_idea编译器中maven项目获取路径的方法
  3. unity三维向量变化为角度_三维旋转
  4. python做审计底稿视频_最新Python教学视频,每天自学俩小时,让你offer拿到手软...
  5. 【其他】编程技巧之常用缩写
  6. 初始化跟路由相关的定时器
  7. php文章远程图片,php实现异步将远程链接上内容(图片或内容)写到本地的方法
  8. redis cluster集群模式简述
  9. linux中的进程、环境变量和虚拟地址
  10. 我的世界java村民繁殖_我的世界:1.14版本刷新几率小的五种村庄,没有村民咋回事?...