本文概要:先后介绍配置log4j日志输出到控制台,文件,数据库,邮件;最后给出了日志输出模板中各种符号(%d, %p等等)的含义; ### 配置根appender ### # 输出到以下这些定义的地方 console, fileAppender, dailyRollingFile, ROLLING_FILE, DATABASE, MAIL
# 这些名字可以自己起
log4j.rootLogger = debug,console,fileAppender,dailyRollingFile,ROLLING_FILE,DATABASE,MAIL
### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
# 指这些包/类的日志信息都用 debug 级别
log4j.logger.org.apache=dubug
log4j.logger.java.sql.Connection=dubug
log4j.logger.java.sql.Statement=dubug
log4j.logger.java.sql.PreparedStatement=dubug
log4j.logger.java.sql.ResultSet=dubug
### 配置输出到控制台 ###
# consoleAppender 对应的类
log4j.appender.console = org.apache.log4j.ConsoleAppender
# 输出到控制台所使用的对象
log4j.appender.console.Target = System.out
# 布局类
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# 输出到控制台的日志的模板
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 配置输出到文件 ###
# fileAppender 对应的类
log4j.appender.fileAppender = org.apache.log4j.FileAppender
# 指定输出到 logs/log.log
log4j.appender.fileAppender.File = logs/log.log
# 追加方式写到文件
log4j.appender.fileAppender.Append = true
# 输出到 fileAppender 的日志等级阈值
log4j.appender.fileAppender.Threshold = DEBUG
# 布局
log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
# 打印的日志的模板
log4j.appender.fileAppender.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 配置输出到文件,并且每天都创建一个文件 ###
# DailyRollingFileAppender 对应的类
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
# 指定输出到logs/log.log
log4j.appender.dailyRollingFile.File = logs/log.log
# 追加方式写入日志文件
log4j.appender.dailyRollingFile.Append = true
# 输出到 dailyRollingFile 的日志等级阈值
log4j.appender.dailyRollingFile.Threshold = DEBUG
# 布局类
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
# 输出到 dailyRollingFile 的日志模板
log4j.appender.dailyRollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 配置输出到文件,且大小到达指定尺寸的时候产生一个新的文件 ###
# RollingFileAppender 对应的类
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
# 输出到 ROLLING_FILE 的日志等级阈值
log4j.appender.ROLLING_FILE.Threshold=ERROR
# 输出到rolling.log
log4j.appender.ROLLING_FILE.File=rolling.log
# 追加方式写入日志文件
log4j.appender.ROLLING_FILE.Append=true
# 最大日志大小10K,超过即创建一个新的日志文件
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
# 布局类
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
# 日志输出到 ROLLING_FILE 的模板
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
### 配置输出到邮件 ###(以163邮箱为例)
# SMTPAppender 对应的类
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
# 输出到邮件的日志等级阈值
log4j.appender.MAIL.Threshold=ERROR
# 缓存数
log4j.appender.MAIL.BufferSize=10
# 发件人
log4j.appender.MAIL.From=XXXXX@163.com
# SMTP服务器
log4j.appender.MAIL.SMTPHost=smtp.163.com
# 邮箱用户名
log4j.appender.MAIL.SMTPUsername=XXXXX@163.com
# 是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息
log4j.appender.MAIL.SMTPDebug=false
# 邮箱的SMTP授权码
log4j.appender.MAIL.SMTPPassword=填写你获取到的SMTP授权码
# 邮件主题
log4j.appender.MAIL.Subject=Log4J Message
# 收件人
log4j.appender.MAIL.To=XXXXXX@XXX.com
# 布局类
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
# 输出到邮件的日志模板
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
### 配置输出到数据库 ###
# JDBCAppender 对应的类
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
# 数据库链接url
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/mydb
# 数据库驱动类
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
# 数据库用户名
log4j.appender.DATABASE.user=root
# 数据库密码
log4j.appender.DATABASE.password=root
# 发送给数据库的sql
log4j.appender.DATABASE.sql=INSERT INTO log4j (app, level, message) VALUES ('XXX', '%p', '[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
# 布局类
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
# 发送到数据库的日志模板
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 发送给数据库的日志等级阈值
log4j.appender.DATABASE.Threshold=ERROR
最后附上ConversionPattern中各种符号的含义:
# -X号: X信息输出时左对齐; # %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, # %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 # %r: 输出自应用启动到输出该log信息耗费的毫秒数 # %c: 输出日志信息所属的类目,通常就是所在类的全名 # %t: 输出产生该日志事件的线程名 # %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10) # %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 # %%: 输出一个"%"字符 # %F: 输出日志消息产生时所在的文件名称 # %L: 输出代码中的行号 # %m: 输出代码中指定的消息,产生的日志具体信息 # %n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行