最近在學習springboot以及一些springcloud插件的使用,其中發現默認的配置並不能打印一些有用的日志,所以需要自定義一些日志輸出方式以便於查看日志排查問題,目前只整理了兩種使用方式,如下:
1 簡單日志配置
默認情況下spring boot使用Logback作為日志實現的框架,其內部使用Commons Logging來記錄日志,同時也保留外部接口可以讓一些日志框架來進行實現,
例如Java Util Logging,Log4J2還有Logback,如果你想用某一種日志框架來進行實現的話,就必須先配置。
其中最基礎的日志配置就在在resources(即classpath路徑)下面創建一個屬性文件:application.properties。
1.1 配置控制台日志的level(級別)
默認情況下,spring boot從控制台打印出來的日志級別只有ERROR, WARN 還有INFO,如果你想要打印debug級別的日志,可以通過application.properites配置debug=true
1.2 可以通過logging.level.*配置自定義包的日志輸出級別
logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
1.3 默認情況下spring boot是不將日志輸出到日志文件中,但我們可以配置將日志輸出到指定的文件中
logging.file=文件名稱
logging.path=文件路徑
小提示:在生產環境環境下,你可以通過命令行進行配置日志的debug級別-->java -jar C:\Users\Administrator\Desktop\xx\demo.jar --debug
這里需要注意幾點:
這里若不配置具體的包的日志級別,日志文件信息將為空
若只配置logging.path,那么將會在F:\demo文件夾生成一個日志文件為spring.log(ps:該文件名是固定的,不能更改)。如果path路徑不存在,會自動創建該文件夾
若只配置logging.file,那將會在項目的當前路徑下生成一個demo.log日志文件。這里可以使用絕對路徑如,會自動在e盤下創建文件夾和相應的日志文件。
logging.file=e:\\demo\\demo.log
logging.path和logging.file同時配置,不會在這個路徑有F:\demo\demo.log日志生成,logging.path和logging.file不會進行疊加(要注意)
logging.path和logging.file的value都可以是相對路徑或者絕對路徑
example:
-
#采用Logback日志框架輸出日志
-
-
#在生產環境環境下,你可以通過命令行進行配置日志的debug級別
-
#java -jar C:\Users\Administrator\Desktop\xx\demo.jar --debug
-
-
#默認情況下,spring boot從控制台打印出來的日志級別只有ERROR, WARN 還有INFO,如果你想要打印debug級別的日志,可以通過application.properites配置debug=
true
-
debug=
true
-
-
#配置logging.level.*來具體輸出哪些包的日志級別
-
logging.level.org.springframework.web=DEBUG
-
logging.level.com.xuexin.xcloud.print.service.mapper=DEBUG
-
-
#將日志輸出到文件中
-
#默認情況下spring boot是不將日志輸出到日志文件中,但你可以通過在application.properites文件中配置logging.file文件名稱和logging.path文件路徑,將日志輸出到文件中
-
logging.file=./xcloud-print.log
-
#logging.path=F:\\demo
-
2.使用logback日志框架
logback日志框架官網:http://logback.qos.ch
2.1 logback日志框架的簡介(摘自官網-->英文不好湊合看吧)
Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.
(Logback旨在作為受歡迎的log4j項目的繼承者,它拾起log4j離開的地方。)
Logback's architecture is sufficiently generic so as to apply under different circumstances. At present time, logback is divided into three modules, logback-core, logback-classic and logback-access.
(Logback的架構是非常通用的,以便在不同的情況下應用。目前,logback分為三個模塊:logback-core,logback-classic和logback-access。)
The logback-core module lays the groundwork for the other two modules. The logback-classic module can be assimilated to a significantly improved version of log4j. Moreover, logback-classic natively implements the SLF4J API so that you can readily switch back and forth between logback and other logging frameworks such as log4j or java.util.logging (JUL).
(對數核心模塊為其他兩個模塊奠定了基礎。logback-classic模塊可以被同化到顯着改進的log4j版本。此外,logback-classic本機實現了SLF4J API,以便您可以輕松地在logback和log4j或java.util.logging(JUL)之類的日志記錄框架之間來回切換。)
The logback-access module integrates with Servlet containers, such as Tomcat and Jetty, to provide HTTP-access log functionality. Note that you could easily build your own module on top of logback-core.
(回溯訪問模塊與Servlet容器(如Tomcat和Jetty)集成,以提供HTTP訪問日志功能。請注意,您可以輕松地在logback-core之上構建自己的模塊。)
2.2 從log4j切換到logback上的原因(摘自官網)
1、更快的實現 Logback的內核重寫了,在一些關鍵執行路徑上性能提升10倍以上。而且logback不僅性能提升了,初始化內存加載也更小了。
2、非常充分的測試 Logback經過了幾年,數不清小時的測試。Logback的測試完全不同級別的。在作者的觀點,這是簡單重要的原因選擇logback而不是log4j。
3、Logback-classic非常自然實現了SLF4j Logback-classic實現了 SLF4j。在使用SLF4j中,你都感覺不到logback-classic。而且因為logback-classic非常自然地實現了SLF4J, 所 以切換到log4j或者其他,非常容易,只需要提供成另一個jar包就OK,根本不需要去動那些通過SLF4JAPI實現的代碼。
4、非常充分的文檔 官方網站有兩百多頁的文檔。
5、自動重新加載配置文件 當配置文件修改了,Logback-classic能自動重新加載配置文件。掃描過程快且安全,它並不需要另外創建一個掃描線程。這個技術充分保證了應用程序能跑得很歡在JEE環境里面。
6、Lilith Lilith是log事件的觀察者,和log4j的chainsaw類似。而lilith還能處理大數量的log數據 。
7、謹慎的模式和非常友好的恢復 在謹慎模式下,多個FileAppender實例跑在多個JVM下,能 夠安全地寫道同一個日志文件。RollingFileAppender會有些限制。Logback的FileAppender和它的子類包括 RollingFileAppender能夠非常友好地從I/O異常中恢復。
8、配置文件可以處理不同的情況 開發人員經常需要判斷不同的Logback配置文件在不同的環境下(開發,測試,生產)。而這些配置文件僅僅只有一些很小的不同,可以通過,和來實現,這樣一個配置文件就可以適應多個環境。
9、Filters(過濾器) 有些時候,需要診斷一個問題,需要打出日志。在log4j,只有降低日志級別,不過這樣會打出大量的日志,會影響應用性能。在Logback,你可以繼續 保持那個日志級別而除掉某種特殊情況,如alice這個用戶登錄,她的日志將打在DEBUG級別而其他用戶可以繼續打在WARN級別。要實現這個功能只需 加4行XML配置。可以參考MDCFIlter 。
10、SiftingAppender(一個非常多功能的Appender) 它可以用來分割日志文件根據任何一個給定的運行參數。如,SiftingAppender能夠區別日志事件跟進用戶的Session,然后每個用戶會有一個日志文件。
11、自動壓縮已經打出來的log RollingFileAppender在產生新文件的時候,會自動壓縮已經打出來的日志文件。壓縮是個異步過程,所以甚至對於大的日志文件,在壓縮過程中應用不會受任何影響。
12、堆棧樹帶有包版本 Logback在打出堆棧樹日志時,會帶上包的數據。
13、自動去除舊的日志文件 通過設置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory屬性,你可以控制已經產生日志文件的最大數量。如果設置maxHistory 12,那那些log文件超過12個月的都會被自動移除。
總之,logback比log4j太優秀了,讓我們的應用全部建立logback上吧 !
2.3 Logback配置
Logback可以以編程方式配置,也可以配置為以XML或Groovy格式表示的配置腳本。順便說一下,現有的log4j用戶可以使用我們的 PropertiesTranslator Web應用程序將其log4j.properties文件轉換 為logback.xml-->地址:https://logback.qos.ch/translator/
讓我們從討論初始化步驟開始,嘗試配置自己:
1.Logback嘗試在類路徑中找到一個名為logback-test.xml 的文件 。
2.如果沒有找到這樣的文件,logback嘗試在類路徑中找到一個名為logback.groovy 的文件 。
3.如果沒有找到這樣的文件,它會檢查classpath中的文件 logback.xml 。
4.If no such file is found, service-provider loading facility (introduced in JDK 1.6) is used to resolve the implementation of com.qos.logback.classic.spi.Configurator interface by looking up the file META-INF\services\ch.qos.logback.classic.spi.Configurator in the class path. Its contents should specify the fully qualified class name of the desired Configurator implementation
5.如果以上都不成功,則logback會自動配置,BasicConfigurator 這將導致日志輸出被導向控制台。
java代碼使用example:final static Logger logger = LoggerFactory.getLogger(MyApp1.class);logger.info("Entering application.");
小提示:
1.如果您使用Maven,並且將 logback-test.xml放在src / test / resources 文件夾下,Maven將確保它不會包含在生成的工件中。因此,您可以使用不同的配置文件,即測試期間的logback-test.xml,以及生產中的另一個文件,即logback.xml
2.Logger 可以被分配級別。級別包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定義於 ch.qos.logback.classic.Level類。如果 logger沒有被分配級別,那么它將從有被分配級別的最近的祖先那里繼承級別。root logger 默認級別是 DEBUG
3.打印方法決定記錄請求的級別。例如,如果 L 是一個 logger 實例,那么,語句 L.info("..")是一條級別為 INFO 的記錄語句。記錄請求的級別在高於或等於其 logger 的有效級別時被稱為被啟用,否則,稱為被禁用。記錄請求級別為 p,其logger的有效級別為 q,只有則當 p>=q時,該請求才會被執行。該規則是 logback 的核心。級別排序為: TRACE < DEBUG < INFO < WARN < ERROR
logback日志框架官網:http://logback.qos.ch
2.1 logback日志框架的簡介(摘自官網-->英文不好湊合看吧)
Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.
(Logback旨在作為受歡迎的log4j項目的繼承者,它拾起log4j離開的地方。)
Logback's architecture is sufficiently generic so as to apply under different circumstances. At present time, logback is divided into three modules, logback-core, logback-classic and logback-access.
(Logback的架構是非常通用的,以便在不同的情況下應用。目前,logback分為三個模塊:logback-core,logback-classic和logback-access。)
The logback-core module lays the groundwork for the other two modules. The logback-classic module can be assimilated to a significantly improved version of log4j. Moreover, logback-classic natively implements the SLF4J API so that you can readily switch back and forth between logback and other logging frameworks such as log4j or java.util.logging (JUL).
(對數核心模塊為其他兩個模塊奠定了基礎。logback-classic模塊可以被同化到顯着改進的log4j版本。此外,logback-classic本機實現了SLF4J API,以便您可以輕松地在logback和log4j或java.util.logging(JUL)之類的日志記錄框架之間來回切換。)
The logback-access module integrates with Servlet containers, such as Tomcat and Jetty, to provide HTTP-access log functionality. Note that you could easily build your own module on top of logback-core.
(回溯訪問模塊與Servlet容器(如Tomcat和Jetty)集成,以提供HTTP訪問日志功能。請注意,您可以輕松地在logback-core之上構建自己的模塊。)
2.2 從log4j切換到logback上的原因(摘自官網)
1、更快的實現 Logback的內核重寫了,在一些關鍵執行路徑上性能提升10倍以上。而且logback不僅性能提升了,初始化內存加載也更小了。
2、非常充分的測試 Logback經過了幾年,數不清小時的測試。Logback的測試完全不同級別的。在作者的觀點,這是簡單重要的原因選擇logback而不是log4j。
3、Logback-classic非常自然實現了SLF4j Logback-classic實現了 SLF4j。在使用SLF4j中,你都感覺不到logback-classic。而且因為logback-classic非常自然地實現了SLF4J, 所 以切換到log4j或者其他,非常容易,只需要提供成另一個jar包就OK,根本不需要去動那些通過SLF4JAPI實現的代碼。
4、非常充分的文檔 官方網站有兩百多頁的文檔。
5、自動重新加載配置文件 當配置文件修改了,Logback-classic能自動重新加載配置文件。掃描過程快且安全,它並不需要另外創建一個掃描線程。這個技術充分保證了應用程序能跑得很歡在JEE環境里面。
6、Lilith Lilith是log事件的觀察者,和log4j的chainsaw類似。而lilith還能處理大數量的log數據 。
7、謹慎的模式和非常友好的恢復 在謹慎模式下,多個FileAppender實例跑在多個JVM下,能 夠安全地寫道同一個日志文件。RollingFileAppender會有些限制。Logback的FileAppender和它的子類包括 RollingFileAppender能夠非常友好地從I/O異常中恢復。
8、配置文件可以處理不同的情況 開發人員經常需要判斷不同的Logback配置文件在不同的環境下(開發,測試,生產)。而這些配置文件僅僅只有一些很小的不同,可以通過,和來實現,這樣一個配置文件就可以適應多個環境。
9、Filters(過濾器) 有些時候,需要診斷一個問題,需要打出日志。在log4j,只有降低日志級別,不過這樣會打出大量的日志,會影響應用性能。在Logback,你可以繼續 保持那個日志級別而除掉某種特殊情況,如alice這個用戶登錄,她的日志將打在DEBUG級別而其他用戶可以繼續打在WARN級別。要實現這個功能只需 加4行XML配置。可以參考MDCFIlter 。
10、SiftingAppender(一個非常多功能的Appender) 它可以用來分割日志文件根據任何一個給定的運行參數。如,SiftingAppender能夠區別日志事件跟進用戶的Session,然后每個用戶會有一個日志文件。
11、自動壓縮已經打出來的log RollingFileAppender在產生新文件的時候,會自動壓縮已經打出來的日志文件。壓縮是個異步過程,所以甚至對於大的日志文件,在壓縮過程中應用不會受任何影響。
12、堆棧樹帶有包版本 Logback在打出堆棧樹日志時,會帶上包的數據。
13、自動去除舊的日志文件 通過設置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory屬性,你可以控制已經產生日志文件的最大數量。如果設置maxHistory 12,那那些log文件超過12個月的都會被自動移除。
總之,logback比log4j太優秀了,讓我們的應用全部建立logback上吧 !
2.3 Logback配置
Logback可以以編程方式配置,也可以配置為以XML或Groovy格式表示的配置腳本。順便說一下,現有的log4j用戶可以使用我們的 PropertiesTranslator Web應用程序將其log4j.properties文件轉換 為logback.xml-->地址:https://logback.qos.ch/translator/
讓我們從討論初始化步驟開始,嘗試配置自己:
1.Logback嘗試在類路徑中找到一個名為logback-test.xml 的文件 。
2.如果沒有找到這樣的文件,logback嘗試在類路徑中找到一個名為logback.groovy 的文件 。
3.如果沒有找到這樣的文件,它會檢查classpath中的文件 logback.xml 。
4.If no such file is found, service-provider loading facility (introduced in JDK 1.6) is used to resolve the implementation of com.qos.logback.classic.spi.Configurator interface by looking up the file META-INF\services\ch.qos.logback.classic.spi.Configurator in the class path. Its contents should specify the fully qualified class name of the desired Configurator implementation
5.如果以上都不成功,則logback會自動配置,BasicConfigurator 這將導致日志輸出被導向控制台。
java代碼使用example:final static Logger logger = LoggerFactory.getLogger(MyApp1.class);logger.info("Entering application.");
小提示:
1.如果您使用Maven,並且將 logback-test.xml放在src / test / resources 文件夾下,Maven將確保它不會包含在生成的工件中。因此,您可以使用不同的配置文件,即測試期間的logback-test.xml,以及生產中的另一個文件,即logback.xml
2.Logger 可以被分配級別。級別包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定義於 ch.qos.logback.classic.Level類。如果 logger沒有被分配級別,那么它將從有被分配級別的最近的祖先那里繼承級別。root logger 默認級別是 DEBUG
3.打印方法決定記錄請求的級別。例如,如果 L 是一個 logger 實例,那么,語句 L.info("..")是一條級別為 INFO 的記錄語句。記錄請求的級別在高於或等於其 logger 的有效級別時被稱為被啟用,否則,稱為被禁用。記錄請求級別為 p,其logger的有效級別為 q,只有則當 p>=q時,該請求才會被執行。該規則是 logback 的核心。級別排序為: TRACE < DEBUG < INFO < WARN < ERROR
example:
</div>
<?xml version="1.0" encoding="UTF-8"?>
<!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
<!-- 1、logger 5 屬性: 6 1)name:用來指定受此logger約束的某一個包或者具體的某一個類 7 2)level:用來設置打印級別,大小寫無關(最常用的幾種):DEBUG, INFO, WARN, ERROR 8 2、 9 -->
<!-- <logger name="org.springframework.web" level="DEBUG" /> -->
<!-- show parameters for hibernate sql 專為 Hibernate 定制 -->
<!--<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />-->
<!--<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />-->
<!--<logger name="org.hibernate.SQL" level="DEBUG" />-->
<!--<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />-->
<!--<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />-->
<!-- mybatis日志打印 -->
<!-- <logger name="com.ibatis" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" /> -->
<!-- <logger name="java.sql.Connection" level="DEBUG" /> -->
<!-- <logger name="java.sql.Statement" level="DEBUG" /> -->
<!-- <logger name="java.sql.PreparedStatement" level="DEBUG" /> -->
<!-- 這一句至關重要如果沒有,就無法輸出sql語句 -->
<!--<logger name="com.xuexin.xcloud.print.service.mapper" level="DEBUG"></logger>-->
<!-- 說明: 1、日志級別及文件 日志記錄采用分級記錄,級別與日志文件名相對應,不同級別的日志信息記錄到不同的日志文件中 例如:error級別記錄到log_error_xxx.log或log_error.log(該文件為當前記錄的日志文件),而log_error_xxx.log為歸檔日志, 日志文件按日期記錄,同一天內,若日志文件大小等於或大於2M,則按0、1、2...順序分別命名 例如log-level-2013-12-21.0.log 其它級別的日志也是如此。 2、文件路徑 若開發、測試用,在Eclipse中運行項目,則到Eclipse的安裝路徑查找logs文件夾,以相對路徑../logs。 若部署到Tomcat下,則在Tomcat下的logs文件中 3、Appender FILEERROR對應error級別,文件名以log-error-xxx.log形式命名 FILEWARN對應warn級別,文件名以log-warn-xxx.log形式命名 FILEINFO對應info級別,文件名以log-info-xxx.log形式命名 FILEDEBUG對應debug級別,文件名以log-debug-xxx.log形式命名 stdout將日志信息輸出到控制上,為方便開發測試使用 -->
<!-- 彩色日志 -->
<!-- 彩色日志依賴的渲染類 -->
<!-- 彩色日志格式 -->
<!--包名輸出縮進對齊-->
<!--<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(-){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />-->xcloud-print
<!--設置系統日志目錄-->
<!-- 日志記錄器,日期滾動記錄 -->
<!-- 正在記錄的日志文件的路徑及文件名 -->${LOG_PATH}/${APPDIR}/xcloud-print_log_error.log
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->${LOG_PATH}/${APPDIR}/error/xcloud-print_log-error-%d{yyyy-MM-dd}.%i.log
<!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始, 命名日志文件,例如log-error-2013-12-21.0.log -->12MB
<!-- 追加方式記錄日志 -->true
<!-- 日志文件的格式 -->%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%nutf-8
<!-- 此日志文件只記錄error級別的 -->errorACCEPTDENY
<!-- 日志記錄器,日期滾動記錄 -->
<!-- 正在記錄的日志文件的路徑及文件名 -->${LOG_PATH}/${APPDIR}/xcloud-print_log_warn.log
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->${LOG_PATH}/${APPDIR}/warn/xcloud-print_log-warn-%d{yyyy-MM-dd}.%i.log
<!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始, 命名日志文件,例如log-error-2013-12-21.0.log -->12MB
<!-- 追加方式記錄日志 -->true
<!-- 日志文件的格式 -->%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%nutf-8
<!-- 此日志文件只記錄warn級別的 -->warnACCEPTDENY
<!-- 日志記錄器,日期滾動記錄 -->
<!-- 正在記錄的日志文件的路徑及文件名 -->${LOG_PATH}/${APPDIR}/xcloud-print_log_info.log
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->${LOG_PATH}/${APPDIR}/info/xcloud-print_log-info-%d{yyyy-MM-dd}.%i.log
<!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始, 命名日志文件,例如log-error-2013-12-21.0.log -->12MB
<!-- 追加方式記錄日志 -->true
<!-- 日志文件的格式 -->%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%nutf-8
<!-- 此日志文件只記錄info級別的 -->infoACCEPTDENY
<!-- 日志記錄器,日期滾動記錄 -->
<!-- 正在記錄的日志文件的路徑及文件名 -->${LOG_PATH}/${APPDIR}/xcloud-print_log_debug.log
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->${LOG_PATH}/${APPDIR}/info/xcloud-print_log-debug-%d{yyyy-MM-dd}.%i.log
<!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始, 命名日志文件,例如log-error-2013-12-21.0.log -->12MB
<!-- 追加方式記錄日志 -->true
<!-- 日志文件的格式 -->%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%nutf-8
<!-- 此日志文件只記錄debug級別的 -->debugACCEPTDENY
<!--encoder 默認配置為PatternLayoutEncoder-->${CONSOLE_LOG_PATTERN}
<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level -undefinedundefined [%thread] %logger Line:%-3L - %msg%n</pattern>-->utf-8
<!--此日志appender是為開發使用,只配置最底級別,控制台輸出的日志級別是大於或等於此級別的日志信息-->debug
<!-- mybatis日志打印 -->
<!-- 生產環境下,將此級別配置為適合的級別,以免日志文件太多或影響程序性能 -->
<!-- 生產環境將請stdout,testfile去掉 -->
<!--日志異步到數據庫 -->
<!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">-->
<!-- <!–日志異步到數據庫 –>-->
<!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">-->
<!-- <!–連接池 –>-->
<!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">-->
<!--<driverClass>com.mysql.jdbc.Driver</driverClass>-->
<!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>-->
<!--<user>root</user>-->
<!--<password>root</password>-->
<!--</dataSource>-->
<!--</connectionSource>-->
<!--</appender>-->
原文地址:https://blog.csdn.net/long290046464/article/details/73790203
