java中使用log4j日誌檔案,讀取配置檔案的方式
publicvoid init() {//該方法必須在所有log4j使用前呼叫
最好時初始化時就呼叫執行 載入好配置
Properties props =new Properties();//建立一個系統引數物件
try {
FileInputStream istream =new FileInputStream(filePath);//讀取配置檔案(log4j.properties)位置
props.load(istream);//將配置載入到系統引數物件中
istream.close();
PropertyConfigurator.configure(props);//裝入log4j配置資訊 } catch (IOException e) {
toPrint(
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>