最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

二、oceansky-logger基礎(chǔ)庫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");

這些日志會打印到指定的日志文件夾,分別存儲到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");

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

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

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

  • 支持是否將上述三種日志展示到控制臺上,控制統(tǒng)一通過LoggerContextInitializer.init方法實(shí)現(xiàn);
  • console控制臺支持基于ANSI編碼的顏色高亮展示;
  • 異常堆棧允許展示每一行末尾追加對應(yīng)所屬的jar包,如下示例的中括號內(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)(每次初始化都會重置原來的初始化內(nèi)容)
LoggerContextInitializer.init(new LoggerProperties())

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

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

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

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

#日志組件
#啟動日志訪問組件,默認(rèn):true
spring.emily.logger.enabled=true
#是否開啟debug模式,默認(rèn):false
spring.emily.logger.debug=true
#發(fā)生異常打印異常堆棧時是否將包信息追加到每行末尾,默認(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,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認(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
#是否開啟基于文件大小和時間的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
#是否開啟異步記錄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% 的容量時,會丟棄級別為 TRACE, DEBUG 與 INFO 的日志,僅僅只保留 WARN 與 ERROR 級別的日志。想要保留所有的事件,可以設(shè)置為 0
spring.emily.logger.appender.async.discarding-threshold=0
# 根據(jù)所引用 appender 隊(duì)列的深度以及延遲, AsyncAppender 可能會耗費(fèi)長時間去刷新隊(duì)列。
# 當(dāng) LoggerContext 被停止時, AsyncAppender stop 方法會等待工作線程指定的時間來完成。
# 使用 maxFlushTime 來指定最大的刷新時間,單位為毫秒。在指定時間內(nèi)沒有被處理完的事件將會被丟棄。這個屬性的值的含義與 Thread.join(long)) 相同
# 默認(rèn)是 1000毫秒
spring.emily.logger.appender.async.max-flush-time=1000
# 在隊(duì)列滿的時候 appender 會阻塞而不是丟棄信息。設(shè)置為 true,appender 不會阻塞你的應(yīng)用而會將消息丟棄,默認(rèn)為 false
spring.emily.logger.appender.async.never-block=false
#是否將日志信息輸出到控制臺,默認(rèn):true
spring.emily.logger.root.console=false
#基礎(chǔ)日志文件路徑,默認(rèn):""
spring.emily.logger.root.file-path=base
#日志級別,即該等級之上才會輸出,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
#控制臺輸出格式-帶顏色,默認(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
#是否將模塊日志輸出到控制臺,默認(rèn):false
spring.emily.logger.group.console=true
#日志級別,即該等級之上才會輸出,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
#是否將模塊日志輸出到控制臺,默認(rèn):false
spring.emily.logger.module.console=true
#日志級別,即該等級之上才會輸出,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)用初始化方法后即可開始日志記錄的愉快旅程

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

emily-spring-boot-logger是一個基于springboot自動化配置,開箱即用的組件,只需要引入組件既可以使用;

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

相關(guān)文章

  • mybatis使用pgvector的實(shí)現(xiàn)示例

    mybatis使用pgvector的實(shí)現(xiàn)示例

    本文主要介紹了mybatis定義和注冊VectorTypeHandler,并使用@TableName注解設(shè)置Entity類,其中autoResultMap屬性設(shè)置為true,這樣就可以實(shí)現(xiàn)數(shù)據(jù)存儲與查詢,感興趣的可以了解一下
    2026-01-01
  • SpringBoot如何接收前端傳遞參數(shù)

    SpringBoot如何接收前端傳遞參數(shù)

    這篇文章主要介紹了SpringBoot如何接收前端傳遞參數(shù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-08-08
  • Maven將Jar包打入本地倉庫的實(shí)現(xiàn)

    Maven將Jar包打入本地倉庫的實(shí)現(xiàn)

    項(xiàng)目需要用到一個Jar包,不能從遠(yuǎn)程倉庫拉取,只有一個Jar包,所以需要將Jar包打入到本地倉庫才能引入項(xiàng)目,本文主要介紹了Maven將Jar包打入本地倉庫的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12
  • Java基礎(chǔ)之自定義類加載器

    Java基礎(chǔ)之自定義類加載器

    應(yīng)該有很多小伙伴還不了解Java自定義類加載器吧,下文中有對Java自定義類加載器非常詳細(xì)的描述,還有小伙伴們最喜歡的代碼環(huán)節(jié),需要的朋友可以參考下
    2021-05-05
  • Java實(shí)現(xiàn)人臉識別登錄、注冊等功能(最新完整版)

    Java實(shí)現(xiàn)人臉識別登錄、注冊等功能(最新完整版)

    這段時間由于學(xué)校實(shí)行靜態(tài)化管理,寢室門和校門都是用了人臉識別的裝置,本系列項(xiàng)目從設(shè)計(jì)到實(shí)現(xiàn)源碼全部開源免費(fèi)學(xué)習(xí)使用,對Java實(shí)現(xiàn)人臉識別登錄、注冊功能感興趣的朋友一起看看吧
    2022-05-05
  • springboot集成shiro自定義登陸過濾器方法

    springboot集成shiro自定義登陸過濾器方法

    這篇文章主要介紹了springboot集成shiro自定義登陸過濾器方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • SpringBoot集成OptaPlanner與使用指南

    SpringBoot集成OptaPlanner與使用指南

    本文詳細(xì)介紹如何在Spring Boot項(xiàng)目中集成OptaPlanner約束求解器,并實(shí)現(xiàn)復(fù)雜值班排班系統(tǒng),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Spring security實(shí)現(xiàn)對賬戶進(jìn)行加密

    Spring security實(shí)現(xiàn)對賬戶進(jìn)行加密

    這篇文章主要介紹了Spring security實(shí)現(xiàn)對賬戶進(jìn)行加密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java開發(fā)崗位面試被問到泛型怎么辦

    Java開發(fā)崗位面試被問到泛型怎么辦

    泛型在java中有很重要的地位,在面向?qū)ο缶幊碳案鞣N設(shè)計(jì)模式中有非常廣泛的應(yīng)用。java泛型知識點(diǎn)也是Java開發(fā)崗位必問的一個話題,今天小編就給大家普及下Java泛型常見面試題,感興趣的朋友一起看看吧
    2021-07-07
  • Spring+SpringMVC配置事務(wù)管理無效原因及解決辦法詳解

    Spring+SpringMVC配置事務(wù)管理無效原因及解決辦法詳解

    這篇文章主要介紹了Spring+SpringMVC配置事務(wù)管理無效原因及解決辦法詳解,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12

最新評論

从化市| 神池县| 多伦县| 平武县| 江安县| 昌吉市| 偏关县| 冀州市| 双城市| 黔江区| 临沧市| 迁西县| 奈曼旗| 青河县| 礼泉县| 岑溪市| 保康县| 高青县| 南汇区| 关岭| 雷波县| 吉隆县| 开封县| 海林市| 花垣县| 逊克县| 吴川市| 丹巴县| 鄯善县| 合肥市| 陆良县| 勃利县| 大余县| 中宁县| 临颍县| 楚雄市| 苏尼特左旗| 元阳县| 汉阴县| 南陵县| 泰安市|