相關組件】java
Logback是由log4j創始人設計的又一個開源日誌組件。linux
logback當前分紅三個模塊:logback-core、logback- classic和logback-access。apache
logback-core:是其它兩個模塊的基礎模塊。api
logback-classic:是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你能夠很方便地更換成其它日誌系統如log4j或JDK14 Logging。app
logback-access:訪問模塊與Servlet容器集成提供經過Http來訪問日誌的功能。maven
【Maven依賴】ui
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency>
【logback.xml】this
logback的配置文件都放在/src/main/resource/文件夾下的logback.xml文件中。至於如何找到這個位置的,這裏就不在介紹了。spa
放置路徑以下圖所示:插件
【logback.xml內容】
從網上找了一個比較完整的版本,驗證了一下可使用。我就直接拿來用了。內容以下。
其中須要注意的是log_dir這個屬性,該屬性用來定義日誌的輸出路徑。因爲咱們項目中都是佈置在Linux上運行的,因此這裏使用的是一個絕對路徑。
<!-- 級別從高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL --> <!-- 日誌輸出規則 根據當前ROOT 級別,日誌輸出時,級別高於root默認的級別時 會輸出 --> <!-- 如下 每一個配置的 filter 是過濾掉輸出文件裏面,會出現高級別文件,依然出現低級別的日誌信息,經過filter 過濾只記錄本級別的日誌 --> <!-- scan 當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true。 --> <!-- scanPeriod 設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。 --> <!-- debug 當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 動態日誌級別 --> <jmxConfigurator /> <!-- 定義日誌文件 輸出位置 --> <!-- <property name="log_dir" value="C:/test" />--> <property name="log_dir" value="/home/hadmin/data/logs/src" /> <!-- 日誌最大的歷史 30天 --> <property name="maxHistory" value="30" /> <!-- ConsoleAppender 控制檯輸出日誌 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> <!-- 設置日誌輸出格式 --> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n </pattern> </encoder> </appender> <!-- ERROR級別日誌 --> <!-- 滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其餘文件 RollingFileAppender --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 過濾器,只記錄WARN級別的日誌 --> <!-- 果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌。 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 設置過濾級別 --> <level>ERROR</level> <!-- 用於配置符合過濾條件的操做 --> <onMatch>ACCEPT</onMatch> <!-- 用於配置不符合過濾條件的操做 --> <onMismatch>DENY</onMismatch> </filter> <!-- 最經常使用的滾動策略,它根據時間來制定滾動策略.既負責滾動也負責出發滾動 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌輸出位置 可相對、和絕對路徑 --> <fileNamePattern> ${log_dir}/error/%d{yyyy-MM-dd}/error-log.log </fileNamePattern> <!-- 可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件假設設置每月滾動,且<maxHistory>是6, 則只保存最近6個月的文件,刪除以前的舊文件。注意,刪除舊文件是,那些爲了歸檔而建立的目錄也會被刪除 --> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern> <!-- 設置日誌輸出格式 --> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n </pattern> </encoder> </appender> <!-- WARN級別日誌 appender --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 過濾器,只記錄WARN級別的日誌 --> <!-- 果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌。 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 設置過濾級別 --> <level>WARN</level> <!-- 用於配置符合過濾條件的操做 --> <onMatch>ACCEPT</onMatch> <!-- 用於配置不符合過濾條件的操做 --> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌輸出位置 可相對、和絕對路徑 --> <fileNamePattern>${log_dir}/warn/%d{yyyy-MM-dd}/warn-log.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- INFO級別日誌 appender --> <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_dir}/info/%d{yyyy-MM-dd}/info-log.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- DEBUG級別日誌 appender --> <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_dir}/debug/%d{yyyy-MM-dd}/debug-log.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- TRACE級別日誌 appender --> <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>TRACE</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_dir}/trace/%d{yyyy-MM-dd}/trace-log.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- root級別 DEBUG --> <root> <!-- 打印debug級別日誌及以上級別日誌 --> <level value="debug" /> <!-- 控制檯輸出 --> <appender-ref ref="console" /> <!-- 文件輸出 --> <appender-ref ref="ERROR" /> <appender-ref ref="INFO" /> <appender-ref ref="WARN" /> <appender-ref ref="DEBUG" /> <appender-ref ref="TRACE" /> </root> </configuration>
【java代碼】
package dscn; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogBack { private final Logger logger = LoggerFactory.getLogger(this.getClass()); public static void main(String[] args) { LogBack logback = new LogBack(); logback.testLog(); } private void testLog() { logger.debug("print debug log."); logger.info("print info log."); logger.error("print error log."); } }
【debug運行結果】
注意,若是是debug運行時,能夠將上述的log_dir路徑更改成一個本地的絕對路徑。通過驗證後,能夠順利的在控制檯中打印日誌,也能夠順利的生成日誌文件。
一、控制檯日誌
二、日誌文件
【在linux上運行jar包】
下一步驗證一下在linux上是否能夠正常輸出日誌。
注意,在linux上直接運行Jar包中的Main方法時,須要讓系統可以找到所依賴的jar包以及main方法,
使用Maven環境時,能夠經過增長打包插件的方式來實現。完整的Maven配置文件以下:
<?xml version="1.0" encoding="UTF-8"?> <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>logback</groupId> <artifactId>logback</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>dscn.LogBack</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>dscn.LogBack</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
使用mvn package方法,將全部的依賴包打入至jar包,並上傳到linux上。
使用java -jar命令來運行jar包。並驗證是否正常輸出日誌。經過下圖能夠看出,jar包能夠正常執行,日誌也能夠正確輸出了。
PS:若是工程中有不少個class,同時有不少個main方法的時候,能夠經過下面的命令來運行指定類的main方法。
java -classpath [jar] [className] [args]