一、把不同级别的日志输出到不同的文件中,控制台打印某个级别以上的日志(最好不要把root下的日志级别配置为trace,因为会持续打印一些事件信息,不利于调试)
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="E:\logs\wcs_printer" /> <!-- 控制台输出 --> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 1格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!--临界值日志过滤级别配置 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- 1在日志级别的基础上过滤掉trace级别以下的日志 --> <level>trace</level> </filter> </appender> <!-- trace级别,按照每天生成日志文件 --> <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.SizeAndTimeBasedRollingPolicy"> <!-- 之前的 rollingPolicy和triggeringPolicy冲突了 用一个新的标签 结合两者 --> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME} race-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!-- 日志文件保留天数 --> <MaxHistory>5</MaxHistory> <!-- 日志文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- debug级别,按照每天生成日志文件 --> <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.SizeAndTimeBasedRollingPolicy"> <!-- 之前的 rollingPolicy和triggeringPolicy冲突了 用一个新的标签 结合两者 --> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}debug-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!-- 日志文件保留天数 --> <MaxHistory>5</MaxHistory> <!-- 日志文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- info级别,按照每天生成日志文件 --> <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.SizeAndTimeBasedRollingPolicy"> <!-- 之前的 rollingPolicy和triggeringPolicy冲突了 用一个新的标签 结合两者 --> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}info-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!-- 日志文件保留天数 --> <MaxHistory>5</MaxHistory> <!-- 日志文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- warn级别,按照每天生成日志文件 --> <appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--只保留固定配置级别的日志 --> <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.SizeAndTimeBasedRollingPolicy"> <!-- 之前的 rollingPolicy和triggeringPolicy冲突了 用一个新的标签 结合两者 --> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}warn-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!-- 日志文件保留天数 --> <MaxHistory>5</MaxHistory> <!-- 日志文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- error级别,按照每天生成日志文件 --> <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--只保留固定配置级别的日志 --> <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.SizeAndTimeBasedRollingPolicy"> <!-- 之前的 rollingPolicy和triggeringPolicy冲突了 用一个新的标签 结合两者 --> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}error-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!-- 日志文件保留天数 --> <MaxHistory>5</MaxHistory> <!-- 日志文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- 日志级别排序为: TRACE < DEBUG < INFO < WARN < ERROR --> <!-- 日志输出级别 --> <root level="trace"> <appender-ref ref="stdout" /> <appender-ref ref="trace" /> <appender-ref ref="debug" /> <appender-ref ref="info" /> <appender-ref ref="warn" /> <appender-ref ref="error" /> </root> </configuration>
二、把某个级别及其上级别的日志打印到一个日志文件中,控制台同样打印某个级别以上的日志信息。
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="E:\logs\wcs_printer" /> <!-- 控制台输出 --> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 1格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <!-- <charset>gbk</charset> --><!-- 注释掉编码,跟随平台编码 --> </encoder> <!--临界值日志过滤级别配置 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- 1在日志级别的基础上过滤掉debug级别以下的日志 --> <level>debug</level> </filter> </appender> <!-- 按照每天生成info日志文件 --> <appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- 1在日志级别的基础上过滤掉相应级别以下的日志 --> <level>info</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 之前的 rollingPolicy和triggeringPolicy冲突了 用一个新的标签 结合两者 --> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}info-more-%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!-- 日志文件保留天数 --> <MaxHistory>5</MaxHistory> <!-- 日志文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- 按照每天生成error日志文件 --> <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- 1在日志级别的基础上过滤掉相应级别以下的日志 --> <level>error</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 之前的 rollingPolicy和triggeringPolicy冲突了 用一个新的标签 结合两者 --> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}error-more-%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!-- 日志文件保留天数 --> <MaxHistory>5</MaxHistory> <!-- 日志文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- 日志级别排序为: TRACE < DEBUG < INFO < WARN < ERROR --> <!-- 日志输出级别 --> <root level="debug"> <appender-ref ref="stdout" /> <appender-ref ref="infoFile" /> <appender-ref ref="errorFile" /> </root> </configuration>