【问题标题】:Custom Pattern Layout in log4j is not getting usedlog4j 中的自定义模式布局没有被使用
【发布时间】:2017-12-02 17:48:20
【问题描述】:

我正在尝试在 article 中提到的 log4j 中创建自定义布局。

我创建了一个简单的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

谁能告诉我我做错了什么?

【问题讨论】:

  • 你能分享你的 pom.xml 或你使用过的依赖项
  • 您使用的是旧的 Log4j 1.2,该版本于 2015 年夏天停止使用。众所周知,Java 9 中的 Log4j 1.2 已损坏。请迁移到 Log4j2。在 Log4j2 中创建自定义组件更容易且记录得更好。

标签: java log4j


【解决方案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,因为您可以将它用于异步日志记录,这将有助于提高性能。

【讨论】:

  • Appender 没问题。我问的是布局。布局没有被使用。
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2016-05-31
  • 1970-01-01
相关资源
最近更新 更多