logback.xml的配置和使用

1、前言

程序中计入日志的目的一般有2个,一是做故障定位,二是显示程序的运行状态。接下来介绍Logback的主要模块和标准配置。

2、Logback的主要模块:

1.logback-acess 第三方软件可以通过logback访问程序。
2.logback-classic 是一个Log4j的改良版,同时完整的实习slf4j的api,方便更换其他系统(比如Log4j)。
3、logback-core 为前2个模块提供了服务。

3、Logback的主要标签

1.logger 作为日志的记录器,用于存放日志对象和设置级别。
2.appender 指定日志输出的目的地。
3.layout 用来格式化日志输出。

4、Logback.xml的配置详述

      在src/main/resources中创建logback.xml,大致可以分为三步:

<1> configuration

<!-- scran为true时,配置文件改变会重新加载,  scanPeriod是设置时间间隔(ms)-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

<2>  3个大类(三个详细的appender)

     4个property

    <!-- 定义参数常量 (全局变量)-->
    <!-- TRACE<DEBUG<INFO<WARN<ERROR  log.level级别 -->
    <!-- logger.trace("msg") logger.debug...  如果指定DEBUG的话 那么TRACE是没法在log里显示,只会显示log.debug log.info等待-->
    <!-- 1)一般只用DEBUG,INFO和ERROR 存储在不同的文件下 -->

    <property name="log.level" value="debug" />
    <!-- 2)log文件保留的多长时间 -->
    <property name="log.maxHistory" value="30" />
    <!-- 3)标示log保存的路径 -->
    <property name="log.filePath" value="${catalina.base}/logs/webapps" />
    <!-- 4)日志展现的格式" %d{时间格式} [%什么线程] %-什么级别  %logger{50}(日志信息) -%msg%n"-->
    <property name="log.pattern"
        value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />

<3> consoleAppender

     控制台设置
    <!-- appender的媒介consoleAppender  -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoder类似layout,pattern定义输出格式 -->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

<4-1>debugAppender

<!-- DEBUG -->
    <!-- 文件会随着数量或者时间的变化生成新的文件 -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/debug.log</file>
        <!-- rollingPolicy 基于时间滚动 -->
        <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将日志信息转换成字符串,在放在文件里 -->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>

        <!-- filter过滤不是debug的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

<4-2>infoAppender

<!-- INFO同上 -->
    <!-- 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>

<4-3>errorappender

<!-- ERROR 同上 -->
    <!-- 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>

<5>logger配置

<!-- (唯一要修改的地方) 指定关注的那个package,level是记录那个level以上的(现在默认debug) -->
    <!-- additivity 默认值为ture 当additivity为ture时 会把root level在控制台输出,DEBUG也会输出 -->

    <logger name="com.cn.lx" level="${log.level}" additivity="true">
        
<!-- 绑定Appender(对三个文件输出) -->
        <appender-ref ref="debugAppender"/>
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="errorAppender"/>
    </logger>
    <root level="info">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>

5、标准的logback.xml程序

<?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.cn.lx" 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>

6、controller的测试

package com.cn.lx.web.superadmin;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 com.cn.lx.entity.Area;
import com.cn.lx.service.AreaService;

@Controller
@RequestMapping("/superadmin")
public class AreaController {
	
	   Logger logger = LoggerFactory.getLogger(AreaController.class);
	
      @Autowired
	  private AreaService areaService;
      @RequestMapping(value="/listarea",method=RequestMethod.GET)
      @ResponseBody
	  private Map<String,Object> listArea(){
    	  logger.info("==start==");
    	  long startTime = System.currentTimeMillis();
		  Map<String,Object> modelMap = new HashMap<String,Object>();
		  List<Area> list = new ArrayList<Area>();
		  try {
			  // rows 返回集合  total返回总数
			  list = areaService.getAreaList();
			  modelMap.put("rows", list);
			  modelMap.put("total",list.size());
		  }catch(Exception e) {
			  e.printStackTrace();
			  modelMap.put("success", false);
			  modelMap.put("errMsg", e.toString());
		  }
		  logger.error("test error!");
		  long endTime =  System.currentTimeMillis();
		  logger.debug("costTime:[{}ms]",endTime-startTime);
		  logger.info("==end==");
		  return modelMap;
 	  }
}

其中控制台可以看到catalina base,可以在路径中找打日志文件(在对于路径下的logs)


其中还能看到DEBUG,INFO和ERROR的信息(对应你的logger.info logger.error)

猜你喜欢

转载自blog.csdn.net/SneakyRogue/article/details/81322818