原文: https://howtodoinjava.com/log4j2/log4j-2-json-configuration-example/

Apache Log4j2 是对 Log4j 1.x 的升级,在性能上进行了重大改进,改进了配置文件的自动重装,Java8 lambda 支持和自定义日志级别,从而大大改进了 Log4j1.x。 除了 XML属性文件外,还可以使用 JSON 配置 Log4j。

Log4j2 依赖项

要在项目中包含 Log4j2 ,请在项目中包含以下依赖项。

  1. <dependency>
  2. <groupId>org.apache.logging.log4j</groupId>
  3. <artifactId>log4j-api</artifactId>
  4. <version>2.6.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.logging.log4j</groupId>
  8. <artifactId>log4j-core</artifactId>
  9. <version>2.6.1</version>
  10. </dependency>

Log4j2 使用 Jackson 解析 JSON 文件 - 因此,我们还要添加它的依赖项。

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-core</artifactId>
  4. <version>2.7.4</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.fasterxml.jackson.core</groupId>
  8. <artifactId>jackson-databind</artifactId>
  9. <version>2.7.4</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.fasterxml.jackson.core</groupId>
  13. <artifactId>jackson-annotations</artifactId>
  14. <version>2.7.4</version>
  15. </dependency>

用于控制台记录的log4j2.json

您可以使用下面的src/main/resources/log4j2.json文件将日志输出到控制台。 请注意,如果找不到配置文件,则将使用DefaultConfiguration。 这也将日志输出到控制台。

  1. {
  2. "configuration": {
  3. "status": "error",
  4. "name": "JSONConfigDemo",
  5. "packages": "com.howtodoinjava",
  6. "ThresholdFilter": {
  7. "level": "debug"
  8. },
  9. "appenders": {
  10. "Console": {
  11. "name": "STDOUT",
  12. "PatternLayout": {
  13. "pattern": "%d [%t] %-5p %c - %m%n"
  14. }
  15. }
  16. },
  17. "loggers": {
  18. "root": {
  19. "level": "debug",
  20. "AppenderRef": {
  21. "ref": "STDOUT"
  22. }
  23. }
  24. }
  25. }
  26. }

用于滚动文件记录的log4j2.json

您可以使用下面的log4j2.json文件将日志输出到基于大小的滚动文件中。

  1. {
  2. "configuration": {
  3. "name": "Default",
  4. "appenders": {
  5. "RollingFile": {
  6. "name":"File",
  7. "fileName":"C:/logs/howtodoinjava.log",
  8. "filePattern":"C:/logs/howtodoinjava-backup-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz",
  9. "PatternLayout": {
  10. "pattern":"%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"
  11. },
  12. "Policies": {
  13. "SizeBasedTriggeringPolicy": {
  14. "size":"10 MB"
  15. }
  16. },
  17. "DefaultRolloverStrategy": {
  18. "max":"10"
  19. }
  20. }
  21. },
  22. "loggers": {
  23. "root": {
  24. "level":"debug",
  25. "appender-ref": {
  26. "ref":"File"
  27. }
  28. }
  29. }
  30. }
  31. }

log4j2.json文件位置

您应该将log4j2.json放在应用的类路径中的任何位置。 Log4j2 将扫描所有类路径位置以查找此文件,然后将其加载。

Log4j2 JSON 配置示例 - 图1

Log4j2.json文件位置

log4j2.json示例

让我们写一个 Java 类并写一些日志语句来验证日志是否也出现在控制台和日志文件中。

  1. package com.howtodoinjava.log4j2.examples;
  2. import org.apache.logging.log4j.LogManager;
  3. import org.apache.logging.log4j.Logger;
  4. public class Log4j2HelloWorldExample
  5. {
  6. private static final Logger LOGGER = LogManager.getLogger(Log4j2HelloWorldExample.class.getName());
  7. public static void main(String[] args)
  8. {
  9. LOGGER.debug("Debug Message Logged !!!");
  10. LOGGER.info("Info Message Logged !!!");
  11. LOGGER.error("Error Message Logged !!!", new NullPointerException("NullError"));
  12. }
  13. }

现在,当您运行上述程序时,您将在控制台中获得以下日志。

  1. 2016-06-16 15:06:25 DEBUG Log4j2HelloWorldExample:12 - Debug Message Logged !!!
  2. 2016-06-16 15:06:25 INFO Log4j2HelloWorldExample:13 - Info Message Logged !!!
  3. 2016-06-16 15:06:25 ERROR Log4j2HelloWorldExample:14 - Error Message Logged !!!
  4. java.lang.NullPointerException: NullError at com.howtodoinjava.log4j2.examples.Log4j2HelloWorldExample.main
  5. (Log4j2HelloWorldExample.java:14) [classes/:?]

学习愉快!