首先,在pom.xml中加入maven依賴html
<!-- log start --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j-api.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <!-- log end -->
我使用的版本是java
<slf4j-api.version>1.7.25</slf4j-api.version> <logback.version>1.1.7</logback.version>
接着,配置 logback.xml算法
<?xml version="1.0" encoding="UTF-8"?> <!-- 級別從高到低 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"> <!-- 子節點<property> :用來定義變量值,它有兩個屬性name和value,經過<property>定義的值會被插入到logger上下文中,能夠使「${}」來使用變量。--> <property name="LOG_HOME" value="/export/Logs/youxi" /> <!--子節點<appender>:負責寫日誌的組件,它有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名--> <!-- ConsoleAppender 控制檯輸出日誌 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 設置日誌輸出格式 --> <pattern>[%d{yyyy/MM/dd HH:mm:ss.SSS}][%p][%logger{0}:%L] %m%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> </appender> <!-- RollingFileAppender:滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其餘文件。有如下子節點:--> <!-- <file>:被寫入的文件名,能夠是相對目錄,也能夠是絕對目錄,若是上級目錄不存在會自動建立,沒有默認值。--> <!-- <append>:若是是 true,日誌被追加到文件結尾,若是是 false,清空現存文件,默認是true。--> <!-- <rollingPolicy>:當發生滾動時,決定RollingFileAppender的行爲,涉及文件移動和重命名。屬性class定義具體的滾動策略類--> <!-- class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy": 最經常使用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動。有如下子節點:--> <!-- <fileNamePattern>:必要節點,包含文件名及「%d」轉換符,「%d」能夠包含一個java.text.SimpleDateFormat指定的時間格式,如:%d{yyyy-MM}。--> <!--若是直接使用 %d,默認格式是 yyyy-MM-dd。RollingFileAppender的file字節點無關緊要,經過設置file,能夠爲活動文件和歸檔文件指定不一樣位置,當前日誌老是記錄到file指定的文件(活動文件),活動文件的名字不會改變;--> <!--若是沒設置file,活動文件的名字會根據fileNamePattern 的值,每隔一段時間改變一次。「/」或者「\」會被當作目錄分隔符。--> <!-- <maxHistory>:--> <!--可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件。假設設置每月滾動,且<maxHistory>是6,則只保存最近6個月的文件,刪除以前的舊文件。注意,刪除舊文件是,那些爲了歸檔而建立的目錄也會被刪除。--> <!-- class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy": 查看當前活動文件的大小,若是超過指定大小會告知RollingFileAppender 觸發當前活動文件滾動。只有一個節點:--> <!-- <maxFileSize>:這是活動文件的大小,默認值是10MB。--> <!-- <prudent>:當爲true時,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,可是有兩個限制,1不支持也不容許文件壓縮,2不能設置file屬性,必須留空。--> <!-- <triggeringPolicy >: 告知 RollingFileAppender 合適激活滾動。--> <!-- class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy" 根據固定窗口算法重命名文件的滾動策略。有如下子節點:--> <!-- <minIndex>:窗口索引最小值--> <!-- <maxIndex>:窗口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置爲12。--> <!-- <fileNamePattern>:必須包含「%i」例如,假設最小值和最大值分別爲1和2,命名模式爲 mylog%i.log,會產生歸檔文件mylog1.log和mylog2.log。還能夠指定文件壓縮選項,例如,mylog%i.log.gz 或者 沒有log%i.log.zip--> <appender name="LogFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/youxi.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/youxi.log.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy> <!-- <encoder>:對記錄事件進行格式化。負責兩件事,一是把日誌信息轉換成字節數組,二是把字節數組寫入到輸出流。--> <!-- PatternLayoutEncoder 是惟一有用的且默認的encoder ,有一個<pattern>節點,用來設置日誌的輸入格式。使用「%」加「轉換符」方式,若是要輸出「%」,則必須用「\」對「\%」進行轉義。--> <encoder> <pattern>%p %d{yyyy-MM-dd HH:mm:ss} %logger - %m%n</pattern> </encoder> </appender> <appender name="PokerMqListenerLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/mq/poker-mq.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/mq/poker-mq.log.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy> <encoder> <pattern>%p %d{yyyy-MM-dd HH:mm:ss} %logger - %m%n</pattern> </encoder> </appender> <logger name="com.jd.station.soa.message.listener.PokerActivityInfoMqListener" level="INFO" additivity="false"> <appender-ref ref="PokerMqListenerLogFile"/> </logger> <logger name="jdbc.sqltiming" level="info"/> <logger name="com.ibatis" level="info" /> <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="info" /> <logger name="com.ibatis.common.jdbc.ScriptRunner" level="info" /> <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="info" /> <logger name="java.sql.Connection" level="info" /> <logger name="java.sql.Statement" level="info" /> <logger name="java.sql.PreparedStatement" level="info" /> <logger name="java.sql.ResultSet" level="info" /> <root level="INFO"> <appender-ref ref="console" /> <appender-ref ref="LogFile" /> </root> </configuration>
詳細博客請參考sql