2017-12-02 64 views
0

我想在此article中提到的log4j中創建自定義佈局。log4j中的自定義模式佈局未被使用

我創建了一個簡單CustomLayout像下面 -

public class CustomLayout extends PatternLayout { 
    public String format(LoggingEvent event) 
    { 
     return "Custom Layout"; 
    } 
} 

一個簡單的自定義添加器看起來像下面

public class DummyAppender extends AppenderSkeleton { 

    private int port; 
    private String apiKey; 

    public int getPort() { 
     return port; 
    } 

    public void setPort(int port) { 
     this.port = port; 
    } 

    public String getApiKey() { 
     return apiKey; 
    } 

    public void setApiKey(String apiKey) { 
     this.apiKey = apiKey; 
    } 

    public void close() { 
    } 

    public boolean requiresLayout() { 
     return false; 
    } 

    @Override 
    protected void append(LoggingEvent arg0) { 
     System.out.println("Logging from Appender " + arg0.getMessage() + " stack"); 
     ThrowableInformation t = arg0.getThrowableInformation(); 
     if(t != null) { 
      System.out.println("Logging from Appender " + Arrays.asList(t.getThrowableStrRep()).size()); 
     } 
    } 
} 

log4j.xml就像下面

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

    <appender name="dummyAppender" class="com.log.DummyAppender"> 
     <param name="Port" value="1234" /> 
     <param name="ApiKey" value="ABCDEGH" /> 
     <layout class="com.log.CustomLayout"> 
     </layout> 
    </appender> 

    <root> 
     <priority value="error" /> 
     <appender-ref ref="dummyAppender" /> 
    </root> 
</log4j:configuration> 

的主類是像下面

public class HelloLogger { 

    private static final Logger logger = LoggerFactory.getLogger(HelloLogger.class); 

    public static void main(String[] args) { 
     logger.info("Hello World"); 
     logger.error("Hello {}. Are u in {}", "Woo", "huhu", new Exception("huhuh876")); 
    } 

} 

運行主類似乎CustomLayout沒有得到使用。

輸出

Logging from Appender Hello Woo. Are u in huhu stack 
Logging from Appender 2 

有人可以讓我知道我做錯了嗎?

+0

您可以分享您使用的pom.xml或您所使用的依賴項嗎 –

+0

您使用的舊Log4j 1.2在2015年夏季已成爲End of Life。已知Log4j 1.2在Java 9中損壞。請遷移到Log4j2。在Log4j2中創建自定義組件更容易且更好。 –

回答

-1

您需要更改您正在使用的記錄器以獲取appender的實例。

請參閱下面的代碼。

import org.apache.log4j.Logger; 

/** 
* Hello world! 
* 
*/ 
public class HelloLogger { 


    private static final Logger logger = Logger.getLogger(HelloLogger.class); 

    public static void main(String[] args) 
    { 

      String s = "Woo"; 
      String s1 = "huhu"; 
      logger.error("Hello "+s+". Are u in "+s1+" "); 

    } 
} 

輸出如下。

從Appender Hello Woo記錄。你在huhu堆棧

我建議使用log4j2而不是Log4j,因爲你可以使用它來進行異步日誌記錄,這將有助於提高性能。

+0

Appender很好。我在問佈局。佈局未被使用。 – tuk