log4j - log4j2如何选择会话而不是日期
问题描述
在 log4j2 上,我可以根据以下行轻松地根据日期登录到文件。
<File name="file" fileName="logs/te_${date:yyyy}-${date:MM}-${date:dd}_output.log" append="true">
在某些行业中,存在跨越午夜的会话概念。
说电影院,在某些国家,电影在午夜后开始。
因此,我希望将日志捕获为将在凌晨 4 点结束/开始的会话。
一天中任何时候你会开始程序,它会检查:
// pseudo code
if time < 04:00 then
session = today.minusDays(1)
else
session = today
因此,为了清楚起见,程序启动时的日志文件名称如下:
# starting datetime | logfile name
2020-05-20 22:00 -> "2020-05-20_output.log"
2020-05-21 01:00 -> "2020-05-20_output.log"
2020-05-21 03:00 -> "2020-05-20_output.log"
2020-05-21 05:00 -> "2020-05-21_output.log"
无论如何我可以在 log4j2.xml 文件上做到这一点?
解决方案
如果不是很清楚你想在凌晨 4 点发生什么。听起来您想开始写入另一个文件。如果是这样,您希望将 RollingFileAppender 与 CronTriggeringPolicy 一起使用。
<RollingFile name="RollingFile" filePattern="logs/te_%d{yyyy:MM:dd}_output.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<CronTriggeringPolicy schedule="0 0 4 * * ?"/>
</RollingFile>
推荐阅读
- android - 将我的颤振应用程序添加到 android 中的超省电模式
- c++ - 用 C++ 编译 ImGui
- docker - 为什么 Docker 守护进程无法访问 localhost 地址?
- machine-learning - 如何将 MultiOutputClassifier 应用于 Naive-Bayes 算法的数据集
- parallel-processing - 并行运行地图切片
- r - 如何根据R中第二个变量的排名将变量的排名分成小数,以打破平局
- mongodb - 如何高效地执行多个 MongoDB 查询,每次都删除搜索参数?
- typescript - 没有分配相等的类型 - 为什么
- python - 如何避免使用张量或 einsum 的 for 循环?
- swiftui - 在视图 swiftUI 之外单击时关闭视图