日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实战SSM_O2O商铺_06logback配置与使用

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战SSM_O2O商铺_06logback配置与使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 日志概述
    • logging
    • log4j
    • commons-logging
    • slf4j
    • logback
    • 日志框架總結
  • Maven依賴
  • logback加載配置文件規則
  • logback 日志級別
  • 配置
  • 測試
  • Github地址

日志概述

log4j、Logging、commons-logging、slf4j、logback,都耳熟能詳吧,那么具體的區別和聯系呢,我們這里借o2o這個小項目的機會梳理一下。

logging

Java 自帶的日志工具類,在 JDK 1.5 開始就已經有了,在 java.util.logging 包下。


log4j

Log4j 是 Apache 的一個開源日志框架,也是市場占有率最多的一個框架,log4j 在 2015/08/05 Apache 宣布停止維護了,用戶需要切換到 Log4j2上面去。


commons-logging

log4j 是一個具體的日志框架的實現,而 commons-logging 就是日志的門面接口,它也是 apache 最早提供的日志門面接口,用戶可以根據喜好選擇不同的日志實現框架,而不必改動日志定義,這就是日志門面的好處,符合面對接口抽象編程。


slf4j

全稱:Simple Logging Facade for Java,即簡單日志門面接口,和 Apache 的 commons-logging 是一樣的概念,它們都不是具體的日志框架,你可以指定其他主流的日志實現框架。

Slf4j 也是現在主流的日志門面框架,使用 Slf4j 可以很靈活的使用占位符進行參數占位,簡化代碼,擁有更好的可讀性。


logback

Logback 是 Slf4j 的原生實現框架,同樣也是出自 Log4j 一個人之手,但擁有比 log4j 更多的優點、特性和更做強的性能,現在基本都用來代替 log4j 成為主流。


日志框架總結

  • commons-logging、slf4j 只是一種日志抽象門面,不是具體的日志框架。

  • log4j、logback 是具體的日志實現框架。

  • 一般首選強烈推薦使用 slf4j + logback。當然也可以使用slf4j + log4j、commons-logging +log4j 這兩種日志組合框架。

一般情況下,Logback與slf4J組合使用。

logback的官方網站:http://logback.qos.ch

SLF4J的官方網站:http://www.slf4j.org

看出 slf4j 很強大,不但能和各種日志框架對接,還能和日志門面 commons-logging 進行融合。


logback的三個模塊

  • logback-core

  • logback-classic

  • logback-access

logback-core是logback-classic和logback-access模塊的基礎模塊。logback-classic是log4j的一個改良版本,均出自同一個作者之手。


Maven依賴

<!-- 1.日志 --> <!-- 實現slf4j接口并整合 --> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.1</version> </dependency>


logback加載配置文件規則

1. 在 classpath 中尋找 logback-test.xml文件

2. 如果找不到 logback-test.xml,則在 classpath 中尋找 logback.groovy 文件

3. 如果找不到 logback.groovy,則在 classpath 中尋找 logback.xml文件

4. 如果上述的文件都找不到,則 logback 會使用 JDK 的 SPI 機制查找
META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置實現類,這個實現類必須實現 Configuration 接口,使用它的實現來進行配置

5. 如果上述操作都不成功,logback 就會使用它自帶的 BasicConfigurator 來配置,并將日志輸出到 console


logback 日志級別

TRACE < DEBUG < INFO < WARN < ERROR


配置

<?xml version="1.0" encoding="utf-8" standalone="no"?> <!--scan: 當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。 --> <!-- scanPeriod設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。注意掃描間隔要加上單位,可用的單位是 milliseconds,seconds,minutes 和 hours。如果只指定了數字,但沒有指定單位,這默認單位為 milliseconds。--> <!--debug當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。--> <configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 用來定義變量值,它有兩個屬性name和value,通過<property>定義的值會被插入到logger上下文中,可以使“${}”來使用變量--><property name="app.name" value="o2o" /> <property name="log.level" value="DEBUG"/><property name="log.maxHistory" value="30"/><!--<property name="log.filePath" value="${catalina.base}/logs/webapps"/> --><property name="log.filePath" value="D:/logs/${app.name}"/><!--格式化輸出,%d:日期;%thread:線程名;%-5level:級別,從左顯示5個字符寬度;%msg:日志消息;%n:換行符--><property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/><!-- 用來設置上下文名稱,每個logger都關聯到logger上下文,默認上下文名稱為default。但可以使用<contextName>設置成其他名字,用于區分不同應用程序的記錄。一旦設置,不能修改。 --><contextName>${app.name}</contextName> <!-- 子節點<appender>:負責寫日志的組件,它有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名 --><!-- 控制臺設置 --><appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"><!-- 對記錄事件進行格式化 encoder默認配置為PartternLayoutEncoder --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><patten>${log.pattern}</patten></encoder></appender><!-- DEBUG --><appender name="debugAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- file被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。 --><file>${log.filePath}/debug.log</file><!-- append如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。 --><append>true</append><!-- rollingPolicy當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志保存天數 --><maxHistory>${log.maxHistory}</maxHistory><!--滾動策略:日志文件大于1MB時生成一個新的日志文件,每天生成一個新的日志文件 --><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>1MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><!-- 日志格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern></encoder><!-- filter 只記錄debug信息 --><filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender><!-- INFO --><appender name="infoAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- file被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。 --><file>${log.filePath}/info.log</file><!-- append如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。 --><append>true</append><!-- rollingPolicy當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志保存天數 --><maxHistory>${log.maxHistory}</maxHistory><!--滾動策略:日志文件大于1MB時生成一個新的日志文件,每天生成一個新的日志文件 --><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>1MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><!-- 日志格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern></encoder><!-- filter 只記錄info信息 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- ERROR --><appender name="errorAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- file被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。 --><file>${log.filePath}/error.log</file><!-- append如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。 --><append>true</append><!-- rollingPolicy當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志保存天數 --><maxHistory>${log.maxHistory}</maxHistory><!--滾動策略:日志文件大于1MB時生成一個新的日志文件,每天生成一個新的日志文件 --><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>1MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><!-- 日志格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern></encoder><!-- filter 只記錄error信息 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--打印特定包下的日志 additivity:是否向上級logger傳遞打印信息。默認是true. 作用在于 children-logger是否使用 rootLogger配置的appender進行輸出。false:表示只用當前logger的appender-ref。true:表示當前logger的appender-ref和rootLogger的appender-ref都有效。--><logger name="com.artisan.o2o" level="${log.level}" additivity="true"><appender-ref ref="debugAppender" /><appender-ref ref="infoAppender" /><appender-ref ref="errorAppender" /></logger><!-- 【日志輸出級別】 表示把>=DEBUG級別的日志都輸出到debugAppender對應的file --><root level="${log.level}"><appender-ref ref="consoleAppender" /></root> </configuration>

測試

我們在AreaController中加些log輸出

package com.artisan.o2o.web;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;import com.artisan.o2o.entity.Area; import com.artisan.o2o.service.AreaService;@Controller @RequestMapping("/superadmin") public class AreaController {Logger logger = LoggerFactory.getLogger(AreaController.class);@AutowiredAreaService areaService;@RequestMapping(value = "/listArea", method = RequestMethod.GET)@ResponseBodypublic Map<String, Object> getAreas() {logger.info("-----begin getAreas------");Long beginTimeLong = System.currentTimeMillis();Map<String, Object> map = new HashMap<String, Object>();List<Area> areaList = new ArrayList<Area>();try {areaList = areaService.getAreaList();map.put("total", areaList.size());map.put("rows", areaList);for (Area area : areaList) {System.out.println("區域:" + area);}} catch (Exception e) {e.printStackTrace();map.put("success", false);map.put("errMsg", e.getMessage().toString());logger.error("exception happpens , desc [{}] ", e.getMessage());}Long endTimeLong = System.currentTimeMillis();logger.debug("cost [{}ms]", endTimeLong - beginTimeLong);logger.info("-----end getAreas------");return map;}}

啟動服務,測試

rollingPolicy的配置

接下來,我們將AreaDao.xml中 id為 queryArea的statement sql 中的area_name 改成area_name1,因為數據庫tb_area表沒有該字段,驗證下,error的配置項。

同時 http://localhost:8080/o2o/superadmin/listArea

這里將不同級別的日志分別打印到了不同的文件中,日志的配置可以靈活配置,這里僅僅是闡述用法,日志的記錄方式后續會調整。


Github地址

代碼地址: https://github.com/yangshangwei/o2o

總結

以上是生活随笔為你收集整理的实战SSM_O2O商铺_06logback配置与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。