log4j中的自定义模式布局未被使用

时间:2017-12-02 17:48:20

标签: java log4j

我正在尝试在log4j中创建自定义布局,如article中所述。

我在下面创建了一个简单的CustomLayout -

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

一个简单的自定义appender如下所示

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

有人能让我知道我做错了什么吗?

1 个答案:

答案 0 :(得分:-1)

您需要更改正在使用的Logger以获取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登录。你在胡胡堆栈吗

我建议使用log4j2而不是Log4j,因为你可以将它用于异步日志记录,这有助于提高性能。

相关问题