常用輸出格式

%c   列出logger名字空間的全稱,如加上{<層數>}表示出從最內層算起的指定層數的名字空間
%X  按MDC(Mapped Diagnostic Context,線程映射表)輸出日志。通常用于多個客戶端連接同一臺服務器,方便服務器區分是那個客戶端訪問留下來的日志。
%p  日志信息級別
%d   %d{<日期格式>}:日志信息產生時間,使用ISO8601定義的日期格式
%C   日志信息所在地(全限類名)
%m   產生的日志具體信息
%n    輸出日志信息換行
%F 顯示調用logger的源文件名
%l     輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數
%L    顯示調用logger的代碼行
%M   顯示調用logger的方法名
%r     顯示從程序啟動時到記錄該條日志時已經經過的毫秒數
%t     輸出產生該日志事件的線程名
%% 顯示一個




獲取logger
Logger.getRootLogger()  獲取根logger
Logger.getLogger(String name)獲取子logger
Logger.getLogger(Class clazz)或
Logger.getLogger(clazz.getName())

設置日志級別(.setLevel(int,Exception))
Level.ALL打開所有日志
Level.DEBUG 用于調試
Level.INFO 用于運行過程
Level.WARN 用于潛在的錯誤
Level.ERROR 用于錯誤事件
Level.FATAL 用于嚴重錯誤時間
Level.OFF 關閉所有日志

輸出端Appender(.addAppender(Appender).setAdditivity(boolean additive)是否覆蓋)
org.apache.log4j.ConsoleAppender  輸出到控制臺
 targer:
  ConsoleAppender.SYSTEM_OUT(Default)
  ConsoleAppender.SYSTEM_ERR
 public ConsoleAppender(Layout)
 public ConsoleAppender(Layout,String targer)
org.apache.log4j.FileAppender   輸出到文件
 public FileAppender(Layout,String fileName)
 public FileAppender(Layout,String fileName,boolean append)是否覆蓋
org.apache.log4j.DailyRollingFileAppender 輸出到文件,每天一個新文件
org.apache.log4j.RollingFileAppender  輸出到文件,自動新增改名
 public RollingFileAppender(Layout,String fileName)
 void setMaxBackupIndex(int index) 設置日志文件最大備份數
 void setMaximumFileSize(long size) 設置日志文件最大尺寸
org.apache.log4j.WriterAppender  流格式輸出到任意地方
org.apache.log4j.JDBCAppender  輸出到數據庫

日志格式化(Layout)
%c   類全名
%d   時間
%f   類名
%l   位置
%m   信息
%n   換行
%p   級別
%r   耗時
%t   線程名

public PatternLayout() 使用默認設置DEFAULT_CONVERSION_PATTERN 只打印信息
public PatternLayout(String)使用自定義的pattern構造一個PatternLayout
void setConversionPattern(String)  設置日志格式
HTMLLayout
SimpleLayout


5.
1.BasicConfigurator.configure()
 PatternLayout p = new PatternLayout("%p [%t] %c (%F:%L) - %m%n");  
 ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT); 
 root.addAppender(a);         
 rootLogger.setLevel(Level.DEBUG);       
2.PropertyConfigurator.configure("/help/example.properties")
  String resource = "/help/example.properties";
  URL configFileResource = Log4J.class.getResource(resource);
  PropertyConfigurator.configure(configFileResource);
3.DOMConfigurator.configure("/help/example.xml")
xml declaration and dtd
|
log4j:configuration
|
+-- appender (name, class)
| |
| +-- param (name, value)
| +-- layout (class)
| |
| +-- param (name, value)
+-- logger (name, additivity)
| |
| +-- level (class, value)
| | |
| | +-- param (name, value)
| +-- appender-ref (ref)
+-- root
|
+-- param (name, class)
+-- level
| |
| +-- param (name, value)
+-- appender-ref (ref)


0.log4j.properties模板
log4j.rootLogger=info,CONSOLE,RFILE,FILE,DB      設置級別和三個輸出端
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= %4p [%t] (%F:%L) - %m%n 

log4j.appender.FILE=org.apache.log4j.FileAppender     
log4j.appender.FILE.File=/help/my.properties       目標文件
log4j.appender.FILE.Append=false        是否追加
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout     布局模式
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %c:%L - %m%n   格式化布局

log4j.appender.RFILE=org.apache.log4j.RollingFileAppender     
log4j.appender.RFILE.File=/help/my.properties       目標文件
log4j.appender.RFILE.MaxFileSize=1KB        最大長度
log4j.appender.RFILE.MaxBackupIndex=3       最多備份
log4j.appender.RFILE.layout=org.apache.log4j.PatternLayout     布局模式
log4j.appender.RFILE.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %c:%L - %m%n   格式化布局

log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender     
log4j.appender.DB.URL=jdbc:oracle:thin:@127.0.0.1:1521:mumu     URL
log4j.appender.DB.driver=oracle.jdbc.driver.OracleDriver     驅動
log4j.appender.DB.user=liulibo         用戶名
log4j.appender.DB.password=liulibo        密碼
log4j.appender.DB.layout=org.apache.log4j.PatternLayout     布局模式
log4j.appender.DB.layout.ConversionPattern=insert into log4j(createdate,thread,level_,class,message) values(\'%d\',\'%t\',\'%-5p\',\'%c\',\'%m\')

create table log4j(createdate varchar2(32),thread varchar2(32),level_ varchar2(32),class varchar2(32),message varchar2(32));
 
0.XML模板
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration>
       
 <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n"/>
  </layout>
 </appender>
 
 <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender">
     <param name="Append" value="false"/>
     <param name="MaxFileSize" value="1KB"/>
     <param name="File" value="dom/my.log"/>
     <param name="MaxBackupIndex" value="3"/>
     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n"/>
     </layout>
 </appender>
 
 <appender name="JDBCAppender" class="org.apache.log4j.jdbc.JDBCAppender">
     <param name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:mumu"/>
     <param name="user" value="liulibo"/>
     <param name="password" value="liulibo"/>
     <param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="insert into log4j(createdate,thread,level_,class,message) values(\'%d\',\'%t\',\'%-5p\',\'%c\',\'%m\')"/>
     </layout>
 </appender>
 
 <root>
  <priority value ="debug" />
  <appender-ref ref="ConsoleAppender"/>
  <appender-ref ref="RollingFileAppender"/>
  <appender-ref ref="JDBCAppender"/>
 </root>

</log4j:configuration>

應用
 web.xml
  <context-param>
   <param-name>props</param-name>
   <param-value>/WEB-INF/log4j.properties</param-value>
  </context-param>
 
  <listener>
   <listener-class>cart.listener.SCServletContextListener</listener-class>
  </listener>
 初始化方法中添加
 private void initLog4j(ServletContext context){
   String prefix = context.getRealPath("/");
   System.out.println("prefix:"+prefix);
   String props = context.getInitParameter("props");
  if(props != null) {
   PropertyConfigurator.configure(prefix+props);
  }
  Logger logger = Logger.getLogger(SCServletContextListener.class); 
   }