2016年2月2日 星期二

log4j1 簡易教學

參考文件API,基本上只有API有幫助,我大部分還是在網路上找一些神人的文章試著用,也不知道為什麼那一些神人知道要這樣寫,反正可以run就是了

這是目前找到較完整的網站

pom.xml

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>



※語法

App.java

public class App {
    static Logger logger = Logger.getLogger("1234");
    
    public static void main(String[] args) {
        String p = 
        "c- %c %n" + 
        "C- %C %n" +
        "d- %d %n" + 
        "F- %F %n" + 
        "l- %l %n" + 
        "L- %L %n" + 
        "m- %m %n" +
        "M- %M %n" +
        "p- %p %n" +
        "r- %r %n" + 
        "t- %t %n" +
        "x- %x %n" +
        "X- %X %n" +
        "%%- %% %n" +
        "[%5c] %n" +
        "[%3c] %n" +
        "[%-5c] %n" +
        "[%-3c] %n" +
        "[%.3c] %n" +
        "[%5.3c] %n" +
        "[%5.4c] %n" +
        "[%-5.3c] %n" +
        "[%-5.4c] \n%n";
    
        PatternLayout pl = new PatternLayout(p);
        ConsoleAppender ca = new ConsoleAppender(pl);
        logger.addAppender(ca);
    
        logger.setLevel(Level.FATAL);
        // ALL(6) < TRACE(6) < DEBUG(5) < INFO(4) < WARN(3) < ERROR(2) < FATAL(1) < OFF(0)
    
        logger.trace("TRACE(6)");
        logger.debug("DEBUG(5)");
        logger.info("INFO(4)");
        logger.warn("WARN(3)");
        logger.error("ERROR(2)");
        logger.fatal("FATAL(1)");
    }
}

※結果:
c- 1234
C- SpringTest.log4j.App
d- 2016-02-02 15:45:44,219
F- App.java
l- SpringTest.log4j.App.main(App.java:53)
L- 53
m- FATAL(1)
M- main
p- FATAL
r- 0
t- main
x-
X- {}
%- %
[ 1234]
[1234]
[1234 ]
[1234]
[234]
[234]
[ 1234]
[234]
[1234 ]

※setLevel下面註解的圓括號的數字的意思是說,假設我設定WARN,那WARN層級以下(包括自己)會顯示,如最下面的六行,trace、debug、info雖然有寫,但不會顯示,如果setLevel不寫就等同OFF,不會顯示

※二個「%」等於一個%,如果少打會出類似「log4j:ERROR Unexpected char [ ] at position 107 in conversion patterrn.」的錯



※設定檔

要放在src下,但如果是maven,就要放在src/main/java下,有兩個檔案,二擇一即可


log4j.properties

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
    
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
    
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n



log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
        </layout>
    </appender>
    
    <root>
        <priority value="debug" />
        <appender-ref ref="console" />
    </root>
</log4j:configuration>



App.java

// PropertyConfigurator.configure("src/main/java/log4j.properties");
    
logger.trace("TRACE(6)");
logger.debug("DEBUG(5)");
logger.info("INFO(4)");
logger.warn("WARN(3)");
logger.error("ERROR(2)");
logger.fatal("FATAL(1)");

※如果設定檔不想放在預設地點,或者不想叫log4j,可以打開註解,但xml我試過沒用,還沒找到辦法



※輸出到指定地點

FileAppender fa = null;
try {
    fa = new FileAppender(new SimpleLayout(), "log4j1.txt", false);
} catch (IOException e) {
    e.printStackTrace();
}
    
logger.addAppender(fa);
logger.setLevel(Level.FATAL);
    
logger.trace("TRACE(6)");
logger.debug("DEBUG(5)");
logger.info("INFO(4)");
logger.warn("WARN(3)");
logger.error("ERROR(2)");
logger.fatal("FATAL(1)");

※log4j1會放在workspace\專案名稱下,或者直接打D:也是可以的,最後的boolean是說,如果已經有檔案存在,要不要覆寫

沒有留言:

張貼留言