程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 應用Log4j為項目設置裝備擺設日記輸入運用詳解和示例演示的完成剖析

應用Log4j為項目設置裝備擺設日記輸入運用詳解和示例演示的完成剖析

編輯:關於JAVA

應用Log4j為項目設置裝備擺設日記輸入運用詳解和示例演示的完成剖析。本站提示廣大學習愛好者:(應用Log4j為項目設置裝備擺設日記輸入運用詳解和示例演示的完成剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是應用Log4j為項目設置裝備擺設日記輸入運用詳解和示例演示的完成剖析正文


Log4j組件組成 

Log4j由三個主要的組件組成:

1.日記信息的優先級(Logger)

2.日記信息的輸入目標地(Appender)

3.日記信息的輸入格局(Layout)。

概要:

日記信息的優先級從高到低有ERROR、WARN、 INFO、DEBUG,分離用來指定這條日記信息的主要水平;

日記信息的輸入目標地指定了日記將打印到掌握台照樣文件中;

而輸入格局則掌握了日記信息的顯示內容。

Log4j引見

  Log4j是 Apache的一個開放源代碼項目,經由過程應用Log4j,我們可以掌握日記信息保送的目標地是掌握台、文件、GUI組件、乃至是套接口辦事器、NT的事宜記載器、UNIX Syslog守護過程等;我們也能夠掌握每條日記的輸入格局,經由過程界說每條日記信息的級別,我們可以或許加倍過細地掌握日記的生成進程。log4j-- log for java (java的日記) .

Log4j下載地址: http://logging.apache.org/log4j/2.x/download.html

Log4j設置裝備擺設文件的格局

Log4j支撐兩種設置裝備擺設文件格局:

1. XML格局的文件

2. properties格局的文件

也能夠完整不應用設置裝備擺設文件,而是在代碼中設置裝備擺設Log4j情況。然則,應用設置裝備擺設文件將使您的運用法式加倍靈巧。

Log4j界說設置裝備擺設文件

1.設置裝備擺設根Logger

其語法為:

log4j.rootLogger = [ level ] , appenderName, appenderName, …

參數解釋:  

level 是日記記載的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或許您界說的級別。

Off: 最高級級,用於封閉一切日記記載

Fatal: 指出每一個嚴重的毛病事宜將會招致運用法式的加入。

Error: 指出固然產生毛病事宜,但依然不影響體系的持續運轉。

Warn: 注解會湧現潛伏的毛病情況

Info: 普通用在粗粒度級別上,強調運用法式的運轉全程

Debug: 普通和在粗粒度級別上,強調運用法式的運轉全程。

All: 最高等級,用於翻開一切日記記載。

Log4j建議只應用四個級別,優先級從高到低分離是ERROR、WARN、INFO、DEBUG。經由過程在這裡界說的級別,您可以掌握到運用法式中響應級其余日記信息的開關。

appenderName就是指日記信息輸入到哪一個處所,可以同時指定多個輸入目標地。

2.設置裝備擺設日記信息輸入目標地Appender

其語法為:

log4j.appender.appenderName = fully.qualified.name.of.appender.class  

log4j.appender.appenderName.option1 = value1  

...  

log4j.appender.appenderName.option = valueN

Log4j供給的appender有以下幾種:

  org.apache.log4j.ConsoleAppender(掌握台)

  org.apache.log4j.FileAppender(文件)

  org.apache.log4j.DailyRollingFileAppender(天天發生一個日記文件)

  org.apache.log4j.RollingFileAppender(文件年夜小達到指定尺寸的時刻發生新文件)

  org.apache.log4j.WriterAppender(將日記信息以流格局發送就任意指定的處所)

 

3.設置裝備擺設日記信息的格局

語法為:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1 …

log4j.appender.appenderName.layout.option = valueN

Log4j供給的layout有以下幾種:

  org.apache.log4j.HTMLLayout(以HTML表格情勢結構),

  org.apache.log4j.PatternLayout(可以靈巧地指定結構形式),

  org.apache.log4j.SimpleLayout(包括日記信息的級別和信息字符串),

  org.apache.log4j.TTCCLayout(包括日記發生的時光、線程、種別等等信息)

Log4J采取相似C說話中的printf函數的打印格局格局化日記信息,打印參數以下:

%m 輸入代碼中指定的新聞  

%p 輸入優先級,即DEBUG,INFO,WARN,ERROR,FATAL   

%r 輸入自運用啟動到輸入該log信息消耗的毫秒數   

%c 輸入所屬的類目,平日就是地點類的全名   

%t 輸入發生該日記事宜的線程名   

%n 輸入一個回車換行符,Windows平台為“rn”,Unix平台為“n”   

%d 輸入日記時光點的日期或時光,默許格局為ISO8601,也能夠在厥後指定格局,好比:%d{yyy MMM dd HH:mm:ss,SSS},輸入相似:2002年10月18日 22:10:28,921   

%l 輸入日記事宜的產生地位,包含類目名、產生的線程,和在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)

%x: 輸入和以後線程相干聯的NDC(嵌套診斷情況),特別用到像java servlets如許的多客戶多線程的運用中。

%%: 輸入一個”%”字符 %F: 輸入日記新聞發生時地點的文件稱號

%L: 輸入代碼中的行號

%m: 輸入代碼中指定的新聞,發生的日記詳細信息

%n: 輸入一個回車換行符,Windows平台為”\r\n”,Unix平台為”\n”輸入日記信息換行 可以在%與形式字符之間加上潤飾符來掌握其最小寬度、最年夜寬度、和文本的對齊方法。

如:

1)%20c:指定輸入category的稱號,最小的寬度是20,假如category的稱號小於20的話,默許的情形下右對齊。

2)%-20c:指定輸入category的稱號,最小的寬度是20,假如category的稱號小於20的話,”-”號指定左對齊。

3)%.30c:指定輸入category的稱號,最年夜的寬度是30,假如category的稱號年夜於30的話,就會將右邊多出的字符截失落,但小於30的話也不會有空格。

4)%20.30c:假如category的稱號小於20就補空格,而且右對齊,假如其稱號擅長30字符,就從右邊交遠銷出的字符截失落。

log4j.xml的設置裝備擺設方法

View Code

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="appender1"
        class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="logfile08.html" />
        <param name="MaxFileSize" value="1MB" />
        <param name="MaxBackupIndex" value="5" />
        <layout class="org.apache.log4j.HTMLLayout">
        </layout>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="appender1" />
    </root>
</log4j:configuration>

代碼中應用Log4j

  在法式中應用 Log4j之前,起首要將commons-logging.jar和logging-log4j-1.2.9.jar導入到classpath中,並將 log4j.properties放於src根目次中。 在類中應用log4j,起首聲明一個靜態變量 Logger logger=Logger.getLog("classname").如今便可以應用了。

用法以下:logger.debug("debug message")或許logger.info("info message").

1.獲得記載器 

  應用Log4j,第一步就是獲得日記記載器,這個記載器將擔任掌握日記信息。

其語法為:

  public static Logger getLogger( String name)

  經由過程指定的名字取得記載器,假如需要的話,則為這個名字創立一個新的記載器。Name普通取本類的名字,好比:

  static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

 

2.讀取設置裝備擺設文件 

  當取得了日記記載器以後,第二步將設置裝備擺設Log4j情況,其語法為:

  BasicConfigurator.configure (): 主動疾速地應用缺省Log4j情況。

  PropertyConfigurator.configure ( String configFilename) :讀取應用Java的特征文件編寫的設置裝備擺設文件。

  DOMConfigurator.configure ( String filename ) :讀取XML情勢的設置裝備擺設文件。

 

3.拔出記載信息(格局化日記信息) 

  當上兩個需要步調履行終了,您便可以輕松地應用分歧優先級其余日記記載語句拔出到您想記載日記的任何處所,語法以下:

   Logger.debug ( Object message ) ;

   Logger.info ( Object message ) ;

   Logger.warn ( Object message ) ;

   Logger.error ( Object message ) ; 

 

法式演示

1.應用法式停止日記信息輸入

package org.demo.log4j.dennisit;

 import java.io.IOException;

 import org.apache.commons.logging.impl.Log4JLogger;
 import org.apache.log4j.BasicConfigurator;
 import org.apache.log4j.FileAppender;
 import org.apache.log4j.Layout;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.log4j.SimpleLayout;

 /**
  *
  *  @version : 1.1
  * 
  *  @author  : 蘇若年    <a href="mailto:[email protected]">發送郵件</a>
  *   
  *  @since      : 1.0        創立時光:    2013-1-1        下晝03:19:42
  *    
  *  @function: 經由過程代碼將日記輸入
  *
  */

 public class Log4jPrintByCode {

     private static Logger logger = Logger.getLogger(Log4jPrintByCode.class);

     private Layout layout = new SimpleLayout();
     private FileAppender fileAppender;

 
     //應用結構依附,創立對象時初始化
     public Log4jPrintByCode(Layout layout, Level level,String distDir){

         BasicConfigurator.configure();        //應用默許的設置裝備擺設信息,不須要寫log4j.properties

         try {
             init(layout,level, distDir);
         } catch (Exception e) {
             e.printStackTrace();
         }

     }

    
     public void init(Layout layout, Level level,String distDir) throws Exception{

         logger.setLevel(level);                //設置日記輸入級別
         fileAppender = new FileAppender(layout,distDir,false);
         logger.addAppender(fileAppender);    //添加輸入端

     }

    
     public static void main(String[] args) {

         SimpleLayout layout = new SimpleLayout();
         String logDir = "log4jcode.Log";
         Log4jPrintByCode log4jCode = new Log4jPrintByCode(layout,Level.INFO,logDir);

        
         //上面信息將被輸入
         log4jCode.logger.info("log info print by log4j");
         log4jCode.logger.warn("log warn print by log4j");
         log4jCode.logger.error("log error print by log4j");

     }

 
     public Layout getLayout() {
         return layout;
     }

     public void setLayout(Layout layout) {
         this.layout = layout;
     }

     public FileAppender getFileAppender() {
         return fileAppender;
     }

     public void setFileAppender(FileAppender fileAppender) {
         this.fileAppender = fileAppender;
     }

    

 }

為了進步效力,我們可以在寫日記前增長斷定:

// 記載debug級其余信息
if (logger.isDebugEnabled()) {
    logger.debug("This is debug message from Dao.");
}

// 記載info級其余信息
if (logger.isInfoEnabled()) {
    logger.info("This is info message from Dao.");
}

假如這個類作為基類,如J2EE中的BaseDao、BaseAction、BaseService等等,則我們可以將各層的日記信息分類輸入到各個文件。

2.Log4J將統一個日記信息輸入到多個目標地

/* 創立數據庫 */
create database db_log4j;

/* 切換數據庫 */
use  db_log4j;

/* 日記信息表 */
create table tb_log(
    logId int not null auto_increment comment '流水號' ,
    createDate varchar(45) default null comment '日記生成時光' ,
    thread varchar(45) default null comment '以後線程',
    level varchar(45) default null comment '以後日記級別' ,
    class varchar(45) default null comment '生成日記的類',
    message varchar(245) default null comment '日記詳細信息',
    primary key(logId)
);

運用實例將日記信息同時輸入到掌握台,文件和數據庫中.

創立數據庫與 表

/* 創立數據庫 */
create database db_log4j;

/* 切換數據庫 */
use  db_log4j;

/* 日記信息表 */
create table tb_log(
    logId int not null auto_increment comment '流水號' ,
    createDate varchar(45) default null comment '日記生成時光' ,
    thread varchar(45) default null comment '以後線程',
    level varchar(45) default null comment '以後日記級別' ,
    class varchar(45) default null comment '生成日記的類',
    message varchar(245) default null comment '日記詳細信息',
    primary key(logId)
);

設置裝備擺設文件log4j.properties

#界說3個輸入端
log4j.rootCategory=INFO,A1,A2,A3

#界說A1輸入到掌握器
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#界說A1的結構形式為PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# 界說A1的輸入格局
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n

#界說A2輸入到文件
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#界說A2輸入到哪一個文件
log4j.appender.A2.File=./log/sysLog.log
#界說A2輸入文件的最年夜長度
log4j.appender.A2.MaxFileSize = 1KB
#界說A2的備份文件數
log4j.appender.A2.MaxBackupIndex = 3
#界說A2的結構形式為PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#界說A2的輸入形式
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n

#界說A3輸入到數據庫
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=root
#界說A3的結構和履行的SQL語句
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERT INTO tb_log(createDate,thread,level,class,message) values('%d','%t','%-5p','%c','%m')

Java測試代碼

package org.demo.log4j.dennisit;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 *
 *  @version : 1.1
 * 
 *  @author  : 蘇若年    <a href="mailto:[email protected]">發送郵件</a>
 *   
 *  @since      : 1.0        創立時光:    2013-1-1        下晝04:13:59
 *    
 *  @function: 經由過程設置裝備擺設文件掌握日記信息輸入到多個目標端
 *
 */

public class Log4jPrintByConfigure {

    private static Logger logger = Logger.getLogger(Log4jPrintByConfigure.class);

    public static void main(String[] args) throws Exception {

        //加載log設置裝備擺設文件log4j.properties
        PropertyConfigurator.configure("configure/log4j.properties");//文件寄存在src同目次的configure文件夾下

        //假如放在src下的話,參數應為"bin/log4j.properties"或許"src/log4j.properties", 建議以bin為准

        //以下信息將被打印輸入
        logger.debug("logger print DEBUG messgae");
        logger.info("logger print INFO message");
        logger.warn("logger print WARN message");
        logger.error("logger print ERROR message");
        logger.fatal("Here is FATAL message");
    }

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved