1. 程式人生 > >java中使用log4j日誌檔案,讀取配置檔案的方式

java中使用log4j日誌檔案,讀取配置檔案的方式

publicvoid init() {//該方法必須在所有log4j使用前呼叫 最好時初始化時就呼叫執行 載入好配置
            


             Properties props 
=new Properties();//建立一個系統引數物件
             
try {
                 FileInputStream istream 
=new FileInputStream(filePath);//讀取配置檔案(log4j.properties)位置
                 props.load(istream);//將配置載入到系統引數物件中
                 istream.close();
                 //String logFile = prefix + props.getProperty("log4j.appender.file.File");//設定路徑可以不經配置                 //props.setProperty("log4j.appender.file.File",logFile);//可以不配置
                 PropertyConfigurator.configure(props);
//裝入log4j配置資訊             } catch (IOException e) {
                 toPrint(
"Could not read configuration file ["+ filePath +"].");
                 toPrint(
"Ignoring configuration file ["+ filePath +"].");
                 
return;
             }

         }

//System.out.println(System.getProperty("user.dir")); 獲取當前的絕對路徑

實際例子:


其中程式碼 log4j.properties中的配置

# Define the property
log.dir=../logs
log.appender=my.ceshi.data.log4j.LogRollingAppender 他的父類RollingAppender只支援日誌分割(大小控制和數量控制)不能以時間命名日誌

log.appender=my.ceshi.data.log4j.LogDailyRollingAppender 他的父類DailyRollingAppender只支援按照天或者月備份日誌也就是以時間命名日誌(不支援日誌分割(大小控制和數量控制))
log.max.file.size=100KB
log.max.backup.index=4


log4j.rootLogger=all,debug,info,warn,error


#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS}:[%-5p] method:%l%n%m%n


log4j.appender.debug=${log.appender}
#log4j.appender.debug=com.LogDailyRollingAppender
log4j.appender.debug.MaxFileSize=${log.max.file.size}
log4j.appender.debug.MaxBackupIndex=${log.max.backup.index}
log4j.appender.debug.File=${log.dir}/test_debug.log
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d %t %p[%c]-%m%n
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.append=true


log4j.appender.info=${log.appender}
#log4j.appender.info=com.LogDailyRollingAppender
log4j.appender.info.MaxFileSize=${log.max.file.size}
log4j.appender.info.MaxBackupIndex=${log.max.backup.index}
log4j.appender.info.File=${log.dir}/test_info.log
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d %t %p[%c]-%m%n
log4j.appender.info.Threshold=INFO
log4j.appender.info.append=true


log4j.appender.warn=${log.appender}
#log4j.appender.warn=com.LogDailyRollingAppender
log4j.appender.warn.MaxFileSize=${log.max.file.size}
log4j.appender.warn.MaxBackupIndex=${log.max.backup.index}
log4j.appender.warn.File=${log.dir}/test_warn.log
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=%d %t %p[%c]-%m%n
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.append=true


log4j.appender.error=${log.appender}
#log4j.appender.error=com.LogDailyRollingAppender
log4j.appender.error.MaxFileSize=${log.max.file.size}
log4j.appender.error.MaxBackupIndex=${log.max.backup.index}
log4j.appender.error.File=${log.dir}/test_error.log
log4j.appender.error.Threshold=ERROR
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d %t %p[%c]-%m%n
log4j.appender.error.append=true

其中日誌配置可參考http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html

其中類 LogDailyRollingAppender.java 的程式碼

package my.ceshi.data.log4j;


import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Priority;


/**
 * 日誌級別工具類
 */
public class LogDailyRollingAppender extends DailyRollingFileAppender{


/**
* 只打印等於當前log定義級別的log。
*/
public boolean isAsSevereAsThreshold(Priority priority) {
return this.getThreshold().equals(priority);
}
}

其中LogRollingAppender.java的程式碼

package my.ceshi.data.log4j;


import org.apache.log4j.Priority;
import org.apache.log4j.RollingFileAppender;


public class LogRollingAppender extends RollingFileAppender {


/**
* 只打印等於當前log定義級別的log。
*/
public boolean isAsSevereAsThreshold(Priority priority) {
return this.getThreshold().equals(priority);
}


}

測試方法類 Test.java類程式碼

package my.ceshi.data.log4j;


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;


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


public class Test {


    private static final Logger log = Logger.getLogger(Test.class);




    public static void main(String[] args) throws IOException, InterruptedException {
        // TODO Auto-generated method stub
        init();
        while (true) {
            log.debug(
                    "這是debug列印的日誌  充字數曾經介紹過 KolourPaint,一款和 Windows 下 “畫圖” 概念相同的簡易畫圖工具。不過 KolourPaint 是 KDE 下的");
            log.info(
                    "這是info列印的日誌   充字數曾經介紹過 KolourPaint,一款和 Windows 下 “畫圖” 概念相同的簡易畫圖工具。不過 KolourPaint 是 KDE 下的");
            log.warn(
                    "這是warn列印的日誌  充字數曾經介紹過 KolourPaint,一款和 Windows 下 “畫圖” 概念相同的簡易畫圖工具。不過 KolourPaint 是 KDE 下的");
            log.error(
                    "這是error列印的日誌   充字數曾經介紹過 KolourPaint,一款和 Windows 下 “畫圖” 概念相同的簡易畫圖工具。不過 KolourPaint 是 KDE 下的");
            Thread.sleep(2000);
        }


    }


    public static void init() throws IOException {
        String s = System.getProperty("user.dir");
        FileInputStream in = new FileInputStream(new File(s + "/log4j.properties"));
        Properties p = new Properties();
        p.load(in);
        in.close();
        PropertyConfigurator.configure(p);
    }


}

其中的pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>


<groupId>my.ceshi</groupId>
<artifactId>data</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>


<name>data</name>
<url>http://maven.apache.org</url>


<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<!--配置的代理伺服器-->
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://***.168.***.***:8181/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>


<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://***.168.***.***:8181/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>


<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
<!-- redis相關 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- log4j日誌檔案 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<!-- testNg -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8</version>
<scope>test</scope>
</dependency>
<!-- StringUtils -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.opensymphony.quartz/quartz -->
<dependency>
<groupId>org.opensymphony.quartz</groupId>
<artifactId>quartz</artifactId>
<version>1.6.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging 
quartz依賴的包 -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-collections/commons-collections 
quartz依賴的包 -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>


</dependencies>
</project>