java - Log4j2 不滚动文件,而是在 SizeBasedTriggeringPolicy 之后覆盖同一文件

标签 java json log4j2

我有一个以下 JSON 配置,它在达到最大大小限制后不会滚动,而是覆盖它。

{
  "configuration": {
    "name": "cool_log",
    "appenders": { "RollingFile": { "name": "rollingFile",
        "fileName": "/var/log/app_test.log",
        "filePattern": "/var/log/%d{MM-dd-yy-HH-mm-ss}-%i.log.gz",
        "JSONLayout": {
          "complete": false,
          "compact" : true,
          "eventEol": true
        },
        "Policies": { "SizeBasedTriggeringPolicy": { "size": "100 KB" } },
        "DefaultRolloverStrategy": { "max": "10" }
      }
    },
    "loggers": {
      "root": {
        "level": "DEBUG",
        "appender-ref": {
          "ref": "rollingFile"
        }
      }
    }
  }
}

我根据 this official example 创建的,

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="var/log/app_test.log"
                 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      </PatternLayout>
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="250 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="20"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="DEBUG">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

xml 配置完美滚动,但我唯一缺少的是 PatternLayout,这对我来说是 JSONLayout

log4j2 的设置是,

public static void initialiseLoggingConfiguration() {
        try {
            PropertiesConfiguration logConfig = new PropertiesConfiguration("app.properties");
            System.out.println("Setting up log4j2 " + logConfig.getString("log4j2.config"));
            Configurator.initialize(null, logConfig.getString("log4j2.config"));
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }
    }

和 Maven 依赖项,

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.6.2</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.6.2</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.6.2</version>
</dependency>

最佳答案

没关系,

    <Policies>
        <SizeBasedTriggeringPolicy size="1 KB"/>
    </Policies>

变成

"SizeBasedTriggeringPolicy": {
          "size": "1 KB"
        }

所以工作的 log4j2.json 是,

{
  "configuration": {
    "name": "cool_log",
    "appenders": {
      "RollingFile": {
        "name": "rollingFile",
        "fileName": "logservice.log",
        "filePattern": "%d{MM-dd-yy-HH-mm-ss}-%i.log.gz",
        "JSONLayout": {
          "complete": false,
          "compact": true,
          "eventEol": true
        },
        "SizeBasedTriggeringPolicy": {
          "size": "1 KB"
        },
        "DefaultRolloverStrategy": {
          "max": "10"
        }
      }
    },
    "loggers": {
      "root": {
        "level": "DEBUG",
        "appender-ref": {
          "ref": "rollingFile"
        }
      }
    }
  }
}

引用

https://logging.apache.org/log4j/2.x/manual/configuration.html

关于java - Log4j2 不滚动文件,而是在 SizeBasedTriggeringPolicy 之后覆盖同一文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41076498/

相关文章:

java - 如何使用xi :include from external library?引用外部log4j2配置文件

java - Log4j 2 不在 Spring 2.5 Tomcat 应用程序中写入日志

java - 这个for循环的大O分析

Java/Scala 双向 MD5

PHP mySql 数据到 JSON 文件

jquery - 循环遍历 json key 检查其值是否为空

java - 如何使用 Java8 流从带有键列表的 Map 中获取值

Erlang 中的 Java SocketChannel 等效项

java - BodyEditorLoader - 读取文件时出错

java - 如何将 WebLookup 与 log4j-web 一起使用?