2017-12-02 85 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