Java动态批量生成logback日志文件的示例
应用场景举个例子:
当我一个服务需要启动n个端口,来监听n个来源的数据,并且处理数据逻辑一致;但是我想要它们的日志分开文件夹来打印,从而更好的分析问题,那么就可以用我下面提供的模版了;
动态生成日志logger,然后通过对象管理起来,然后我们可以从这个管理器内拿logger来打印日志,或者从LoggerFactory根据id去拿logger对象
public void initLogger(Set<Integer> keySet) {
// 获取 Logback 的 LoggerContext
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
for (Integer port : keySet) {
Logger logger = null;
try {
String currPath = bsePath + "/" + port + "/";
// 创建 Logger
logger = context.getLogger("LOGGER-" + port);
logger.setLevel(Level.ALL);
logger.setAdditive(false); // 禁止继承父 Logger 的 Appender
// 创建 Appender
RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<>();
appender.setContext(context);
appender.setName("DYNAMIC_APPENDER_" + port);
appender.setFile(currPath + "app.log");
// 配置滚动策略
TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<>();
rollingPolicy.setContext(context);
rollingPolicy.setParent(appender);
rollingPolicy.setFileNamePattern(currPath + "log-%d{yyyy-MM-dd}.%i.log");
rollingPolicy.setMaxHistory(3);
rollingPolicy.setTotalSizeCap(FileSize.valueOf("7GB"));
// 配置 SizeAndTimeBasedFNATP
SizeAndTimeBasedFNATP<ILoggingEvent> triggeringPolicy = new SizeAndTimeBasedFNATP<>();
triggeringPolicy.setContext(context);
triggeringPolicy.setMaxFileSize(FileSize.valueOf("100MB"));
triggeringPolicy.setTimeBasedRollingPolicy(rollingPolicy);
rollingPolicy.setTimeBasedFileNamingAndTriggeringPolicy(triggeringPolicy);
try {
rollingPolicy.start(); // 启动滚动策略
} catch (Exception e) {
log.error("Failed to start rolling or triggering policy:", e);
}
// 配置编码器
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(context);
encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
encoder.start();
// 设置 Appender
appender.setRollingPolicy(rollingPolicy);
appender.setEncoder(encoder);
try {
appender.start();
} catch (Exception e) {
log.error("Failed to start appender: ", e);
}
// 将 Appender 添加到 Logger
logger.addAppender(appender);
// 输出日志
logger.info("测试日志,输出到动态路径文件:{}", currPath);
} catch (Exception e) {
log.error("初始化logger失败:{}", port);
throw new RuntimeException(e);
}
LightManagerBo lightManagerBo = port2ManagerMap.computeIfAbsent(port, k -> new LightManagerBo());
lightManagerBo.setLogger(logger);
}
}到此这篇关于Java动态批量生成logback日志文件的示例的文章就介绍到这了,更多相关Java批量生成logback文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
java 枚举类定义静态valueOf(java.lang.String)方法的问题及解决
这篇文章主要介绍了java 枚举类定义静态valueOf(java.lang.String)方法的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09
java基于Apache FTP实现文件上传、下载、修改文件名、删除
本篇文章主要介绍了Apache FTP实现文件上传、下载、修改文件名、删除,实现了FTP文件上传(断点续传)、FTP文件下载、FTP文件重命名、FTP文件删除等功能,有需要的可以了解一下。2016-11-11
Java concurrency线程池之线程池原理(一)_动力节点Java学院整理
这篇文章主要为大家详细介绍了Java concurrency线程池之线程池原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06
Java语言实现简单FTP软件 FTP软件效果图预览之下载功能(2)
这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP软件效果图预览之下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-03-03


最新评论