Log4j 简介及初步应用
使用2.5版本有问题,暂时没有解决,也许是JDK版本不兼容的原因。因此使用的是log4j-1.2.8.jar
1、三个组件
日志记录器 —— Logger、输出目的地 —— Appender、输出格式 —— Layout ;
一个logger可以对应多个appender,一个appender只能对应一个layout,必须对应一个layout。
入门级程序:
1 import java.io.File; 2 import java.io.IOException; 3 //import org.apache.logging.log4j.core.Logger; 4 import org.apache.log4j.*; 5 import javax.servlet.ServletConfig; 6 import javax.servlet.ServletContext; 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 /** 12 * Servlet implementation class Log4JInitServlet 13 */ 14 public class Log4JInitServlet extends HttpServlet{ 15 private static Logger logger ; 16 public Log4JInitServlet() { 17 super(); 18 // TODO Auto-generated constructor stub 19 } 20 /** 21 * @see Servlet#init(ServletConfig) 22 */ 23 public void init(ServletConfig config) throws ServletException { 24 super.init(config); 25 try{ 26 System.out.println("当前路径默认=======" + System.getProperty("user.dir")); 27 28 logger=Logger.getLogger(Log4JInitServlet.class); 29 PropertyConfigurator.configure("C:\\myTestJava\\Log4JWeb\\WebRoot\\ini\\log4j.properties"); 30 logger.info("Info: this is info;"); 31 logger.debug("Debug: this is Debug;"); 32 logger.error("Error: this is Error;"); 33 System.out.println("------------------Init success"); 34 }catch(Exception e){ 35 System.out.println("Warning:there is an error:" + e.getMessage()); 36 } 37 } 38 /** 39 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 40 */ 41 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 42 // TODO Auto-generated method stub 43 } 44 45 /** 46 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 47 */ 48 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 49 // TODO Auto-generated method stub 50 } 51 }
1 ### 设置### 2 log4j.rootLogger = debug,stdout,D,E 3 4 ### 输出信息到控制抬 ### 5 log4j.appender.stdout = org.apache.log4j.ConsoleAppender 6 log4j.appender.stdout.Target = System.out 7 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 8 log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n 9 10 ### 输出DEBUG 级别以上的日志到=C://logs/log.log ### 11 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 12 log4j.appender.D.File = C://logs/log.log 13 log4j.appender.D.Append = true 14 log4j.appender.D.Threshold = DEBUG 15 log4j.appender.D.layout = org.apache.log4j.PatternLayout 16 log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r]-[%c-%l]-[ %p ] %m%n 17 18 ### 输出ERROR 级别以上的日志到=E://logs/error.log ### 19 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 20 log4j.appender.E.File =C://logs/error.log 21 log4j.appender.E.Append = true 22 log4j.appender.E.Threshold = ERROR 23 log4j.appender.E.layout = org.apache.log4j.PatternLayout 24 log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r]-[%c-%l]-[ %p ] %m%n
配置文件的格式一般为:
1、首先配置根Logger
#配置根Logger
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
样例:log4j.rootLogger = debug,stdout,D,E
2、配置输出的目的地 及 相关属性
#配置日志信息输出目的地(Appender)
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.optionN = valueN
样例:-------
3、配置输出格式
#配置日志信息的格式(Layout)
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.optionN = valueN
自定义格式输出的参数格式含义:
格式名 含义
- %c 输出日志信息所属的类的全名
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
- %f 输出日志信息所属的类的类名
- %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行 (Log4JInitServlet.init(Log4JInitServlet.java:31))类名.函数名
- %m 输出代码中指定的信息,如log(message)中的message
- %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
- %r 输出自应用启动到输出该日志信息所耗费的毫秒数
- %t 输出产生该日志事件的线程名
appender的种类:
org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置 文件大小达到指定大小的时候,产生一个新文件:
### 输出DEBUG 级别以上的日志到=C://logs/log.log 指定文件大小### log4j.appender.D = org.apache.log4j.RollingFileAppender log4j.appender.D.File = C://logs/log.log log4j.appender.D.MaxFileSize = 2KB log4j.appender.D.MaxBackupIndex=100 log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r]-[%c-%l]-[ %p ] %m%n
配置输出到MySQL数据库:
##将日志信息写入数据库### log4j.appender.DB = org.apache.log4j.jdbc.JDBCAppender ##设置缓存大小,就是当有2条日志信息是才忘数据库插一次 如果只有1条,插不进去数据库的; log4j.appender.DB.BufferSize=2 ##设置要将日志插入到数据库的驱动 log4j.appender.DB.driver=com.mysql.jdbc.Driver ##URL 用户名 密码 log4j.appender.DB.URL=jdbc:mysql://192.168.61.28:3306/encysys48 log4j.appender.DB.user=encysys48 log4j.appender.DB.password=encysys48 log4j.appender.DB.Threshold = DEBUG log4j.appender.DB.layout = org.apache.log4j.PatternLayout ###指定SQL语句在每次记录事件发生的时间执行。这可能是INSERT,UPDATE或DELETE log4j.appender.DB.sql=insert into jp_fullnote1 (HF_SERIALID,HF_ORDERID,AGENT_ID,CHARGE_PHONE,CHARGE_SERIALID,PHONE_RESMONEY,CARD_PWD) values ('%X{userId}','%X{userName}','%C','%M','%d{yyyy-MM-dd HH:mm:ss}','%p','%m')