1.簡介
為了方便檢視和歸檔:(1)不同包的日誌可能要放到不同的檔案中,如service層和dao層的日誌;(2)不同日誌級別:除錯、資訊、警告和錯誤等也要分檔案輸出。所以巨集哥今天主要介紹和分享的是:使用logback輸出日誌到不同檔案。廢話不說直入主題。
2.第一種方法:根據包輸出
根據包輸出,通過logger的name屬性指定不同的包,具體步驟如下:
1. 建立不同包下的兩個類
2. 在logback(-test).xml中新增
3. 測試方法
2.1建立不同包
1.建立不同包並在包下新建類ADao和BService。如下圖所示:
(1)ADao
(2)BService
2.參考程式碼
(1)ADao.java
package dao; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Logger; /** * @author 北京-巨集哥 * * @公眾號:北京巨集哥 * * 《手把手教你》系列基礎篇(九十一)-java+ selenium自動化測試-框架設計基礎-Logback實現日誌輸出-下篇(詳解教程) * * 2022年3月29日 */ public class ADao { static final Logger log = (Logger) LoggerFactory.getLogger(ADao.class); public void queryADao() { log.debug("query queryADao start..."); log.error("An error occurred during the query"); log.debug("query queryADao end..."); } }
(2)BService.java
package service; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Logger; import dao.ADao; /** * @author 北京-巨集哥 * * @公眾號:北京巨集哥 * * 《手把手教你》系列基礎篇(九十一)-java+ selenium自動化測試-框架設計基礎-Logback實現日誌輸出-下篇(詳解教程) * * 2022年3月29日 */ public class BService { static final Logger log = (Logger) LoggerFactory.getLogger(BService.class); ADao ad = new ADao(); public void bObligate() { log.debug("bObligate start..."); ad.queryADao(); log.error("An error occurred during the progress"); log.debug("bObligate end..."); } }
2.2logback.xml
1.新建logback.xml檔案,而且在logback.xml中新增如下圖所示內容:
2.參考程式碼
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="serviceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>./logs2/bribery.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/logs2/bribery-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> </encoder> </appender> <appender name="daoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>./logs2/venality.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>./logs2/venality-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> </encoder> </appender> <logger name="service.BService" level="DEBUG" additivity="false"> <appender-ref ref="serviceAppender" /> </logger> <logger name="dao.ADao" level="DEBUG" additivity="false"> <appender-ref ref="daoAppender" /> </logger> <!-- root的預設level是DEBUG --> <root level="DEBUG"> <appender-ref ref="rollingAppender" /> </root> </configuration>
2.3測試方法
1.新建測試類。如下圖所示:
2.參考程式碼
import service.BService; /** * @author 北京-巨集哥 * * @公眾號:北京巨集哥 * * 《手把手教你》系列基礎篇(九十一)-java+ selenium自動化測試-框架設計基礎-Logback實現日誌輸出-下篇(詳解教程) * * 2022年3月29日 */ public class testLogback { public static void main(String[] args) { BService bs = new BService(); bs.bObligate(); } }
2.4執行測試方法
1.執行程式碼,右鍵Run AS->Java Appliance,控制檯輸出,如下圖所示:
2.輸出的日誌檔案,如下圖所示:
3.第二種方法:根據日誌級別輸出
在這裡巨集哥把所有級別為ERROR的日誌輸出到一個檔案中。
這裡巨集哥還是延續使用上邊的程式碼,只需要一個勁的修改logback.xml檔案的內容即可!
3.1加入過濾器
1.修改logback(-test).xml檔案:在serviceAppender和daoAppender都加入以下級別過濾器,這樣錯誤日誌就不會在bribery.log和venality.log中列印了,程式碼如下:
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter>
3.2新建一個appender
1.新建一個錯誤日誌的appender,程式碼如下:
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/logs/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/logs/venality-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} %thread %X{invokeNo} %logger{40} %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只列印錯誤日誌 --> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
3.2加上errorAppender
在name為dao.ADao和service.BService的logger都加上errorAppender,程式碼如下:
<appender-ref ref="errorAppender" />
3.4完整的logback.xml檔案
1.修改完成的logback.xml檔案,如下圖所示:
2.參考程式碼
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="serviceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>./logs3/bribery.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/logs3/bribery-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> </appender> <appender name="daoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>./logs3/venality.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>./logs3/venality-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> </appender> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>./logs3/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/logs3/venality-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} %thread %X{invokeNo} %logger{40} %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只列印錯誤日誌 --> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name="service.BService" level="DEBUG" additivity="false"> <appender-ref ref="serviceAppender" /> <appender-ref ref="errorAppender" /> </logger> <logger name="dao.ADao" level="DEBUG" additivity="false"> <appender-ref ref="daoAppender" /> <appender-ref ref="errorAppender" /> </logger> <!-- root的預設level是DEBUG --> <root level="DEBUG"> <appender-ref ref="rollingAppender" /> </root> </configuration>
3.5執行測試方法
1.修改完成後,執行程式碼,右鍵Run AS->Java Appliance,控制檯輸出,如下圖所示:
2.輸出的日誌檔案,如下圖所示:
從上圖可以看出:service和dao的錯誤日誌都列印到error.log檔案中了。
4.小結
好了,時間也不早了,今天就分享和講解到這裡,希望對您有所幫助,感謝您耐心地閱讀!