Java动态批量生成logback日志文件的示例,
分享于 点击 17342 次 点评:287
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文件内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!
您可能感兴趣的文章:- Java日志logback的使用配置和logback.xml解读
- Java接口测试之日志框架Logback的具体使用
- JAVAlogback日志管理详解
- Java logback日志的简单使用
- Java日志框架之logback使用详解
用户点评