Java動態(tài)批量生成logback日志文件的示例
應用場景舉個例子:
當我一個服務需要啟動n個端口,來監(jiān)聽n個來源的數(shù)據(jù),并且處理數(shù)據(jù)邏輯一致;但是我想要它們的日志分開文件夾來打印,從而更好的分析問題,那么就可以用我下面提供的模版了;
動態(tài)生成日志logger,然后通過對象管理起來,然后我們可以從這個管理器內(nèi)拿logger來打印日志,或者從LoggerFactory根據(jù)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 + "/";
// 創(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");
// 配置滾動策略
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("測試日志,輸出到動態(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);
}
}到此這篇關于Java動態(tài)批量生成logback日志文件的示例的文章就介紹到這了,更多相關Java批量生成logback文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringCloud Eureka 服務注冊實現(xiàn)過程
這篇文章主要介紹了SpringCloud Eureka 服務注冊實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10
詳解如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API
作為后端程序員,我們的日常工作就是調(diào)用一些第三方服務,將數(shù)據(jù)存入數(shù)據(jù)庫,返回信息給前端。本文為大家介紹了如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API,需要的可以參考一下2022-12-12
java -D參數(shù)設置系統(tǒng)屬性無效問題及解決
這篇文章主要介紹了java -D參數(shù)設置系統(tǒng)屬性無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法
Servlet是JavaWeb應用程序中不可或缺的組件之一,本文主要介紹了IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下2023-10-10

