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 }
log4j_servlet
 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   

自定义格式输出的参数格式含义:

    格式名   含义   

  1. %c         输出日志信息所属的类的全名   
  2. %d         输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28   
  3. %f          输出日志信息所属的类的类名   
  4. %l          输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行  (Log4JInitServlet.init(Log4JInitServlet.java:31))类名.函数名
  5. %m        输出代码中指定的信息,如log(message)中的message   
  6. %n         输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”   
  7. %p         输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推   
  8. %r          输出自应用启动到输出该日志信息所耗费的毫秒数   
  9. %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')
将日志信息 写入数据库的配置
原文地址:https://www.cnblogs.com/tengpan-cn/p/5159947.html