Log4j日志详解

先大概看一下配置文件 是不是很眼花 其实很简单的
  1. #log4j.properties的配置
  2. log4j.rootLogger=INFO,A3,STDOUT   #定义输出级别和输出平台
  3.   
  4. log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender   #日志输出到控制台
  5. log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout  
  6. log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n  
  7.   
  8. log4j.appender.A3=org.apache.log4j.RollingFileAppender  #配置日志信息输出目的地Appender
  9. log4j.appender.A3.file=logs/server.log  
  10. log4j.appender.A3.MaxFileSize=1024KB  
  11. log4j.appender.A3.MaxBackupIndex=10  
  12. log4j.appender.A3.layout=org.apache.log4j.PatternLayout  
  13. log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n 



在项目一般放到src/main/resources目录 最好不要改名字log4j.properties,如果叫别的名字还需要配置(使用SpringMVC的话)

在web.xml这样配置
  1. <context-param>  
  2.         <param-name>log4jConfigLocation</param-name>  
  3.         <param-value>classpath:log4j.properties</param-value>  
  4. </context-param>  
  5.   
  6. <listener>  
  7.         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
  8. </listener> 
  1. <context-param>  
  2.         <param-name>log4jConfigLocation</param-name>  
  3.         <param-value>classpath:log4j.properties</param-value>  
  4. </context-param>  
  5.   
  6. <listener>  
  7.         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
  8. </listener> 

下面开始解释配置文件的意思啦

2.log4j.rootLogger=INFO,A3,STDOUT 

语法:log4j.rootLogger = level  , appenderName, appenderName, …

lelve是定义的输出级别,低于该级别的将不会输出,主要级别有OFF、ALL、FATAL、ERROR、WARN、INFO、DEBUG或自定义级别,其中OFF设定的话将不输出任何信息,ALL设定的话将输出所有信息;另外5个的级别FATAL>ERROR>WARN>INFO>DEBUG,如果你的lenel设定为INFO,那么不能输出DEBUG信息;

解释:这里设置的级别为 INFO,并定义了两个appenderName(A3,STDOUT)

提示:Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少项目上生产环境时候建议把debug的日志级别重新调为warn或者更高,避免产生大量日志。


3.log4j.appender.STDOUT ConsoleAppender

 log4j.appender.A3=org.apache.log4j.RollingFileAppende

语法:log4j.appender.appenderName=someAppender(选择一种输出平台)

指定输出appender,Log4J提供了一下几种appender:

a),org.apache.log4j.ConsoleAppender控制台
b),org.apache.log4j.FileAppender文件
c),org.apache.log4j.DailyRollingFileAppender每天产生一个日志文件
d),org.apache.log4j.RollingFileAppender文件大小到达指定尺寸的时候产生一个新的文件,可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件)。

e),org.apache.log4j.WriterAppender将日志信息以流格式发送到任意指定的地方


解释:这里设置了

log4j.appender.STDOUT = ConsoleAppender 输出控制台,log4j.appender.A3=org.apache.log4j.RollingFileAppende 输出到文件(文件大小到达指定尺寸的时候产生一个新的文件


4.log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout 

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

语法:log4j.appender.appenderName.layout=输出布局

Log4J提供了一下几种Layout

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)。

解释:这里设置了 log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout  

STDOUT,A3 定义输出布局,可以自己设定输入格式,好像用得比较多


5.log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n

log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p]%d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n

设置了org.apache.log4j.PatternLayout,一般都要设置这个输出格式

定义输出格式,格式化日志信息,Log4J采用类似C语言中的printf函数的打印格式格式化日志信息

语法:log4j.appender.appenderName.layout.ConversionPattern=输出格式

%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2012年06月24日 23:55:28,92

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

解释:这里设置了STDOUT [%p]输出优先级 INFO,[%l]输出日志事件的发生位置(代码中的行数等),%10.10c是所在类的全名(如果类名小于10就补空格,如果大于10字符就从左边较远输出将字符截段)%m输出代码中指定的消息(一般自己会在项目生命Logger,然后 Logger.Info("String"),输出String),%n输出一个回车换行符;

负号是左对齐的意思,A3的我就不解释了,自己跟着看把~

在网上找了个例子(对%10.10c有疑问的可以看下面例子理解一下

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。

如:

 1)   %20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
 2)   %-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
 3)   %.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

 4)   %20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

6.log4j.appender.A3.file=logs/server.log  

语法:[log4j.appender.appenderName.File=文件名](文件输出定义路径)

解释:这里定义了A3(RollingFileAppende)达到一定大小输出的日志文件在logs/server.log ,

日志会输出在server.log上(这里应该是安装目录),如果用tomcat可以加前缀${catalina.base}/ ${catalina.home}

补充一个知识点:CATALINA_HOME是Tomcat的安装目 录,CATALINA_BASE是Tomcat的工作目录。如果我们想要运行Tomcat的 多个实例,但是不想安装多个Tomcat软件副本。那么我们可以配置多个工作 目录,每个运行实例独占一个工作目录,但是共享同一个安装目录。


log4j.appender.A3.MaxFileSize=1024KB 

语法:log4j.appender.appenderName.MaxFileSize=文件大小

解释:这里是因为A3用了RollingFileAppende,所以需要制定产生新日志文件时候的界限,若是再超过指定尺寸(MaxFileSize)需要增加一个日志文件时,那么原来是xxx.1的文件名,新生成的文件命名是xxx.2

log4j.appender.A3.MaxBackupIndex=10

语法:log4j.appender.appenderName.MaxBackupIndex=最大记录文件数

解释:MaxBackupIndex = 10;设置最大的序号(MaxBackupIndex),若超过这个序号,那么最早的记录就会被覆盖掉。大概就是只能存在10个文件,然后xxx.1会当有xxx.11时,xxx.1会被覆盖掉消失.


总结:如果用到其他Appender的再查一下设置就行了,基本使用看懂了其他应该没啥问题了

因为DailyRollingFileAppender我们也会经常用到 我把设置也从别的地方复制过来


log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=test.log
log4j.appender.logfile.DataPattern='.'yyyy-MM-dd-HH-mm
log4j.appender.logfile.Threshold=debug
log4j.appender.logfile.encoding=UTF-8
log4j.appender.logfile.Append=false
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern= [%d{yyyy-MM-dd HH\:mm\:ss}]%-5p %c(line\:%L) %x-%m%n

需求说明 (1)使用UserDaoImp1类的方法查找用户,并用User类的getUserInfo()方法输出用户信息 (2)使用一个不存在的用户名查找用户,使用try-catch对抛出的异常进行处理 实现思路及关键代码 (1)在测试类中调用UserDaoImp类的addUser(User user)方法,添加用户,然后用findUser(String uName)方法查找并输出用户信息 (2)在测试类中调用UserDaoImp1类的findUser(String uName)方法,使用不存在的用户名查找用户,并试图输出用户信息 (3)对抛出的异常使用try-catch进行异常处理。 实践二:使用try-catch-finally进行异常处理 需求说明 (1)对实践1的异常使用try-catch-finally进行异常处理 (2)在finally块输出是否抛出了异常 实现思路及关键代码 (1)在任务一中的代码上增加finally块 (2)为了判断在finally块输出是否抛出异常,可以设置一个变量,在catch块里修改这个变量 实践三:使用throw和throws 需求说明 修改UserDaoImpl类的updateUser(User user)方法,要求如果用户id被修改,则: (1)不执行更新 (2)抛出一个Exception异常 (3)异常消息是“用户id不能修改” 实现思路及关键代码 (1)修改UserDao类的updateUser(User user)方法,声明抛出异常 (2)修改UserDaoImpl类的updateUser(User user)方法,加入判断语句,并抛出异常 (3)在测试类中调用,并进行异常处理 实践四:使用log4j 需求说明 (1)使用log4j输出日志信息 (2)查看输出日志信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值