Java動(dòng)態(tài)批量生成logback日志文件的示例
應(yīng)用場景舉個(gè)例子:
當(dāng)我一個(gè)服務(wù)需要啟動(dòng)n個(gè)端口,來監(jiān)聽n個(gè)來源的數(shù)據(jù),并且處理數(shù)據(jù)邏輯一致;但是我想要它們的日志分開文件夾來打印,從而更好的分析問題,那么就可以用我下面提供的模版了;
動(dòng)態(tài)生成日志logger,然后通過對(duì)象管理起來,然后我們可以從這個(gè)管理器內(nèi)拿logger來打印日志,或者從LoggerFactory根據(jù)id去拿logger對(duì)象
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 + "/"; // 創(chuàng)建 Logger logger = context.getLogger("LOGGER-" + port); logger.setLevel(Level.ALL); logger.setAdditive(false); // 禁止繼承父 Logger 的 Appender // 創(chuàng)建 Appender RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<>(); appender.setContext(context); appender.setName("DYNAMIC_APPENDER_" + port); appender.setFile(currPath + "app.log"); // 配置滾動(dòng)策略 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(); // 啟動(dòng)滾動(dòng)策略 } 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(); // 設(shè)置 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("測試日志,輸出到動(dòng)態(tài)路徑文件:{}", currPath); } catch (Exception e) { log.error("初始化logger失敗:{}", port); throw new RuntimeException(e); } LightManagerBo lightManagerBo = port2ManagerMap.computeIfAbsent(port, k -> new LightManagerBo()); lightManagerBo.setLogger(logger); } }
到此這篇關(guān)于Java動(dòng)態(tài)批量生成logback日志文件的示例的文章就介紹到這了,更多相關(guān)Java批量生成logback文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 高并發(fā)的三種實(shí)現(xiàn)案例詳解
這篇文章主要介紹了Java 高并發(fā)的三種實(shí)現(xiàn)案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08java 枚舉類定義靜態(tài)valueOf(java.lang.String)方法的問題及解決
這篇文章主要介紹了java 枚舉類定義靜態(tài)valueOf(java.lang.String)方法的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09java多線程中的生產(chǎn)者和消費(fèi)者隊(duì)列詳解
這篇文章主要介紹了java多線程中的生產(chǎn)者和消費(fèi)者隊(duì)列詳解,隊(duì)列,是一種數(shù)據(jù)結(jié)構(gòu),除了優(yōu)先級(jí)隊(duì)列和LIFO隊(duì)列外,隊(duì)列都是以FIFO(先進(jìn)先出)的方式對(duì)各個(gè)元素進(jìn)行排序的,需要的朋友可以參考下2024-01-01java基于Apache FTP實(shí)現(xiàn)文件上傳、下載、修改文件名、刪除
本篇文章主要介紹了Apache FTP實(shí)現(xiàn)文件上傳、下載、修改文件名、刪除,實(shí)現(xiàn)了FTP文件上傳(斷點(diǎn)續(xù)傳)、FTP文件下載、FTP文件重命名、FTP文件刪除等功能,有需要的可以了解一下。2016-11-11Java concurrency線程池之線程池原理(一)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Java計(jì)算兩個(gè)漢字相似度的實(shí)現(xiàn)方法
有時(shí)候我們希望計(jì)算兩個(gè)漢字的相似度,比如文本的 OCR 等場景,用于識(shí)別糾正,本文給大家詳細(xì)介紹了Java計(jì)算兩個(gè)漢字相似度的實(shí)現(xiàn)方法,文中有詳細(xì)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-11-11Java語言實(shí)現(xiàn)簡單FTP軟件 FTP軟件效果圖預(yù)覽之下載功能(2)
這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)簡單FTP軟件,F(xiàn)TP軟件效果圖預(yù)覽之下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03SpringBoot搭配AOP實(shí)現(xiàn)自定義注解
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何搭配AOP實(shí)現(xiàn)自定義注解,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12