程序中记录日志一般有两个目的
1、故障定位
2、显示程序运行状态
logback的主要模块
1、logback-access:与server容器集成,提供通过http来访问日志的功能
2、logback-classic:是log4j的改良版本,完整的实现了slf4j api可以很方便的更换其他的日志系统
3、logback-core:为logback-access与logback-classic提供了基础的服务
logback的主要标签
1、logger:日志的记录器,主要用于存放日志对象,定义日志的类型、级别
2、appender:指定日志输出的目的地(控制台、文件、远程套接字服务器等)
3、layout:格式化日志信息的输出
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 3 当scan为true时,配置文件发生改变,将会被重新加载,默认为true; 4 scanPeriod 设置 监测配置文件是否有修改时间的时间间隔,如果没有时间单位,默认时间单位为毫秒,当scan为true时,这个属性就生效; 5 debug 当该属性设置为true时,将会打印出logback内部的日志信息,实时查看logback的运行状态 6 --> 7 <configuration scan = "true" scanPeriod = "60 seconds" debug = "false" > 8 <!-- 定义参数常量 --> 9 <!-- logback日志级别 TRACE < DEBUG < INFO < WARN < ERROR --> 10 <property name="log.level" value="debug"></property> 11 <!-- logback日志保留时间30天 --> 12 <property name="log.maxHistory" value="30"></property> 13 <!-- logback日志存储的根路径 , ${catalina.base}里面存储的是tomcat示例的根目录 --> 14 <property name="log.filePath" value="${catalina.base}/logs/webapps"></property> 15 <!-- 日志展示的格式 , %d{yyyy-MM-dd HH:mm:ss.SSS}年月日时分秒毫秒,[%thead]标识程序是哪一个线程执行的 , %-5level级别是哪个级别 , %logger{50} - %msg日志相关信息 , %n表示作为换行符 --> 16 <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thead] %-5level %logger{50} - %msg%n"></property> 17 18 <!-- 定义ConsoleAppender ,输出目的地(控制台)--> 19 <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> 20 <!-- encoder类似于layout,即将日志信息转换为字符串,又将这些字符串输出到文件里面 --> 21 <encoder> 22 <!-- 定义log的输出格式 --> 23 <pattern>${log.pattern}</pattern> 24 </encoder> 25 </appender> 26 27 <!-- 定义DebugAppender,输出目的地(rollingFileAppender),文件随着size的增大滚动出新的日志文件,也可以随着时间推移按天或按月生成日志文件 --> 28 <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender" > 29 <!-- 文件路径,当(${log.filePath}/debug.log)文件到了一定的数量或者一定的时间之后,就会分裂出子的文件出来(${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz) --> 30 <file>${log.filePath}/debug.log</file> 31 <!-- 滚动策略 --> 32 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 33 <!-- 文件名称,这个是当(${log.filePath}/debug.log)文件到了一定的数量或者一定的时间之后,就会分裂出子的文件出来(${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz) --> 34 <fileNamePattern> 35 ${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz 36 </fileNamePattern> 37 <!-- log.gz文件保存最多数量 --> 38 <maxHistory>${log.maxHistory}</maxHistory> 39 </rollingPolicy> 40 <!-- encoder类似于layout,即将日志信息转换为字符串,又将这些字符串输出到文件里面 --> 41 <encoder> 42 <!-- 定义log的输出格式 --> 43 <pattern>${log.pattern}</pattern> 44 </encoder> 45 <!-- 定义过滤器,过滤掉不是debug的那些日志 --> 46 <filter class="ch.qos.logback.classic.filter.LevelFilter" > 47 <!-- 级别为debug --> 48 <level>DEBUG</level> 49 <!-- 如果是debug级别的日志信息,就记录下来 --> 50 <onMatch>ACCEPT</onMatch> 51 <!-- 如果不是debug级别的日志信息,就过滤掉 --> 52 <onMismatch>DENY</onMismatch> 53 </filter> 54 </appender> 55 56 <!-- 定义InfoAppender,输出目的地(rollingFileAppender),文件随着size的增大滚动出新的日志文件,也可以随着时间推移按天或按月生成日志文件 --> 57 <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender" > 58 <!-- 文件路径,当(${log.filePath}/info.log)文件到了一定的数量或者一定的时间之后,就会分裂出子的文件出来(${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz) --> 59 <file>${log.filePath}/info.log</file> 60 <!-- 滚动策略 --> 61 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 62 <!-- 文件名称,这个是当(${log.filePath}/info.log)文件到了一定的数量或者一定的时间之后,就会分裂出子的文件出来(${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz) --> 63 <fileNamePattern> 64 ${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz 65 </fileNamePattern> 66 <!-- log.gz文件保存最多数量 --> 67 <maxHistory>${log.maxHistory}</maxHistory> 68 </rollingPolicy> 69 <!-- encoder类似于layout,即将日志信息转换为字符串,又将这些字符串输出到文件里面 --> 70 <encoder> 71 <!-- 定义log的输出格式 --> 72 <pattern>${log.pattern}</pattern> 73 </encoder> 74 <!-- 定义过滤器,过滤掉不是debug的那些日志 --> 75 <filter class="ch.qos.logback.classic.filter.LevelFilter" > 76 <!-- 级别为debug --> 77 <level>INFO</level> 78 <!-- 如果是info级别的日志信息,就记录下来 --> 79 <onMatch>ACCEPT</onMatch> 80 <!-- 如果不是info级别的日志信息,就过滤掉 --> 81 <onMismatch>DENY</onMismatch> 82 </filter> 83 </appender> 84 85 <!-- 定义ErrorAppender,输出目的地(rollingFileAppender),文件随着size的增大滚动出新的日志文件,也可以随着时间推移按天或按月生成日志文件 --> 86 <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender" > 87 <!-- 文件路径,当(${log.filePath}/error.log)文件到了一定的数量或者一定的时间之后,就会分裂出子的文件出来(${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz) --> 88 <file>${log.filePath}/error.log</file> 89 <!-- 滚动策略 --> 90 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 91 <!-- 文件名称,这个是当(${log.filePath}/error.log)文件到了一定的数量或者一定的时间之后,就会分裂出子的文件出来(${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz) --> 92 <fileNamePattern> 93 ${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz 94 </fileNamePattern> 95 <!-- log.gz文件保存最多数量 --> 96 <maxHistory>${log.maxHistory}</maxHistory> 97 </rollingPolicy> 98 <!-- encoder类似于layout,即将日志信息转换为字符串,又将这些字符串输出到文件里面 --> 99 <encoder> 100 <!-- 定义log的输出格式 --> 101 <pattern>${log.pattern}</pattern> 102 </encoder> 103 <!-- 定义过滤器,过滤掉不是debug的那些日志 --> 104 <filter class="ch.qos.logback.classic.filter.LevelFilter" > 105 <!-- 级别为debug --> 106 <level>ERROR</level> 107 <!-- 如果是error级别的日志信息,就记录下来 --> 108 <onMatch>ACCEPT</onMatch> 109 <!-- 如果不是error级别的日志信息,就过滤掉 --> 110 <onMismatch>DENY</onMismatch> 111 </filter> 112 </appender> 113 114 <!-- logger,主要存放日志对象,同时告诉logback要关注哪个package下面的信息 115 name属性指定关注的哪个包,level属性告诉logback记录哪个level以上的信息 116 additivity属性,如果为true,那么就会将root标签中的appender-ref加入到logger标签中来,并且level的级别为logger标签中指定的level 117 --> 118 <logger name="com.imooc.o2o" level="${log.level}" additivity="true" > 119 <!-- logger需要跟appender绑定的,logger对象会往这三个文件中输出信息 --> 120 <appender-ref ref="debugAppender"></appender-ref> 121 <appender-ref ref="infoAppender"></appender-ref> 122 <appender-ref ref="errorAppender"></appender-ref> 123 </logger> 124 125 <!-- root是一个特殊的logger,是根logger,需要注意的是,如果上面的logger标签中没有指定level,那么logger就会默认的继承root中的level属性 --> 126 <root level="info"> 127 <!-- 只要跟root相关的日志信息都会打印到控制台上面 --> 128 <appender-ref ref="consoleAppender" ></appender-ref> 129 </root> 130 131 </configuration>
来源:https://www.cnblogs.com/in-the-game-of-thrones/p/11227618.html