由於,筆者所在公司啓動新項目,原先使用的log4j筆者歷來沒關注過,實在是嫌麻煩,因而,本身琢磨了一天logback,算是成功了。特意來分享一下。web
logback須要這麼幾個jar包
建議jar包能夠直接去maven的官方倉庫搜配置文件,而後收集了,爲了架構師作準備。spring
<!-- logback --> <dependency> <!--主要介紹的是這個jar包,這個包是負責logback隨着項目啓動的jar包--> <groupId>org.logback-extensions</groupId> <artifactId>logback-ext-spring</artifactId> <version>0.1.4</version> </dependency> <!--slf4j的jar包--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.6.4</version> </dependency> <!--logback的jar包--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.6</version> </dependency>
下面是web.xml文件的配置。api
<context-param> <param-name>logbackConfigLocation</param-name> <param-value>classpath:resource/logback.xml</param-value> </context-param> <listener> <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class> </listener>
筆者的配置文件在resource下,就這麼寫了,你們能夠隨意指定。tomcat
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"><!-- 這個是根配置文件,必定要有的 scan: 是當配置文件被修改後會被從新加載 scanPeriod: 設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位, 默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。 debug: 當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。 默認值爲false。 --> <!-- 日誌存放路徑 下面的標籤能夠本身定義 name:至關於Map的key value:就是map的value ${catalina.base}是tomcat的當前路徑 /logs:就是tomcat下的日誌路徑, /ehrlog:若是沒有目錄會默認建立 --> <substitutionProperty name="logbase" value="${catalina.base}/logs/ehrLog/" /> <!-- 時間戳: 這個時間戳能夠做爲每日日誌的名稱 --> <timestamp key="bySecond" datePattern="yyyy-MM-dd"/> <!-- appender: name至關於一個名稱 class:肯定要加載哪一個類 encoder:必定要加 encoder , 默認配置爲PatternLayoutEncoder patter:必填 ConsoleAppender:也明白是什麼意思,就是輸出在控制檯上--> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] [%level] - %m%n </pattern> </encoder> </appender> <!-- 把日誌存儲 encoding:日誌的編碼 file:指定當前生成的日誌文件名稱 rollingPolicy:滾動策略 FileNamePattern:移動文件最後的名稱,跟file標籤結合使用, 好比file裏面的內容是 1.txt 那麼,FileNamePattern裏面寫的是2.txt,那麼最後文件名就爲2.txt 若是最後結尾是gz或者zip,那麼,就會自動打成壓縮包 --> <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 編碼 --> <Encoding>UTF-8</Encoding> <!-- 按照時間來 --> <file>${logbase}ehr.${bySecond}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${logbase}ehr.${label}.%d{yyyy-MM-dd}.log.zip</FileNamePattern> </rollingPolicy> <!-- 佈局 --> <encoder> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <append>false</append> </appender> <!-- logger:日誌單位 name:是你當前掃描的哪一個包 level:日誌的級別 additivity:是否要把當前的日誌級別,給root根logger appender-ref:appender的引用 --> <logger name="com.xxxx.controller" level="trace" additivity="true"> <appender-ref ref="STDOUT"/> <appender-ref ref="logFile"/> </logger> <!-- 默認根節點是INFO級別的日誌 --> <!-- root:logger的根節點,就這一個,默認名稱就是root level:日誌級別 appender-ref:肯定使用哪一個appender --> <root level="info"> <appender-ref ref="fileAppender"/> <appender-ref ref="STDOUT"/> </root> </configuration>
通常狀況下默認先去加載logger標籤裏面的內容,而後,根據additivity標籤的值來肯定是否須要向上級root傳遞日誌信息。架構
默認打包的功能沒有嘗試,不知道是否會天天0點自動打成壓縮包。app