logback.xml模板详解
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>
注意:
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>