Java动态批量生成logback日志文件的示例

 更新时间:2025年04月18日 09:29:07   作者:妄痴梦中  
本文主要介绍了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文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • SpringCloud Eureka 服务注册实现过程

    SpringCloud Eureka 服务注册实现过程

    这篇文章主要介绍了SpringCloud Eureka 服务注册实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Spring Boot 整合 Thymeleaf 实例分享

    Spring Boot 整合 Thymeleaf 实例分享

    这篇文章主要分享了Spring Boot整合Thymeleaf,Thymeleaf是新一代的Java模板引擎,类似于Velocity、FreeMarker等传统引擎,关于其更多相关内容,需要的小伙伴可以参考一下
    2022-05-05
  • Java编程实现汉字按字母顺序排序的方法示例

    Java编程实现汉字按字母顺序排序的方法示例

    这篇文章主要介绍了Java编程实现汉字按字母顺序排序的方法,结合具体实例形式分析了java编码转换及字母排序相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • 详解如何在SpringBoot中优雅地重试调用第三方API

    详解如何在SpringBoot中优雅地重试调用第三方API

    作为后端程序员,我们的日常工作就是调用一些第三方服务,将数据存入数据库,返回信息给前端。本文为大家介绍了如何在SpringBoot中优雅地重试调用第三方API,需要的可以参考一下
    2022-12-12
  • Java JSON提取工具JsonExtractor的使用

    Java JSON提取工具JsonExtractor的使用

    本文主要介绍了Java JSON提取工具JsonExtractor的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • idea实现类快捷生成接口方法示例

    idea实现类快捷生成接口方法示例

    这篇文章主要介绍了idea实现类快捷生成接口方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • java多线程应用实现方法

    java多线程应用实现方法

    以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要了,呵呵。虽然才大二,但是也快要毕业了,要加油
    2012-11-11
  • java -D参数设置系统属性无效问题及解决

    java -D参数设置系统属性无效问题及解决

    这篇文章主要介绍了java -D参数设置系统属性无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • IDEA创建Servlet程序的两种实现方法

    IDEA创建Servlet程序的两种实现方法

    Servlet是JavaWeb应用程序中不可或缺的组件之一,本文主要介绍了IDEA创建Servlet程序的两种实现方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Spring事务失效的9大场景与解决方法

    Spring事务失效的9大场景与解决方法

    在日常开发中,我们经常使用Spring事务,这篇文章主要来和大家聊聊Spring事务失效的 9 种场景,并提供了相应的解决方法,有需要的小伙伴可以参考一下
    2025-04-04

最新评论