Log4j参数说明及常用案例

Log4j

0:导入jar包及log4j.properties配置文件

 

1:log4j 格式详解

1.1:日志级别

log4j.rootLogger=, 

日志级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF,不区分大小写

CONSOLE:控制台

注意,需在控制台输入,只需将其中一个appender定义为stdout即可

注意,rootLogger默认是对整个工程生效

注意,如果只想对某些包操作,那么:log4j.logger.com.hutu=info, stdout,表示该日志对package com.hutu生效

注意,这样做可以区分dev/线上,也可以减小性能影响:if(log.isDebugEnabled()){log.debug();}

注意,如果末尾为R,则以、隔开。如log4j.rootLogger=ERRORWARNINFODEBUG,R

注意,如果没有为R,则以,隔开。如log4j.rootLogger=ERROR,WARN,INFO,stdout

1.2:日志输出类型

log4j.appender.appender1 = org.apache.log4j.[控制台|文件|每天日志文件|按文件大小创建|...]

1.2.1:ConsoleAppender(控制台)

Ø Threshold=WARN:指定日志消息的输出最低层次。 

Ø ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 

Ø Target=System.err:默认情况下是:System.out,指定输出控制台 

1.2.2:FileAppender(文件)

Ø Threshold=WARN:指定日志消息的输出最低层次。 

Ø ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

Ø File=mylog.txt:指定消息输出到mylog.txt文件。 

Ø Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

1.2.3:DailyRollingFileAppender(每天产生一个日志文件)

Ø Threshold=WARN:指定日志消息的输出最低层次。 

Ø ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 

Ø File=mylog.txt:指定消息输出到mylog.txt文件。 

Ø Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 

Ø DatePattern=.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下: 

  1).'yyyy-MM: 每月 

  2).'yyyy-ww: 每周 

  3).'yyyy-MM-dd: 每天 

  4).'yyyy-MM-dd-a: 每天两次 

  5).'yyyy-MM-dd-HH: 每小时 

  6).'yyyy-MM-dd-HH-mm: 每分钟 

1.2.4:RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)

Ø Threshold=WARN:指定日志消息的输出最低层次。 

Ø ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 

Ø File=mylog.txt:指定消息输出到mylog.txt文件。 

Ø Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 

Ø MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。 

Ø MaxBackupIndex=2:指定可以产生的滚动文件的最大数。 

1.2.5:WriteAppender(将日志信息以流格式发送到任意指定的地方)
1.2.6:JDBCAppender(将日志信息保存到数据库中)

配置参数详见<使用场景 2.4>

1.2.7:JDBCAppender(将日志发送到邮箱)

配置参数详见<使用场景 2.3>

1.3:日志输出路径

log4j.appender.appender1.File=[下列参考]

#0:绝对路径:f:/logs/backup.log

#1:相对路径${user.home}/logs/backup.log

#2:相对路径:/logs/backup.log

#3:发布到Tomcat下后的相对路径:${catalina.home}/webapps/项目名称/logs/backup.log,

#4:直接在tomcat/bin/startup.bat启动,根路径开始为tomcat/bin目录)

1.4:日志布局格式

log4j.appender.appender1.layout=org.apache.log4j.[HTMLLayout | SimpleLayout | TTCCLayout]

Ø HTMLLayout(以HTML表格形式布局)

Ø SimpleLayout(包含日志信息的级别和信息字符串)

Ø TTCCLayout(包含日志产生的时间,执行绪,类别等信息)

Ø PatternLayout(可以灵活的指定布局格式,常用)

1.5:日志输出格式

log4j.appender.appender1.layout.ConversionPattern=[下列参考]

例如,%d - %m%n%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

%c 输出日志信息所属的类的全名

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 221028

%f 输出日志信息所属的类的类名

%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行

%m 输出代码中指定的信息,如log(message)中的message

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n

%p 输出优先级,即DEBUGINFOWARNERRORFATAL。如果是调用debug()输出的,则为DEBUG,依此类推

%r 输出自应用启动到输出该日志信息所耗费的毫秒数

%t 输出产生该日志事件的线程名

可参考:http://blog.sina.com.cn/s/blog_4e4dd5570100qowy.html

1.6:其他配置

log4j.logger.org.springframework=OFF  

log4j.logger.org.apache.struts2=OFF  

log4j.logger.com.opensymphony.xwork2=OFF  

log4j.rootLogger=INFO,Error,stdout  #c3p0的日志信息关闭,但要求将所有R改为stdout

可参考

http://blog.csdn.net/projava/article/details/7344839 

1.7:总结一下:

Logger类:完成日志记录,设置日志信息级别

Appender类:决定日志去向,终端、DB、硬盘

Layout类:决定日志输出的样式,例如包含当前线程、行号、时间

2:使用场景

2.1:按日期产生日志文件

#设置日志的级别 ,多个以、分开(没有给出的,则不会被输出)

log4j.rootLogger=ERRORWARNINFODEBUG,R

 

#DailyRollingFileAppender每天产生一个日志文件

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

 

#设置日志文件保存路径

log4j.appender.R.File=log/backup.log

 

#日志输出格式

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n

 

#设置日志文件后缀名,决定着多长时间创建一个新的文件!yyyyMMdd每天一个,yyyyMMddHH第小时一个,...

log4j.appender.R.DatePattern='.'yyyy-MM-dd

 

#日志布局格式

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

 

2.2:按文件大小产生日志文件

#设置日志的级别 ,多个以、分开(没有给出的,则不会被输出)

log4j.rootLogger=ERRORWARNINFODEBUG,R

 

#RollingFileAppender:文件大小到达指定尺寸时产生一个新的文件

log4j.appender.R=org.apache.log4j.RollingFileAppender

 

#设置日志文件保存路径 

log4j.appender.R.File=log/backup.log

 

#超出设置的大小,则将其以[文件名称+序号]备份后,再写入。

log4j.appender.R.MaxFileSize=3KB

 

#设置日志文件备份的最大序号

log4j.appender.R.MaxBackupIndex=10

 

#日志输出格式 

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

 

#日志布局格式

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

2.3:日志发到邮箱  

2.3.1:依赖包3个包

Ø log4j-1.2.15.jar(版本低于log4j-1.2.14.jar不支持SMTP认证) 

Ø mail.jar 

Ø activation.jar 

2.3.2:测试环境是否能发送邮件

import org.apache.log4j.Logger;

import org.apache.log4j.PatternLayout;

import org.apache.log4j.net.SMTPAppender;

 

public class TestLog4jSendMail {

static Logger logger = Logger.getLogger(TestLog4jSendMail.class);

SMTPAppender appender = new SMTPAppender();

public TestLog4jSendMail() {

try {

appender.setSMTPUsername("username");

appender.setSMTPPassword("password");

appender.setTo("xxx@xxx.com");

appender.setFrom("yyy@yyy.com");

// SMTP服务器 smtp.163.com

appender.setSMTPHost("smtp.163.com");

appender.setLocationInfo(true);

appender.setSubject("Test Mail From Log4J");

appender.setLayout(new PatternLayout());

appender.activateOptions();

logger.addAppender(appender);

logger.error("Hello World");

} catch (Exception e) {

e.printStackTrace();

logger.error("Printing ERROR Statements", e);

}

}

public static void main(String args[]) {

new TestLog4jSendMail();

}

}

2.3.3:配置文件

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender

日志的错误级别

log4j.appender.MAIL.Threshold=ERROR,INFO,DEBUG

缓存文件大小,日志达到512K时发送Email

#log4j.appender.MAIL.BufferSize=10

发送邮件的服务器(smtp.163.com)

log4j.appender.MAIL.SMTPHost=smtp.163.com

#邮件主题

log4j.appender.MAIL.Subject=ErrorMessage

#发送邮件箱的用户

log4j.appender.MAIL.SMTPUsername=xxx@163.com

#发送邮件箱的密码

log4j.appender.MAIL.SMTPPassword=xxx

#发送邮件箱

log4j.appender.MAIL.From=xxx@163.com

#接受邮件箱

log4j.appender.MAIL.To=yyy@qq.com

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

 

#在com.study.logMail包下面的ERROR级别以上的log都是采用邮件发送

log4j.logger.com.study.logMail = ERROR,MAIL 

2.3.4:反馈如下

 

 

2.4:日志保存到数据库

2.4.1:创建数据库或表

CREATE DATABASE log4jdb

 

CREATE TABLE RESLOG (

 createTime VARCHAR(20), #日志记录时间

 threadVARCHAR(200),#线程名称

 levelText VARCHAR(100),#日志级别(INFODEBUGERROR)

 logclass VARCHAR(1000),#发生事件的类全路径

 message VARCHAR(4000),#日志消息

 username VARCHAR(4000)  #用户

 )#

2.4.2配置参数

#设置捕获的级别

log4j.rootLogger=ERRORWARNINFODEBUG,DATABASE

#设置为日志保存到数据库

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

#这个配置是告诉LOG4J,有多少条日志信息后才存入数

#数据库连接字符串据库,我这里是1,就是说有一条就查一条,显然这样在生产环境下是很影响系统性能的。

log4j.appender.db.BufferSize=10

#数据库连接字符串

log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4jdb

#数据库驱动,要求导入jar!!!

log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver

#数据库用户名

log4j.appender.DATABASE.user=root

#数据库密码

log4j.appender.DATABASE.password=123456

#这个配置是告诉当LOG4J吧日志存储数据库时用的SQL语句。SQ_RESLOG_LOGID.Nextval是我建的一个SEQUENCE;‘%C’是日志中的CLASS;‘%M’是打印日志是执行到类里的方法;‘%d’是打印的时间,它支持格式化;‘%P’是日志级别,包括INFODEBUGERROR等;‘%m’是MSG,日志内容。注意这里的参数区分大小写。

log4j.appender.DATABASE.sql=INSERT INTO RESLOG (createTime,thread,levelText,logclass,message,username) values ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m','%X{user}') 

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

 

2.4.3:结果

 

2.5:日志应用于socket

log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender

#设置服务端的ip

log4j.appender.SOCKET.RemoteHost=localhost

#设置端口号

log4j.appender.SOCKET.Port=5001 

log4j.appender.SOCKET.LocationInfo=true

# Set up for Log Facter 5

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

log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

# Log Factor 5 Appender

log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender

log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

2.6:应用于控制台

log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

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

log4j.appender.Threshold=DEBUG

log4j.appender.CONSOLE.Target=System.out

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

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

#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread] n%c[CATEGORY]%n%m[MESSAGE]%n%n

2.7:应用于文件回滚

log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.Threshold=ERROR

log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}rolling.log

log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆盖

log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸

log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //备份数

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

log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值