1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!-- 配置文件每隔1分鐘,就檢查更新 --> 4 <configuration scan="true" scanPeriod="60 seconds" debug="false" > 5 <!-- 定義參數常量,便於後面直接用${name}來獲取value值 --> 6 <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %logger{50} - %msg%n"/> 7 <property name="log.filePath" value="${catalina.base}/logs/webapps"/> 8 <property name="log.maxHistory" value="30"/> 9 10 <!-- ch.qos.logback.core.ConsoleAppender 控制檯輸出 --> 11 <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> 12 <!-- 過去使用layout,如今都推薦使用encoder 13 做用一:將日誌信息轉換(格式化)爲字符串 14 做用二:而後寫入到文件中--> 15 <encoder> 16 <pattern>${log.pattern}</pattern> 17 </encoder> 18 </appender> 19 20 <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日誌輸出到文件 --> 21 <!-- 1.打印debug級別日誌的設置 --> 22 <appender name="debugAppender" 23 class="ch.qos.logback.core.rolling.RollingFileAppender"> 24 <!-- 例如當天,也就是今天是2019-2-19,那麼在這天生成的日誌文件路徑爲${log.filePath}/debug.log 25 接着到了明天,也就是2019-2-20,這天生成的日誌文件路徑爲${log.filePath}/debug.log, 26 但昨天2019-2-19,生成的日誌文件路徑就變爲${log.filePath}/debug/debug-2019-2-19.log.gz(壓縮文件) --> 27 28 <!-- 當天生成的日誌文件的路徑 --> 29 <file>${log.filePath}/debug.log</file> 30 <!-- 設置基於時間(天天)的滾動策略,也就是將日誌內容按照日期來寫入到相應的文件中--> 31 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 32 <!-- 當天以前的天天生成的日誌文件的路徑 --> 33 <fileNamePattern>${log.filePath}/debug/debug-%d{yyyy-MM-dd}.log.gz 34 </fileNamePattern> 35 <!-- 最大歷史保存文件的數量,只保存最近30天的日誌文件,超出的會被刪除--> 36 <maxHistory>${log.maxHistory}</maxHistory> 37 </rollingPolicy> 38 <!-- 過去使用layout,如今都推薦使用encoder 39 做用一:將日誌信息轉換(格式化)爲字符串 40 做用二:而後寫入到文件中--> 41 <encoder> 42 <pattern>${log.pattern}</pattern> 43 </encoder> 44 <!-- 過濾掉非debug級別的信息 --> 45 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 46 <level>debug</level> 47 <onMatch>ACCEPT</onMatch> 48 <!-- 做用是拒絕寫入全部與<level>不匹配的日誌信息, 49 也就是非debug級別的日誌信息都不會被寫入到日誌文件中 --> 50 <onMismatch>DENY</onMismatch> 51 </filter> 52 </appender> 53 54 <!-- 2.打印info級別日誌的設置 --> 55 <appender name="infoAppender" 56 class="ch.qos.logback.core.rolling.RollingFileAppender"> 57 <!-- 例如當天,也就是今天是2019-2-19,那麼在這天生成的日誌文件路徑爲${log.filePath}/info.log 58 接着到了明天,也就是2019-2-20,這天生成的日誌文件路徑爲${log.filePath}/info.log, 59 但昨天2019-2-19,生成的日誌文件路徑就變爲${log.filePath}/info/info-2019-2-19.log.gz(壓縮文件) --> 60 61 <!-- 當天生成的日誌文件的路徑 --> 62 <file>${log.filePath}/info.log</file> 63 <!-- 設置基於時間(天天)的滾動策略,也就是將日誌內容按照日期來寫入到相應的文件中--> 64 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 65 <!-- 當天以前的天天生成的日誌文件的路徑 --> 66 <fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd}.log.gz 67 </fileNamePattern> 68 <!-- 最大歷史保存文件的數量,只保存最近30天的日誌文件,超出的會被刪除--> 69 <maxHistory>${log.maxHistory}</maxHistory> 70 </rollingPolicy> 71 <!-- 過去使用layout,如今都推薦使用encoder 72 做用一:將日誌信息轉換(格式化)爲字符串 73 做用二:而後寫入到文件中--> 74 <encoder> 75 <pattern>${log.pattern}</pattern> 76 </encoder> 77 <!-- 過濾掉非info級別的信息 --> 78 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 79 <level>info</level> 80 <onMatch>ACCEPT</onMatch> 81 <!-- 做用是拒絕寫入全部與<level>不匹配的日誌信息, 82 也就是非info級別的日誌信息都不會被寫入到日誌文件中 --> 83 <onMismatch>DENY</onMismatch> 84 </filter> 85 </appender> 86 87 <!-- 3.打印error級別日誌的設置 --> 88 <appender name="errorAppender" 89 class="ch.qos.logback.core.rolling.RollingFileAppender"> 90 <!-- 例如當天,也就是今天是2019-2-19,那麼在這天生成的日誌文件路徑爲${log.filePath}/error.log 91 接着到了明天,也就是2019-2-20,這天生成的日誌文件路徑爲${log.filePath}/error.log, 92 但昨天2019-2-19,生成的日誌文件路徑就變爲${log.filePath}/error/error-2019-2-19.log.gz(壓縮文件) --> 93 94 <!-- 當天生成的日誌文件的路徑 --> 95 <file>${log.filePath}/error.log</file> 96 <!-- 設置基於時間(天天)的滾動策略,也就是將日誌內容按照日期來寫入到相應的文件中--> 97 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 98 <!-- 當天以前的天天生成的日誌文件的路徑 --> 99 <fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd}.log.gz 100 </fileNamePattern> 101 <!-- 最大歷史保存文件的數量,只保存最近30天的日誌文件,超出的會被刪除--> 102 <maxHistory>${log.maxHistory}</maxHistory> 103 </rollingPolicy> 104 <!-- 過去使用layout,如今都推薦使用encoder 105 做用一:將日誌信息轉換(格式化)爲字符串 106 做用二:而後寫入到文件中--> 107 <encoder> 108 <pattern>${log.pattern}</pattern> 109 </encoder> 110 <!-- 過濾掉非error級別的信息 --> 111 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 112 <level>error</level> 113 <onMatch>ACCEPT</onMatch> 114 <!-- 做用是拒絕寫入全部與<level>不匹配的日誌信息, 115 也就是非error級別的日誌信息都不會被寫入到日誌文件中 --> 116 <onMismatch>DENY</onMismatch> 117 </filter> 118 </appender> 119 120 <!-- 監聽com.imooc.o2o包下全部類產生的日誌信息 121 不設置additivity屬性,那麼默認additivity = true,表示會繼承父級(在這裏它的父級只有root一個), 122 也就是會將日誌信息也輸出在控制檯,但級別會覆蓋父級的級別,也就是在控制檯會輸出debug級別及以上的日誌信息 --> 123 <logger name="com.imooc.o2o" level="debug"> 124 <!-- 表示按照debugAppender的設置去打印日誌 --> 125 <appender-ref ref="debugAppender"/> 126 <!-- 表示按照infoAppender的設置去打印日誌 --> 127 <appender-ref ref="infoAppender"/> 128 <!-- 表示按照errorAppender的設置去打印日誌 --> 129 <appender-ref ref="errorAppender"/> 130 </logger> 131 132 <!-- 也是一種<logger>,是全部<logger>的父級 --> 133 <!-- 不設置additivity屬性,或者設置additivity = true的<logger>,會繼承root的子標籤<appender-ref ref="console" />的設置, 134 將它本身設置的level屬性級別及以上的日誌打印到控制檯 --> 135 <root level="info"> 136 <!-- 表示按照console的設置去輸出日誌到控制檯 --> 137 <appender-ref ref="console" /> 138 </root> 139 140 141 142 </configuration>
注意:web
1. ${catalina.base}表示tomcat的工做目錄,具體的路徑能夠經過如下兩種方式
a.Tomcat啓動時,控制檯最早打印的信息中,在前幾行會看到 catalina.base ,它後面的路徑就是當前項目的tomcat的工做目錄
b.通常都在此目錄中能夠找到全部已部署項目的Tomcat的工做目錄:
C:\Users\0(這是電腦的本機帳號)\
.IntelliJIdea2018.2(這是Tomcat集成的IDE工具,我使用的是IDEA)\
system\tomcat\Unnamed_o2o(項目名)
2. logback.xml文件的目錄位置
maven項目,請放在classpath下,也就是src/main/resource文件夾下,不然系統解析不到logback.xml文件
3. 須要的jar包
1 <!--日誌logback,默認scope是compile,也就是從編譯時就起做用了--> 2 <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> 3 <dependency> 4 <groupId>ch.qos.logback</groupId> 5 <artifactId>logback-classic</artifactId> 6 <version>1.2.3</version> 7 </dependency>