logback日志记录器讲解
生活随笔
收集整理的這篇文章主要介紹了
logback日志记录器讲解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們看一下日志記錄器的支持,logback,既支持log4j,也支持logback,找到我們的pom文件,然后看一下他的注入包,在這里我們可以看到有log4j的jar包,有slf4j的,還有logback,還有log4j的都有,logback有的人可能知道他,是log4j的一個擴展,據說logback的日志記錄性能,要比log4j的性能要高很多,所以logback以后有替代log4j的一個趨勢,所以在springboot當中,他在WEB啟動器當中,包含了logback的jar包,那么也就是說,現在在我們的SpringBoot當中,可以使用logback日志記錄器了,我們來看一下logback日志記錄器的使用,首先他需要有一個配置文件,logback日志記錄器的一個日志文件,他的配置文件叫什么呢,叫logback.xml,我們現在去把配置文件的模板找過來,放到我們的resources目錄下,然后我們看一下,其實logback和log4j的最大的區別,就是配置文件上有變化,log4j使用的是properties配置文件,但是在logback日志記錄器當中呢,他的配置文件使用的是XML的配置,其實配置項也都差不多,logback相對于log4j相對更豐富一些,我們來看一下,我們先來看第一個<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
<property name="LOG_HOME" value="${catalina.base}/logs/" />這個定義的是什么呢,上面有注釋,它是定義日志文件的存儲地址,在logback當中使用相對路徑,我會把項目的相對路徑,后面加一個logs,作為我未來存放日志文件的一個位置,相對于抽象化出來一個項目的根路徑,并且后面加了一個logs,<!-- 控制臺輸出 -->
<appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender"><!-- 日志輸出編碼 --> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout>
</appender> 這一塊對應是我們的log4j當中的appender的設置,這一部分表示的是向控制臺輸出,然后appender后面有一個name,name叫什么都行,他的名字是我自己來定義的,表示我們這個日志輸出的一個名稱,然后后面是一個class,意思是向控制臺輸出,我們log4j當中,向控制臺輸出是ConsoleAppender,然后Appender里面有日志輸出的內容,比如說他的布局,然后用的也是他的PatternLayout,里面是pattern,是他輸出的一個格式,這個其實是和我們的log4j編寫格式是一模一樣的,不同的是像我們原來的key,現在變成用XML的節點來表示了,所以這塊也并不是很復雜,我來說一下,這個是向控制臺輸出的一個格式,下面這一部分呢<!-- 按照每天生成日志文件 -->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件輸出的文件名--><FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory></rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout> <!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy>
</appender>其實就是向文件輸出了,RollingFile,RollingFileAppender,然后日志輸出的文件名稱,因為你要向文件輸出,你肯定要有一個文件輸出的名稱,然后在這里你看,取了LOG_HOME,就是項目根目錄下的logs文件夾,將作為我存放文件的一個位置,server.%d{yyyy-MM-dd}.log這是我日志文件的名稱,日志文件的名稱我加了一個server的前綴,用日期來表示日志文件,不同日志文件的區別,<MaxHistory>30</MaxHistory>然后這是創建多少個日志文件,最多創建30個日志文件,然后這是向日志文件中輸出的格式<layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern>
</layout> 然后這是日志文件的大小<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>單個文件超過10MB了,它會重新去創建一個日志文件,來進行日志的保存,然后下面這一塊是日志輸出的級別<root level="debug"> <appender-ref ref="Stdout" /> <appender-ref ref="RollingFile" />
</root> 這就相當于log4j上面的root,現在我是輸出debug級別的,然后向控制臺輸出,同時又想文件輸出,如果你只想控制臺輸出,不想向文件當中輸出,你把這個去掉就可以了,<appender-ref ref="RollingFile" /> <root level="debug"> <appender-ref ref="Stdout" />
</root>然后級別這塊我們也可以設置多個,由低到高,由高到低,logback還支持將日志信息同步到數據庫里<!--日志異步到數據庫 -->
<!-- <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> -->因為我們不打算做數據庫的同步了,這塊留著一個模板,想把信息同步到數據庫當中,這個可以放開,這個我們也可以簡單的看一下,他用的是一個DBAppender去做的,然后這里需要注意的就是,配置一個數據源,他這里數據源用的是C3P0的數據源,就意味著你這個數據庫必須要有C3P0的數據源,然后這塊是MYSQL的驅動,然后你如果是ORACLE就寫ORACLE的驅動,然后就是連接MYSQL的url,換乘自己庫的信息就可以了,用戶名和密碼,把這些配好以后,他在產生錯誤的時候呢,會將日志同步到數據庫當中,其實這個過程是我們需要注意的,因為什么呢,日志他的量肯定是非常大的,如果我們把信息都同步到數據庫當中,對于數據庫來講,壓力也是非常大的,很少才采取這樣的策略去保存,我們這塊說完了,我們可以看一下,其實我們只要加入這個配置文件就可以了,jar包我們就不用了,我們打開pom文件,我們看到有logback的jar包了
現在我們輸出的是DEBUG級別,那我們來看一下是不是按照DEBUG級別來輸出的<root level="DEBUG"> <appender-ref ref="Stdout" /> <appender-ref ref="RollingFile" />
</root> 我們發現比沒有加logback之前的日志要多的多,我們看上面,都是DEBUG級別的,當然DEBUG級別的信息太多了,可以根據自己的需要去調整,比如我們這里改成info<root level="info"> <appender-ref ref="Stdout" /> <appender-ref ref="RollingFile" />
</root> 只是輸出info級別的,我們可以運行一下,我們可以看到信息明顯的小了不少,我們現在輸出的也都是info級別的了,或者是warn級別,或者是error級別,可以根據自己的需求來定義,所以logback的配置文件呢,相對于log4j的配置文件呢,可能在表現形式上,可能更復雜一些,但是其實功能比我們的log4j功能要強大一些,還有就是性能上,要高于我們的log4j,所以這一塊可以去看一看,更詳細的一個配置,這里就不做太多的介紹,不是一個太復雜的一個技術,如果我們有log4j的底子去看這個東西,是非常的簡單,如果我們項目當中要用logback日志記錄,第一步需要導入相關的jar包,log4j的jar肯定要導入進來了,第二個是添加logback的配置文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>springboot-hello</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-hello</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!-- springBoot的啟動器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
<?xml version="1.0" encoding="UTF-8" ?><configuration>
<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="${catalina.base}/logs/" /> <!-- 控制臺輸出 --> <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender"><!-- 日志輸出編碼 --> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout> </appender> <!-- 按照每天生成日志文件 --> <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件輸出的文件名--><FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory></rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout> <!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender> <!-- 日志輸出級別 --><root level="info"> <appender-ref ref="Stdout" /> <appender-ref ref="RollingFile" /> </root> <!--日志異步到數據庫 -->
<!-- <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> --></configuration>
package com.learn.springboothello;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringbootHelloApplication {public static void main(String[] args) {SpringApplication.run(SpringbootHelloApplication.class, args);}}
?
總結
以上是生活随笔為你收集整理的logback日志记录器讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全局配置文件操作
- 下一篇: 使用Actuator检查与监控