亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

如何修改覆蓋spring boot默認日志策略logback詳解

2024-07-14 08:42:33
字體:
來源:轉載
供稿:網友

背景

Spring Boot在所有內部日志中使用Commons Logging,但是默認配置也提供了對常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每種Logger都可以通過配置使用控制臺或者文件輸出日志內容。

默認日志Logback

SLF4J——Simple Logging Facade For Java,它是一個針對于各類Java日志框架的統一Facade抽象。Java日志框架眾多——常用的有java.util.logging, log4j, logback,commons-logging, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定義了統一的日志抽象接口,而真正的日志實現則是在運行時決定的——它提供了各類日志框架的binding。

Logback是log4j框架的作者開發的新一代日志框架,它效率更高、能夠適應諸多的運行環境,同時天然支持SLF4J。

默認情況下,Spring Boot會用Logback來記錄日志,并用INFO級別輸出到控制臺。在運行應用程序和其他例子時,你應該已經看到很多INFO級別的日志了。

springboot初始化了日志的默認實現,只要我們在配置文件添加對應的配置即可。

比如

logging: file: logs/application-debug.log pattern: console: "%d %-5level %logger : %msg%n" file: "%d %-5level [%thread] %logger : %msg%n" level: org.springframework.web: ERROR com.howtodoinjava: INFO org.hibernate: ERROR

可以指定日志文件名,覆蓋默認的pattern,指定不同日志級別。

但依舊有很多局限性。比如,默認的文件方案是:

E:/maven/repository/org/springframework/boot/spring-boot/1.5.13.RELEASE/spring-boot-1.5.13.RELEASE.jar!/org/springframework/boot/logging/logback/file-appender.xml

 <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">  <encoder>   <pattern>${FILE_LOG_PATTERN}</pattern>  </encoder>  <file>${LOG_FILE}</file>  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">   <fileNamePattern>${LOG_FILE}.%i</fileNamePattern>  </rollingPolicy>  <triggeringPolicy   class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">   <MaxFileSize>10MB</MaxFileSize>  </triggeringPolicy> </appender>

只是超過10m就生成一個新文件。而我們還遇到過日志把磁盤打滿的情況。肯定需要定時清理,還想要按照日期生成文件。這樣,僅僅配置文件是不夠的,需要我們自己定義。

自定義

實現自定義就是在resource下新增logback-spring.xml, 然后編寫我們的配置方案。就是完全跳過spring的默認配置了。但我又想偷懶,還想用spring的配置,但只是修改個別,比如file。

spring默認配置文件 E:/maven/repository/org/springframework/boot/spring-boot/1.5.13.RELEASE/spring-boot-1.5.13.RELEASE.jar!/org/springframework/boot/logging/logback/base.xml

我們只要

<include resource="org/springframework/boot/logging/logback/base.xml"/>

就可以拿過來直接用。

最初我也是這樣做的,但后面發現有些東西是不能覆蓋的。比如內置的日志文件名,所以,最后把base里的內容單獨抽離出來用了。

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPeriod="60 seconds" debug="false"> <springProperty scope="context" name="appName" source="spring.application.name" defaultValue="application"/> <springProperty scope="context" name="log.path" source="logging.path" defaultValue="logs"/> <springProperty scope="context" name="logstashurl" source="logstash.url" defaultValue="localhost:4560"/> <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>--> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml" /> <!--輸出到文件--> <appender name="TIME_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--> <!-- <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>--> <!-- <maxHistory>7</maxHistory>--> <!--</rollingPolicy>--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">  <!-- daily rollover -->  <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>  <maxHistory>7</maxHistory>  <maxFileSize>100MB</maxFileSize>  <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> <encoder>  <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${appName} %X{req.remoteHost} %X{req.requestURI} %X{req.userAgent} %X{req.method} - [%thread] %-5level %logger{36} - %msg%n</pattern>-->  <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> </appender> <!-- 輸出到logstash--> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>${logstashurl}</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/> </appender> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="TIME_FILE"/> </root> <springProfile name="dev"> <logger name="com.test.demo.mapper" level="DEBUG"> </logger> </springProfile> <springProfile name="local, test, prod"> <root level="warn">  <appender-ref ref="LOGSTASH"/> </root> </springProfile></configuration>

同時,需要讀取配置文件, 配置文件依舊生效

logging: path: logs file: ${logging.path}/${spring.application.name}

這里,include拿到spring默認配置,但移除了base里的root配置,去掉了file。并自定義file。file規則是保存7天,每100m分一個文件,總大小不超過1G。

 <springProperty scope="context" name="appName" source="spring.application.name" defaultValue="application"/> <springProperty scope="context" name="log.path" source="logging.path" defaultValue="logs"/> <springProperty scope="context" name="logstashurl" source="logstash.url" defaultValue="localhost:4560"/>

這一塊配置并沒有使用,只是放這里備份。logback里想要使用spring的配置文件的變量,只能通過這種方式讀取。因為我配置了logstash,需要讀取logstash的url,所以這樣做。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成欧美中文字幕| 久久精品一本久久99精品| 97人洗澡人人免费公开视频碰碰碰| 欧美日韩一区免费| 九九精品在线观看| 亚洲精品在线不卡| 亚洲精品98久久久久久中文字幕| 久久福利视频网| 久久久久久网站| 国产精品久久一| 国产女人18毛片水18精品| 91精品免费视频| 亚洲精品免费网站| 亚洲日韩中文字幕| 欧美日韩国产91| 国产69精品99久久久久久宅男| 亚洲人在线观看| 日韩成人激情影院| 国产精彩精品视频| 欧美精品www在线观看| 欧美成人在线免费| 国产精品第2页| 欧美激情奇米色| 日韩av电影在线网| 亚洲小视频在线| 成人在线视频网站| 亚洲老头老太hd| 海角国产乱辈乱精品视频| 国产福利精品av综合导导航| 日本久久久久久| 91免费的视频在线播放| 欧美精品久久久久久久免费观看| 亚洲欧美日韩高清| 日韩免费观看视频| 国产精品wwwwww| 国产精品一区二区在线| 久久精品99无色码中文字幕| 亚洲第一区在线| 91精品国产91| 欧美高清视频在线| 国产精品日韩久久久久| 日韩中文字幕在线观看| 欧美日韩国产综合新一区| 欧美精品成人在线| 亚洲欧美三级在线| 午夜精品一区二区三区在线视| 日韩在线视频网站| 国产91热爆ts人妖在线| 亚洲激情电影中文字幕| 国产啪精品视频网站| 粗暴蹂躏中文一区二区三区| 国产精品高精视频免费| 国产日韩换脸av一区在线观看| 国产69精品久久久久久| 亚洲毛片在线观看| 97超碰国产精品女人人人爽| 欧洲永久精品大片ww免费漫画| 2024亚洲男人天堂| 日韩欧美中文免费| 日韩av黄色在线观看| 精品中文字幕久久久久久| 日韩欧美亚洲成人| 日韩中文娱乐网| 亚洲精品综合精品自拍| 亚洲欧美综合区自拍另类| 97香蕉超级碰碰久久免费的优势| 国产拍精品一二三| 亚洲色图国产精品| 精品香蕉一区二区三区| 亚洲一区二区三区在线视频| 国模gogo一区二区大胆私拍| 国产不卡一区二区在线播放| 都市激情亚洲色图| 国产精品视频xxxx| 国产精品老女人视频| 国产精品v片在线观看不卡| 久久久久久久999| 国产91免费观看| 久久久久久这里只有精品| 91视频国产一区| 亚洲人在线观看| 色中色综合影院手机版在线观看| 日韩精品在线观看一区| 91久久国产综合久久91精品网站| 亚洲人成网站在线播| 国产精品久久久久av免费| 色综合亚洲精品激情狠狠| 欧美精品少妇videofree| 俺去啦;欧美日韩| 97视频免费在线观看| 日韩欧美中文在线| 日本久久久久久久久| 日韩h在线观看| 97成人超碰免| 久久国产精品网站| 精品久久久久久国产91| 欧美日韩国产一区二区| 国产精品夜色7777狼人| 亚洲成色999久久网站| 欧美黑人视频一区| 亚洲男人的天堂网站| 国产日产欧美精品| 午夜美女久久久久爽久久| 成人免费在线网址| 成人激情视频免费在线| 麻豆乱码国产一区二区三区| 色噜噜狠狠狠综合曰曰曰88av| 亚洲成人动漫在线播放| 按摩亚洲人久久| 色悠悠久久久久| 久久精品一偷一偷国产| 国内精品久久久久影院优| 国产视频久久久| 中文字幕在线视频日韩| 亚洲天堂一区二区三区| 亚洲欧美在线一区| 亚洲国产精品女人久久久| 国产精品一区久久| 亚洲性视频网址| 亚洲色图欧美制服丝袜另类第一页| 国产99久久精品一区二区永久免费| 日韩精品中文字幕在线观看| 国产精品一区二区久久国产| 国产欧美日韩中文字幕| 欧美成人小视频| 成人免费自拍视频| 亚洲福利视频网| 色妞在线综合亚洲欧美| 欧美xxxx做受欧美.88| 欧美香蕉大胸在线视频观看| 狠狠躁天天躁日日躁欧美| 日本精品性网站在线观看| 一区二区三区高清国产| www.欧美视频| 国产精品一区=区| 亚洲国内精品视频| 在线视频欧美日韩精品| 久久中文字幕在线视频| 日韩久久精品电影| 亚洲国内精品视频| 日韩一区二区精品视频| 亚洲天堂免费观看| 97免费中文视频在线观看| 亚洲人成伊人成综合网久久久| 三级精品视频久久久久| 亚洲色图国产精品| 成人免费黄色网| 日韩国产一区三区| 精品中文字幕在线观看| 精品国产一区二区三区四区在线观看| 久久精品国产电影| 午夜精品理论片| 黑人狂躁日本妞一区二区三区| 亚洲成人激情小说| 欧美视频一区二区三区…| 亚洲国产欧美在线成人app| 久久久久久国产三级电影| 国产欧美精品一区二区| 国产精品一区电影| 亚洲国产精品电影在线观看| 97激碰免费视频| 91九色在线视频| 欧美日韩中文字幕在线| 色综合天天综合网国产成人网|