三.Logback配置與使用

logback日志介紹

主要模塊

  • logback-access
  • logback-classic
  • logback-core
    主要標(biāo)簽
  • logger:主要用于存放日志對(duì)象。
  • appender:用于指定日志輸出的目的地。(控制臺(tái)、文件等)
  • layout:格式化日志信息的輸出。
    logBack的配置
  • 新建logback.xml文件


    Snipaste_2018-11-11_19-36-22.png
<?xml version="1.0" encoding="utf-8"?>
<!-- scan="true":當(dāng)配置文件發(fā)生改變,將重新加載 
     scanPeriod="60 seconds":每分鐘自動(dòng)掃描是否配置是否改變
     debug="false":如果為true,將打印logback內(nèi)部的日志信息-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--定義參數(shù)常量 -->
    <!-- 日志級(jí)別:TRACE < DUBUG < INFO < WARN < ERROR -->
    <!--logger.trace("msg") logger.debug... -->
    <property name="log.level" value="debug" />
    <!-- 保留多長(zhǎng)時(shí)間 -->
    <property name="log.maxHistory" value="30" />
    <!-- 日志存儲(chǔ)的根路徑 -->
    <property name="log.filePath" value="${catalina.base}/logs/webapps" />
    <!-- 日志展現(xiàn)的格式   格式:時(shí)間、線程、級(jí)別、類(lèi)的信息、信息、換行 -->
    <property name="log.pattern"
        value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
    <!--控制臺(tái)設(shè)置 -->
    <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">
            <!--文件名稱(chēng) -->
            <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存歷史數(shù)量(30天),若超出,第一天的日志將被刪除 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 只記錄level為DEBUG的日志 -->
        <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">
            <!--文件名稱(chēng) -->
            <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存歷史數(shù)量(30天) -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 只記錄level為INFO的日志 -->
        <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}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件名稱(chēng) -->
            <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存歷史數(shù)量(30天) -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 只記錄level為ERROR的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 1.如果沒(méi)有指定logger的level,則默認(rèn)為root的level 
         2.當(dāng)additivity="true"時(shí),logger會(huì)將父類(lèi)root下的appender-ref也放到logger下
         3.一個(gè)類(lèi)只能定義一個(gè)logger,不能同時(shí)定義root,除非  additivity="true" ,logger會(huì)默認(rèn)繼承root
        -->
    <logger name="com.kings.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>

驗(yàn)證配置

修改com.kings.o2o.web.superadmin路徑下的AreaController.java

package com.kings.o2o.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.kings.o2o.entity.Area;
import com.kings.o2o.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 {
            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;
    }

}

運(yùn)行tomcat服務(wù)器,在控制臺(tái)找到CATALINA_BASE路徑

Snipaste_2018-11-11_20-06-37.png

進(jìn)入此路徑logs文件夾下的webapps文件夾下有三個(gè)文件。
Snipaste_2018-11-11_20-14-35.png

在瀏覽器輸入連接http://localhost:8080/o2o/superadmin/listarea
Snipaste_2018-11-11_20-17-08.png

查看控制臺(tái)輸出
Snipaste_2018-11-11_20-18-48.png

在之前文件夾下自動(dòng)生成相應(yīng)的文件
Snipaste_2018-11-11_20-20-35.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容