我的三种日志文件的内容是一样的,没有实现分类
来源:3-3 验证配置
27Done
2018-07-06
麻烦老师看一下:
我的logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--scan:当配置文件发生改变,是否去自动重新加载-->
<!--scanPeriod:扫描配置文件是否发生变化的周期-->
<!--debug:是否打印出logback内部的运行信息-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--定义一些全局变量-->
<!--日志级别:按优先级升序排列(*为常用) TRACE *DEBUG *INFO WARN *ERROR-->
<property name="log.level" value="debug"/>
<!--log文件保留的时间-->
<property name="log.maxHistory" value="30"/>
<!--log文件存储的根路径-->
<!--${catalina.base}表示tomcat实例的根目录-->
<property name="log.filePath" value="${catalina.base}/logs/webapps"/>
<!--每条日志记录的格式-->
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
<!--设置日志的输出介质为控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--设置日志的输出格式-->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!--设置DEBUG类型的独占日志,并设置日志产生后向文件内写入-->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路径-->
<file>${log.filePath}/debug.log</file>
<!--配置日志的滚动策略为按时间滚动-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件名称-->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 文件最大保存天数 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<!--设置日志的输出格式-->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!--过滤此项日志只记录debug级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMisMatch>DENY</onMisMatch>
</filter>
</appender>
<!--设置INFO类型的独占日志,并设置日志产生后向文件内写入-->
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路径-->
<file>${log.filePath}/info.log</file>
<!--配置日志的滚动策略为按时间滚动-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件名称-->
<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 文件最大保存天数 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<!--设置日志的输出格式-->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!--过滤此项日志只记录ino级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMisMatch>DENY</onMisMatch>
</filter>
</appender>
<!--设置ERROR类型的独占日志,并设置日志产生后向文件内写入-->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路径-->
<file>${log.filePath}/error.log</file>
<!--配置日志的滚动策略为按时间滚动-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件名称-->
<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 文件最大保存天数 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<!--设置日志的输出格式-->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!--过滤此项日志只记录error级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMisMatch>DENY</onMisMatch>
</filter>
</appender>
<!--name:要在哪些类的运行中产生日志,一个类只能在一个logger中产生日志
level:产生日志的最低级别,
additivity:将父logger的appender也继承进来,并且以本logger的设定级别来产生日志-->
<logger name="com.zx.o2o" level="${log.level}" additivity="true">
<!--appender-ref:将logger与appender绑定-->
<appender-ref ref="debug"/>
<appender-ref ref="info"/>
<appender-ref ref="error"/>
</logger>
<!--root是一个特殊的根logger-->
<root level="info">
<appender-ref ref="console"/>
</root>
<!--上面两个logger(logger+root)在并存时会发生什么:
首先logger已经将全工程的类都纳入到自己的输出范围内,那别的logger就无法再输出日志,
其次root并没有指定输出范围,它绑定了一个在控制台输出日志的appender,按理说此appender是无效的,
但由于logger的additivity="true"这个属性,logger会继承root的appender,并改变日志的作用范围及产生级别为自身的设定,
所以console这个appender最终会生效,并且输出的是debug+的日志-->
</configuration>然后生成的三种日志文件中的内容是完全一样的,都是按照debug+级别生成日志
写回答
2回答
-
翔仔
2018-07-06
同学好,你可以复用我的
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 定义参数常量 --> <!-- TRACE<DEBUG<INFO<WARN<ERROR --> <!-- logger.trace("msg") logger.debug... --> <property name="log.level" value="debug" /> <property name="log.maxHistory" value="30" /> <property name="log.filePath" value="${catalina.base}/logs/webapps" /> <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" /> <!-- 控制台设置 --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- DEBUG --> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- INFO --> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- ERROR --> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/erorr.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name="com.imooc.o2o" level="${log.level}" additivity="true"> <appender-ref ref="debugAppender"/> <appender-ref ref="infoAppender"/> <appender-ref ref="errorAppender"/> </logger> <root level="info"> <appender-ref ref="consoleAppender"/> </root> </configuration>我的是没有问题的
032018-07-09 -
27Done
提问者
2018-07-06
补上我的测试类:
package com.zx.o2o.web.superadmin; import com.zx.o2o.entity.Area; import com.zx.o2o.service.AreaService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Controller @RequestMapping("/superadmin") public class AreaController { Logger logger = LoggerFactory.getLogger(AreaController.class); @Autowired private AreaService areaService; @RequestMapping("/listarea") @ResponseBody private Map<String,Object> listArea(){ logger.info("=====strat====="); long stratTime = System.currentTimeMillis(); Map<String,Object> modelMap = new HashMap<>(); List<Area> areas = new ArrayList<>(); try { areas = areaService.getAreaList(); modelMap.put("rows",areas); modelMap.put("total",areas.size()); }catch (Exception e){ modelMap.put("success",false); modelMap.put("errMsg",e.toString()); } logger.error("test error!"); long endTime = System.currentTimeMillis(); logger.debug("costTime:[{}ms]",endTime-stratTime); logger.info("=====end====="); return modelMap; } }00