作为一个完整的初学者,如何设置Log4j2(在Netbeans中)以将一些消息记录到控制台,而将其他消息记录到文件中?
(我只找到了旧版本的指南,由于XML的更改而使我陷入困境。基本上,我正在更新this thread中所做的事情,因为我认为这是一个好主意,但是缺少一些提示)

最佳答案

您将需要下载this archive of binaries
将“ log4j-api-2.8.1.jar”和“ log4j-core-2.8.1.jar”添加到您的项目。 (在NetBeans中:文件->项目属性->库。我必须将其添加到“编译”和“运行”中,否则在运行时会出错。)
告诉Log4j文件在哪里。 (在NetBeans中:文件->项目属性->运行。粘贴

-Dlog4j.configurationFile=/path/to/your/file/log4j2.xml



进入文本字段“ VM-Options”


使用您的配置在指定路径(我在项目的主文件夹中完成)中创建一个名为log4j2.xml的XML。

<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="warn">
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%m%n"/>
    </Console>
    <File name="FILE" fileName="logs/myLog.log">
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      </PatternLayout>
    </File>
  </Appenders>
  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="FILE" level="INFO"/>
      <AppenderRef ref="STDOUT" level="ERROR"/>
    </Root>
  </Loggers>
</Configuration>


这将创建两个追加程序,分别为ConsoleAppender和FileAppender,分别登录到System.out和名为“ myLog.log”的文件。级别为INFO或更高级别的日志消息被记录到文件中,仅错误打印到控制台。
这是一些示例代码来演示如何使用Log4j2:

import java.io.IOException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Demo {

    private final static Logger log = LogManager.getLogger(Demo.class);

    public static void main(String[] args) throws IOException {
        log.info("starting...");
        try {
            ((Object) null).toString();
        } catch (Exception e) {
            log.error("error message");
        }
        log.info("some info.");
    }
}



运行此命令将导致控制台输出

    error message


而文件包含

    2017-03-29 14:37:20,675 INFO l.Demo [main] starting...
    2017-03-29 14:37:20,676 ERROR l.Demo [main] error message
    2017-03-29 14:37:20,676 INFO l.Demo [main] some info.


我希望这可以为您省去一些麻烦,因为花了我很多时间才能解决这个问题。随时编辑这篇文章-我不知道我的陈述有多正确,这些只是对我有用的步骤。

09-07 20:09