欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于logback實(shí)現(xiàn)純java版本的SDK組件

 更新時(shí)間:2023年11月15日 10:07:06   作者:立小研先森  
這篇文章主要介紹了基于logback實(shí)現(xiàn)純java版本的SDK組件,在項(xiàng)目開(kāi)發(fā)過(guò)程中通常會(huì)使用logback作為日志記錄的依賴工具,使用方式是引入logback相關(guān)jar包,然后配置logback.xml配置文件的方式來(lái)實(shí)現(xiàn),需要的朋友可以參考下

開(kāi)源SDK:

<!--Java通用日志組件SDK-->
<dependency>
  <groupId>io.github.mingyang66</groupId>
  <artifactId>oceansky-logger</artifactId>
  <version>4.3.6</version>
</dependency>
<!-- Java基于logback的日志組件SDK -->
<dependency>
    <groupId>io.github.mingyang66</groupId>
    <artifactId>emily-spring-boot-logger</artifactId>
    <version>4.3.6</version>
</dependency>

在項(xiàng)目開(kāi)發(fā)過(guò)程中通常會(huì)使用logback作為日志記錄的依賴工具,使用方式是引入logback相關(guān)jar包,然后配置logback.xml配置文件的方式來(lái)實(shí)現(xiàn);xml的配置方案如果是一個(gè)兩個(gè)項(xiàng)目還好,那如果是幾十個(gè)項(xiàng)目呢?每個(gè)項(xiàng)目都要寫(xiě)一遍配置文件也是一鍵很繁瑣的事情,而且配置文件還容易出錯(cuò),那我們有沒(méi)有辦法將其改造成一個(gè)純java版本的SDK組件呢?如果我們需要用的時(shí)候只需要將其依賴引入項(xiàng)目中開(kāi)箱即用是不是很方便。

一、開(kāi)源SDK項(xiàng)目規(guī)劃

  • 新建oceansky-logger sdk,不依賴任何三方組件,不依賴任何web容器;
  • 新建emily-spring-boot-logger sdk,為基于springboot的項(xiàng)目提供開(kāi)箱即用的starter;

二、oceansky-logger基礎(chǔ)庫(kù)SDK支持哪些功能

  • 支持基礎(chǔ)日志打??;
private static final Logger baseLogger = LoggerFactory.getLogger(LogbackController.class);
baseLogger.error("--------error");
baseLogger.info("--------info");
baseLogger.debug("--------debug");
baseLogger.warn("--------warn");
baseLogger.trace("--------trace");

這些日志會(huì)打印到指定的日志文件夾,分別存儲(chǔ)到error、warn、info、debug文件夾下;

  • 支持分組日志打??;
 private static final Logger logger = LoggerFactory.getGroupLogger(LogbackController.class, "group/test");
groupLogger.error("+++++++++++==ttttttttttttt");
groupLogger.debug("+++++++++++==ttttttttttttt");
groupLogger.info("+++++++++++==ttttttttttttt");
groupLogger.warn("+++++++++++==ttttttttttttt");
groupLogger.trace("+++++++++++==ttttttttttttt");

這些日志會(huì)分別打印到指定的分組文件夾group/test下面,分別存儲(chǔ)到error、warn、info、debug文件夾下;

  • 支持模塊日志打印;
 private static final Logger logger = LoggerFactory.getModuleLogger(LogbackController.class, "test1", "tt0");
logger..info("ni-----------------" + System.currentTimeMillis());

這些日志分別被記錄到指定的文件夾及指定的文件名中,同一個(gè)項(xiàng)目中可以指定N多個(gè)這樣的日志記錄模塊;

  • 支持是否將上述三種日志展示到控制臺(tái)上,控制統(tǒng)一通過(guò)LoggerContextInitializer.init方法實(shí)現(xiàn);
  • console控制臺(tái)支持基于ANSI編碼的顏色高亮展示;
  • 異常堆棧允許展示每一行末尾追加對(duì)應(yīng)所屬的jar包,如下示例的中括號(hào)內(nèi):

2023-07-19 14:16:38.405 ERROR default --- [tp-nio-8080-exec-1] c.e.i.t.controller.LogbackController:35   : -----error test---- 
java.lang.NullPointerException: Cannot invoke "String.length()" because "s" is null
    at com.emily.infrastructure.test.controller.LogbackController.debug(LogbackController.java:33) ~[classes/:na]
    at com.emily.infrastructure.test.controller.LogbackController$$FastClassBySpringCGLIB$$2de19373.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.28.jar:5.3.28]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.28.jar:5.3.28]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.28.jar:5.3.28]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.28.jar:5.3.28]
    at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:70) ~[druid-1.2.18.jar:na]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.28.jar:5.3.28]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.28.jar:5.3.28]

  • 支持日志debug模式,展示內(nèi)部狀態(tài)信息及調(diào)試信息;
  • 支持基于ZIP、GZ的歸檔日志壓縮,壓縮率在80%以上;
  • 允許重復(fù)初始化logger,多次初始化以最后一次為準(zhǔn)(每次初始化都會(huì)重置原來(lái)的初始化內(nèi)容)
LoggerContextInitializer.init(new LoggerProperties())

三、emis-spring-boot-logger基礎(chǔ)庫(kù)SDK支持哪些功能

完全基于oceansky-logger sdk組件為springboot提供的starter組件;

提供基于自動(dòng)化配置的開(kāi)箱即用的組件模式,只需在pom.xml引入starter既可以按照ocean-logger中指定的使用方案使用;

自動(dòng)化配置屬性控制root、group、module、appender、滾動(dòng)策略等,具體配置如下:

#日志組件
#啟動(dòng)日志訪問(wèn)組件,默認(rèn):true
spring.emily.logger.enabled=true
#是否開(kāi)啟debug模式,默認(rèn):false
spring.emily.logger.debug=true
#發(fā)生異常打印異常堆棧時(shí)是否將包信息追加到每行末尾,默認(rèn):true
spring.emily.logger.packaging-data=true
#日志文件存放路徑,默認(rèn)是:./logs
spring.emily.logger.appender.path=./logs
#如果是 true,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件,默認(rèn)是true
spring.emily.logger.appender.append=true
#如果是 true,日志會(huì)被安全的寫(xiě)入文件,即使其他的FileAppender也在向此文件做寫(xiě)入操作,效率低,默認(rèn)是 false|Support multiple-JVM writing to the same log file
spring.emily.logger.appender.prudent=false
#設(shè)置是否將輸出流刷新,確保日志信息不丟失,默認(rèn):true
spring.emily.logger.appender.immediate-flush=true
#是否開(kāi)啟基于文件大小和時(shí)間的SizeAndTimeBasedRollingPolicy歸檔策略
#歸檔策略(SIZE_AND_TIME_BASED、TIME_BASE),默認(rèn):TIME_BASE
spring.emily.logger.appender.rolling-policy.type=TIME_BASE
#設(shè)置要保留的最大存檔文件數(shù)量,以異步方式刪除舊文件,默認(rèn) 7
spring.emily.logger.appender.rolling-policy.max-history=2
#最大日志文件大小 KB、MB、GB,默認(rèn):500MB
spring.emily.logger.appender.rolling-policy.max-file-size=10KB
#控制所有歸檔文件總大小 KB、MB、GB,默認(rèn):5GB
spring.emily.logger.appender.rolling-policy.total-size-cap=5GB
#設(shè)置重啟服務(wù)后是否清除歷史日志文件,默認(rèn):false
spring.emily.logger.appender.rolling-policy.clean-history-on-start=true
#壓縮模式(NONE、GZ、ZIP),默認(rèn):ZIP
spring.emily.logger.appender.rolling-policy.compression-mode=ZIP
#是否開(kāi)啟異步記錄Appender,默認(rèn):false
spring.emily.logger.appender.async.enabled=false
#隊(duì)列的最大容量,默認(rèn)為 256
spring.emily.logger.appender.async.queue-size=256
#默認(rèn),當(dāng)隊(duì)列還剩余 20% 的容量時(shí),會(huì)丟棄級(jí)別為 TRACE, DEBUG 與 INFO 的日志,僅僅只保留 WARN 與 ERROR 級(jí)別的日志。想要保留所有的事件,可以設(shè)置為 0
spring.emily.logger.appender.async.discarding-threshold=0
# 根據(jù)所引用 appender 隊(duì)列的深度以及延遲, AsyncAppender 可能會(huì)耗費(fèi)長(zhǎng)時(shí)間去刷新隊(duì)列。
# 當(dāng) LoggerContext 被停止時(shí), AsyncAppender stop 方法會(huì)等待工作線程指定的時(shí)間來(lái)完成。
# 使用 maxFlushTime 來(lái)指定最大的刷新時(shí)間,單位為毫秒。在指定時(shí)間內(nèi)沒(méi)有被處理完的事件將會(huì)被丟棄。這個(gè)屬性的值的含義與 Thread.join(long)) 相同
# 默認(rèn)是 1000毫秒
spring.emily.logger.appender.async.max-flush-time=1000
# 在隊(duì)列滿的時(shí)候 appender 會(huì)阻塞而不是丟棄信息。設(shè)置為 true,appender 不會(huì)阻塞你的應(yīng)用而會(huì)將消息丟棄,默認(rèn)為 false
spring.emily.logger.appender.async.never-block=false
#是否將日志信息輸出到控制臺(tái),默認(rèn):true
spring.emily.logger.root.console=false
#基礎(chǔ)日志文件路徑,默認(rèn):""
spring.emily.logger.root.file-path=base
#日志級(jí)別,即該等級(jí)之上才會(huì)輸出,ERROR > WARN > INFO > DEBUG > TRACE >ALL, 默認(rèn):INFO
spring.emily.logger.root.level=info
#記入文件日志格式-不帶顏色
spring.emily.logger.root.pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %cn --- [%18.18thread] %-36.36logger{36}:%-4.4line : %msg %n
#控制臺(tái)輸出格式-帶顏色,默認(rèn):[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%-36.36logger{36}:%-4.4line] : %msg%n
spring.emily.logger.root.console-pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %cn --- [%18.18thread] %cyan(%-36.36logger{36}:%-4.4line) : %msg %n
#是否將模塊日志輸出到控制臺(tái),默認(rèn):false
spring.emily.logger.group.console=true
#日志級(jí)別,即該等級(jí)之上才會(huì)輸出,ERROR > WARN > INFO > DEBUG > TRACE >ALL, 默認(rèn):INFO
spring.emily.logger.group.level=info
#模塊日志輸出格式,默認(rèn):%msg%n
spring.emily.logger.group.pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %cn --- [%18.18thread] %-36.36logger{36}:%-4.4line : %msg %n
#是否將模塊日志輸出到控制臺(tái),默認(rèn):false
spring.emily.logger.module.console=true
#日志級(jí)別,即該等級(jí)之上才會(huì)輸出,ERROR > WARN > INFO > DEBUG > TRACE >ALL, 默認(rèn):DEBUG
spring.emily.logger.module.level=info
#模塊日志輸出格式,默認(rèn):%msg%n
spring.emily.logger.module.pattern=%msg%n

四、組件使用方法

oceansky-logger組件SDK使用方法,調(diào)用初始化方法后即可開(kāi)始日志記錄的愉快旅程

LoggerProperties properties = new LoggerProperties();
LoggerContextInitializer.init(properties);

emily-spring-boot-logger是一個(gè)基于springboot自動(dòng)化配置,開(kāi)箱即用的組件,只需要引入組件既可以使用;

到此這篇關(guān)于基于logback實(shí)現(xiàn)純java版本的SDK組件的文章就介紹到這了,更多相關(guān)java實(shí)現(xiàn)SDK組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解在Spring-Boot中實(shí)現(xiàn)通用Auth認(rèn)證的幾種方式

    詳解在Spring-Boot中實(shí)現(xiàn)通用Auth認(rèn)證的幾種方式

    這篇文章主要介紹了詳解在Spring-Boot中實(shí)現(xiàn)通用Auth認(rèn)證的幾種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Java實(shí)現(xiàn)拓?fù)渑判虻氖纠a

    Java實(shí)現(xiàn)拓?fù)渑判虻氖纠a

    這篇文章我們要講的是拓?fù)渑判?,這是一個(gè)針對(duì)有向無(wú)環(huán)圖的算法,主要是為了解決前驅(qū)后繼的關(guān)系,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • java 多態(tài)與抽象類詳解總結(jié)

    java 多態(tài)與抽象類詳解總結(jié)

    在面向?qū)ο蟮母拍钪?,所有的?duì)象都是通過(guò)類來(lái)描繪的,但是反過(guò)來(lái),并不是所有的類都是用來(lái)描繪對(duì)象的,如果一個(gè)類中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類就是抽象類,而多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力
    2021-11-11
  • Java后臺(tái)通過(guò)Collections獲取list集合中最大數(shù),最小數(shù)代碼

    Java后臺(tái)通過(guò)Collections獲取list集合中最大數(shù),最小數(shù)代碼

    這篇文章主要介紹了Java后臺(tái)通過(guò)Collections獲取list集合中最大數(shù),最小數(shù)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • SpringBoot 統(tǒng)一公共返回類的實(shí)現(xiàn)

    SpringBoot 統(tǒng)一公共返回類的實(shí)現(xiàn)

    本文主要介紹了SpringBoot 統(tǒng)一公共返回類的實(shí)現(xiàn),配置后臺(tái)的統(tǒng)一公共返回類,這樣做目的是為了統(tǒng)一返回信息,文中示例代碼介紹的很詳細(xì),感興趣的可以了解一下
    2022-01-01
  • JavaFX如何獲取ListView(列表視圖)的選項(xiàng)

    JavaFX如何獲取ListView(列表視圖)的選項(xiàng)

    這篇文章主要介紹了JavaFX如何獲取ListView(列表視圖)的選項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • LeetCode?動(dòng)態(tài)規(guī)劃之矩陣區(qū)域和詳情

    LeetCode?動(dòng)態(tài)規(guī)劃之矩陣區(qū)域和詳情

    這篇文章主要介紹了LeetCode?動(dòng)態(tài)規(guī)劃之矩陣區(qū)域和詳情,文章基于Java的相關(guān)資料展開(kāi)對(duì)LeetCode?動(dòng)態(tài)規(guī)劃的詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-04-04
  • 簡(jiǎn)單談?wù)凧ava中String類型的參數(shù)傳遞問(wèn)題

    簡(jiǎn)單談?wù)凧ava中String類型的參數(shù)傳遞問(wèn)題

    這篇文章主要介紹了簡(jiǎn)單談?wù)凧ava中String類型的參數(shù)傳遞問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 一篇文章帶你了解常用的Maven命令

    一篇文章帶你了解常用的Maven命令

    這篇文章主要為大家介紹了常用的Maven命令 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Java利用openoffice將doc、docx轉(zhuǎn)為pdf實(shí)例代碼

    Java利用openoffice將doc、docx轉(zhuǎn)為pdf實(shí)例代碼

    這篇文章主要介紹了Java利用openoffice將doc、docx轉(zhuǎn)為pdf實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論