java - 使用 log4j2 以编程方式创建 FileAppender 时出错

标签 java log4j log4j2 fileappender

在阅读在线文档后,我想尝试在本地计算机上测试 FileAppender。当我通过调用构建方法创建对象时,出现错误。

我将在应用程序中升级 log4j 版本,并且当我无法在本地创建和测试文件附加程序时正在学习文件附加程序。我尝试在互联网上查找并找到了一些有关如何创建它的代码。当我尝试同样的操作时,我会在堆栈跟踪中看到下面显示的错误。我使用的是 Windows 机器并在 netbeans 上运行代码。


package logtest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.appender.FileAppender;
class Test
{ 
    public void appendLogs(String logEvent)
    {
        LoggerContext ctx = (LoggerContext)LogManager.getContext(false);
        Configuration conf = ctx.getConfiguration();
        FileAppender.Builder b = FileAppender.newBuilder();
        b.withFileName("TestFile");
        b.withAppend(true);
        b.build();
        FileAppender fa = b.build();
        System.out.println(fa.toString());
        fa.start();
        fa.error("Error message");
    }
}
public class LogTest {

    private static final Logger LOG = LogManager.getLogger(LogTest.class);

    public static void main(String[] args) {

        Test t = new Test();
        t.appendLogs("Test log");
        System.out.println(t.toString());
        t.appendLogs("This is an error in a file");
        LOG.debug("This Will Be Printed On Debug");
        LOG.info("This Will Be Printed On Info");
        LOG.warn("This Will Be Printed On Warn");
        LOG.error("This Will Be Printed On Error");
        LOG.fatal("This Will Be Printed On Fatal");

        LOG.info("Appending string: {}.", "Hello, World");
    }
}

我在调用 build() 方法期间收到错误。

Exception in thread "main" java.lang.NullPointerException: name
    at java.util.Objects.requireNonNull(Objects.java:228)
    at org.apache.logging.log4j.core.appender.AbstractAppender.<init>(AbstractAppender.java:205)
    at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.<init>(AbstractOutputStreamAppender.java:120)
    at org.apache.logging.log4j.core.appender.FileAppender.<init>(FileAppender.java:259)
    at org.apache.logging.log4j.core.appender.FileAppender.<init>(FileAppender.java:42)
    at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:104)
    at logtest.Test.appendLogs(LogTest.java:17)
    at logtest.LogTest.main(LogTest.java:31)
Java Result: 1

我不明白为什么我会得到空异常。

最佳答案

您需要为附加程序设置一个名称。

FileAppender.Builder b = FileAppender.newBuilder();
b.withFileName("TestFile");
b.withAppend(true);
b.setName("my-appender");
b.build();
FileAppender fa = b.build();

关于java - 使用 log4j2 以编程方式创建 FileAppender 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57886764/

相关文章:

java - Apache Log4j 安全漏洞 - 2.17.0 jar 无法将查找值加载到 log4j2.xml 中

java - Log4j 2.5 PatternLayout Nano 时间戳不起作用

java - Log4j2.xml 在 java hibernate 框架中不会突然创建文件

java - 用 Java 流式传输音频/广播?

java - BeanUtils.copyProperties() 与 DozerBeanMapper.map()

Java HTTP 响应代码、URL、IOException

java - 将 log4j 语句重定向到 java 中的自定义控制台

java - 在 Java 中禁用 Log4J 输出

java - 是否值得从 log4j1 迁移到 log4j2

java - 连接两个数组 Stream 时出现 ArrayStoreException