国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Spring-Boot添加日志和使用spring-boot-devtools(熱部署)

2019-11-08 19:57:11
字體:
供稿:網(wǎng)友

SPRing-Boot添加日志和使用spring-boot-devtools(熱部署)

一、logback的介紹  Logback是由log4j創(chuàng)始人設(shè)計(jì)的另一個開源日志組件,官方網(wǎng)站: http://logback.qos.ch。它當(dāng)前分為下面下個模塊:  logback-core:其它兩個模塊的基礎(chǔ)模塊  logback-classic:它是log4j的一個改良版本,同時它完整實(shí)現(xiàn)了slf4j API使你可以很方便地更換成其它日志系統(tǒng)如log4j或JDK14 Logging  logback-access:訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能二、logback取代log4j的理由:  1、更快的實(shí)現(xiàn):Logback的內(nèi)核重寫了,在一些關(guān)鍵執(zhí)行路徑上性能提升10倍以上。而且logback不僅性能提升了,初始化內(nèi)存加載也更小了。  2、非常充分的測試:Logback經(jīng)過了幾年,數(shù)不清小時的測試。Logback的測試完全不同級別的。  3、Logback-classic非常自然實(shí)現(xiàn)了SLF4j:Logback-classic實(shí)現(xiàn)了SLF4j。在使用SLF4j中,你都感覺不到logback-classic。而且因?yàn)閘ogback-classic非常自然地實(shí)現(xiàn)了slf4j , 所 以切換到log4j或者其他,非常容易,只需要提供成另一個jar包就OK,根本不需要去動那些通過SLF4JAPI實(shí)現(xiàn)的代碼。  4、非常充分的文檔 官方網(wǎng)站有兩百多頁的文檔。  5、自動重新加載配置文件,當(dāng)配置文件修改了,Logback-classic能自動重新加載配置文件。掃描過程快且安全,它并不需要另外創(chuàng)建一個掃描線程。這個技術(shù)充分保證了應(yīng)用程序能跑得很歡在JEE環(huán)境里面。  6、Lilith是log事件的觀察者,和log4j的chainsaw類似。而lilith還能處理大數(shù)量的log數(shù)據(jù) 。  7、謹(jǐn)慎的模式和非常友好的恢復(fù),在謹(jǐn)慎模式下,多個FileAppender實(shí)例跑在多個JVM下,能 夠安全地寫道同一個日志文件。RollingFileAppender會有些限制。Logback的FileAppender和它的子類包括 RollingFileAppender能夠非常友好地從I/O異常中恢復(fù)。  8、配置文件可以處理不同的情況,開發(fā)人員經(jīng)常需要判斷不同的Logback配置文件在不同的環(huán)境下(開發(fā),測試,生產(chǎn))。而這些配置文件僅僅只有一些很小的不同,可以通過,和來實(shí)現(xiàn),這樣一個配置文件就可以適應(yīng)多個環(huán)境。  9、Filters(過濾器)有些時候,需要診斷一個問題,需要打出日志。在log4j,只有降低日志級別,不過這樣會打出大量的日志,會影響應(yīng)用性能。在Logback,你可以繼續(xù) 保持那個日志級別而除掉某種特殊情況,如alice這個用戶登錄,她的日志將打在DEBUG級別而其他用戶可以繼續(xù)打在WARN級別。要實(shí)現(xiàn)這個功能只需加4行xml配置。可以參考MDCFIlter 。  10、SiftingAppender(一個非常多功能的Appender):它可以用來分割日志文件根據(jù)任何一個給定的運(yùn)行參數(shù)。如,SiftingAppender能夠區(qū)別日志事件跟進(jìn)用戶的session,然后每個用戶會有一個日志文件。  11、自動壓縮已經(jīng)打出來的log:RollingFileAppender在產(chǎn)生新文件的時候,會自動壓縮已經(jīng)打出來的日志文件。壓縮是個異步過程,所以甚至對于大的日志文件,在壓縮過程中應(yīng)用不會受任何影響。  12、堆棧樹帶有包版本:Logback在打出堆棧樹日志時,會帶上包的數(shù)據(jù)。  13、自動去除舊的日志文件:通過設(shè)置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory屬性,你可以控制已經(jīng)產(chǎn)生日志文件的最大數(shù)量。如果設(shè)置maxHistory 12,那那些log文件超過12個月的都會被自動移除。

		<!-- Logging with SLF4J & LogBack -->		<dependency>			<groupId>org.slf4j</groupId>			<artifactId>slf4j-api</artifactId>			<version>${slf4j.version}</version>			<scope>compile</scope>		</dependency>		<dependency>			<groupId>ch.qos.logback</groupId>			<artifactId>logback-classic</artifactId>			<version>${logback.version}</version>			<scope>runtime</scope>		</dependency>技術(shù)介紹devtools:是boot的一個熱部署工具,當(dāng)我們修改了classpath下的文件(包括類文件、屬性文件、頁面等)時,會重新啟動應(yīng)用(由于其采用的雙類加載器機(jī)制,這個啟動會非常快,如果發(fā)現(xiàn)這個啟動比較慢,可以選擇使用jrebel)雙類加載器機(jī)制:boot使用了兩個類加載器來實(shí)現(xiàn)重啟(restart)機(jī)制:base類加載器(簡稱bc)+restart類加載器(簡稱rc)。 bc:用于加載不會改變的jar(eg.第三方依賴的jar)rc:用于加載我們正在開發(fā)的jar(eg.整個項(xiàng)目里我們自己編寫的類)。當(dāng)應(yīng)用重啟后,原先的rc被丟掉、重新new一個rc來加載這些修改過的東西,而bc卻不需要動一下。這就是devtools重啟速度快的原因。thymeleaf:boot推薦的模板引擎,這里做簡要的介紹,用來介紹devtools對頁面的熱部署。

		<!-- thymeleaf -->		<dependency>			<groupId>org.springframework.boot</groupId>			<artifactId>spring-boot-starter-thymeleaf</artifactId>		</dependency>		<!-- devtools可以實(shí)現(xiàn)頁面熱部署(即頁面修改后會立即生效,這個可以直接在application.properties文件中配置spring.thymeleaf.cache=false來實(shí)現(xiàn)), 			實(shí)現(xiàn)類文件熱部署(類文件修改后不會立即生效),實(shí)現(xiàn)對屬性文件的熱部署。 即devtools會監(jiān)聽classpath下的文件變動,并且會立即重啟應(yīng)用(發(fā)生在保存時機(jī)),注意:因?yàn)槠洳捎玫奶摂M機(jī)機(jī)制,該項(xiàng)重啟是很快的 -->		<dependency>			<groupId>org.springframework.boot</groupId>			<artifactId>spring-boot-devtools</artifactId>			<optional>true</optional><!-- optional=true,依賴不會傳遞,該項(xiàng)目依賴devtools;之后依賴myboot項(xiàng)目的項(xiàng)目如果想要使用devtools,需要重新引入 -->		</dependency>

說明:如果僅僅使用thymeleaf,只需要引入thymeleaf;如果需要使用devtools,只需要引入devtools。注意:    maven中的optional=true表示依賴不會傳遞。即此處引用的devtools不會傳遞到依賴myboot項(xiàng)目的項(xiàng)目中。    僅僅加入devtools在我們的eclipse中還不起作用,這時候還需要對之前添加的spring-boot-maven-plugin做一些修改,如下:

			<!-- 用于將應(yīng)用打成可直接運(yùn)行的jar(該jar就是用于生產(chǎn)環(huán)境中的jar) 值得注意的是,如果沒有引用spring-boot-starter-parent做parent, 				且采用了上述的第二種方式,這里也要做出相應(yīng)的改動 -->			<plugin>				<groupId>org.springframework.boot</groupId>				<artifactId>spring-boot-maven-plugin</artifactId>				<configuration>					<fork>true</fork><!-- 如果沒有該項(xiàng)配置,肯呢個devtools不會起作用,即應(yīng)用不會restart -->				</configuration>			</plugin>測試:修改類-->保存:應(yīng)用會重啟修改配置文件-->保存:應(yīng)用會重啟修改頁面-->保存:應(yīng)用不會重啟,但會重新加載,頁面會刷新(原理是將spring.thymeleaf.cache設(shè)為false)補(bǔ)充:默認(rèn)情況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些文件夾下的文件修改不會使應(yīng)用重啟,但是會重新加載(devtools內(nèi)嵌了一個LiveReload server,當(dāng)資源發(fā)生改變時,瀏覽器刷新)。如果想改變默認(rèn)的設(shè)置,可以自己設(shè)置不重啟的目錄:spring.devtools.restart.exclude=static/**,public/**,這樣的話,就只有這兩個目錄下的文件修改不會導(dǎo)致restart操作了。如果要在保留默認(rèn)設(shè)置的基礎(chǔ)上還要添加其他的排除目錄:spring.devtools.restart.additional-exclude如果想要使得當(dāng)非classpath下的文件發(fā)生變化時應(yīng)用得以重啟,使用:spring.devtools.restart.additional-paths,這樣devtools就會將該目錄列入了監(jiān)聽范圍。

排除靜態(tài)資源文件靜態(tài)資源文件在改變之后有時候沒必要觸發(fā)應(yīng)用程序重啟,例如,Thymeleaf的模板會被變量替代。默認(rèn)的,/META-INF/maven、/META-INF/resources、/resources、/static、/public或者/templates這些目錄下的文件修改之后不會觸發(fā)重啟但是會觸發(fā)LiveReload。

可以使用spring.devtools.restart.exclude屬性配置,例如 spring.devtools.restart.exclude=static/**,public/** ※ 如果想保留默認(rèn)配置,同時增加新的配置,則可使用spring.devtools.restart.additional-exclude屬性

 

=========


上一篇:太空梯

下一篇:完全背包總結(jié)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 迁西县| 宝鸡市| 平定县| 岑溪市| 修水县| 平度市| 万州区| 南溪县| 宣城市| 平和县| 禄劝| 台州市| 怀宁县| 温宿县| 芷江| 漳浦县| 绥中县| 高要市| 中山市| 灌南县| 武汉市| 吉林省| 沈丘县| 平江县| 巍山| 衡水市| 中卫市| 博野县| 嘉善县| 呈贡县| 舞阳县| 嵊泗县| 涞水县| 商城县| 宣化县| 横山县| 南阳市| 霍城县| 平塘县| 宜春市| 清苑县|