如何配置log4j2,使其每30秒翻转一次?
例如,如果今天是2019-01-09 09:45:00,我通过命令将数据写入日志文件
log.info("test")
10分钟内没有更多数据进入日志,但我需要2019-01-09 09 09:45:30 30 30秒后自动翻转日志文件。
如果我这样配置log4j2:
<RollingFile name="RollingFile">
<FileName>C:/log/mylog.log</FileName>
<FilePattern>C:/log/time-based-logs/%d{yyyy-MM-dd-hh-mm}.log.zip</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="2" modulate="true" />
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
我必须通过命令写入日志数据
log.info("test1") // 2019-01-09 09:55:00
然后在10分钟后滚动文件,但我需要每30秒,甚至不再将数据写入日志。
我该怎么做呢?
我为我糟糕的英语道歉。
我想到了这个选择
public class Utils {
public static void rollover(LoggerContext loggerContext) {
Map<String, Appender> appendersByName = loggerContext.getConfiguration().getAppenders();
appendersByName.values().forEach(appender -> {
if (appender instanceof RollingFileAppender) {
((RollingFileAppender) appender).getManager().checkRollover(new RolloverLogEvent());
}
});
}
}
@Plugin(name = "OnTriggeringPolicy", category = "Core", printObject = true)
public class OnCustomTriggeringPolicy implements TriggeringPolicy {
private RollingFileManager manager;
@PluginFactory
public static OnRolloverEventEventTriggeringPolicy createPolicy() {
return new OnRolloverPolicy();
}
@Override
public void initialize(RollingFileManager manager) {
this.manager = manager;
}
@Override
public boolean isTriggeringEvent(LogEvent logEvent) {
return manager.getFileSize() > 0;
}
}
使用RollingFileAppenderhttps://logback.qos.ch/manual/appenders.html#RollingFileAppender
和TimeBasedRollingPolicyhttps://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy
但这允许你将颗粒细化到每分钟(以及每秒钟,但不是30秒)。
如果这还不够,请编写自己的自定义滚动策略https://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/RollingPolicy.html
或者只是扩展TimeBasedRollingPolicy以包含其他功能https://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.html
有办法得到滚动文件名吗?我写了自定义插件,信号文件滚动,但我需要得到滚动文件的文件名。我的插件从java代码发出信号: 自定义插件:
我有一个使用log4j1的应用程序。我在log4j.properties中的配置工作正常,它为日志创建文件。 我迁移到log4j2,现在没有创建文件,尽管我遵循了文档。我在这里尝试了所有不同的解决方案,但我无法实现。 这是我的应用程序中的log4j2.xml内部资源 这是我pom.xml的依赖 我厌倦了用完整路径更改文件的路径,在权限问题时更改文件夹。 我没有任何错误,但是当应用程序运行时,我看不
我阅读了log4j2的官方文档,并得到了一个关于RollingFileAppender的问题。 文件上是这么说的: 下面是一个示例配置,它使用基于时间和大小的触发策略的RollingFileAppender,将在同一天(1-100)创建多达100个存档,这些存档存储在基于当前年份和月份的目录中,并将压缩每个存档使用gzip并将每小时滚动一次。在每次翻转期间,此配置将删除与"/app.log.gz"
我正在编写一个将以编程方式创建log4j2配置的程序。我在log4j2.xml文件中有一个默认配置。基于列表中的某些数据类型,我必须为每种类型创建/复制log4j配置。配置是为这些类型复制的dailyrolling appender。创建记录器配置,根据数据类型将日志消息写入不同的文件。但每天的滚动并没有发生。 下面是基于数据类型生成log4j配置的代码。如果我需要更改为基于尺寸的滚动,也可以帮助
我在研究这个问题时发现的几乎所有内容都是针对Log4J1.x的,并讨论了一个似乎在2.0中不存在的datePattern参数。 下面是我的log4j2.xml文件: 我正在将信息和以上内容写入日志文件,并将调试写入控制台(目前)。这些文件被写得很好,但它们似乎每天都在滚动(这似乎是默认的)。
我使用log4j2并试图日志与对数旋转。具体来说,我想以10MB的最大大小登录,并无限制地旋转。下面的配置生成3代滚动文件,因为“DefaultRolloverStrategy max”设置为3。你能指导我如何在最大10MB的大小下记录无限数量的文件吗?