日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

強烈推薦一個大神的人工智能的教程:http://www.captainbed.net/zhanghan

【前言】

日志對一個系統(tǒng)的重要性不言而喻;日志通常是在排查問題時給人看,一個友好的輸出樣式讓人看到后賞心悅目,排查效率通常也會隨之提高;下面為大家共享一下通過設置logback日志輸出格式,打印出令人欣喜的日志樣式。

【搞一下日志格式】

一、未指定日志格式,日志輸出

1、代碼實現(xiàn)

(1)演示日志輸出控制器

/*
 * Copyright (c) 2019. zhanghan_JAVA@163.com All Rights Reserved.
 * 項目名稱:實戰(zhàn)SpringBoot
 * 類名稱:CheckMobileController.java
 * 創(chuàng)建人:張晗
 * 聯(lián)系方式:zhanghan_java@163.com
 * 開源地址: https://github.com/dangnianchuntian/springboot
 * 博客地址: https://zhanghan.blog.csdn.net
 */
package com.zhanghan.zhboot.controller;
import com.MySQL.jdbc.StringUtils;
import com.zhanghan.zhboot.controller.request.MobileCheckRequest;
import com.zhanghan.zhboot.properties.MobilePreFixProperties;
import com.zhanghan.zhboot.util.wrApper.WrapMapper;
import com.zhanghan.zhboot.util.wrapper.Wrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@Api(value = "校驗手機號控制器", tags = {"校驗手機號控制器"})
public class CheckMobileController {
    private static Logger logger = LoggerFactory.getLogger(CheckMobileController.class);
    @Autowired
    private MobilePreFixProperties mobilePreFixProperties;
    @ApiOperation(value = "優(yōu)雅校驗手機號格式方式", tags = {"校驗手機號控制器"})
    @RequestMapping(value = "/good/check/mobile", method = RequestMethod.POST)
    public Wrapper goodCheckMobile(@RequestBody @Validated MobileCheckRequest mobileCheckRequest) {
        logger.info("good check mobile param {}", mobileCheckRequest.toString());
        String countryCode = mobileCheckRequest.getCountryCode();        String proFix = mobilePreFixProperties.getPrefixs().get(countryCode);
        if (StringUtils.isNullOrEmpty(proFix)) {
            logger.error("good check mobile param is error; param is {}, profix is {}", mobileCheckRequest.toString(), proFix);
            return WrapMapper.error("參數(shù)錯誤");
        }        String mobile = mobileCheckRequest.getMobile();        Boolean isLegal = false;
        if (mobile.startsWith(proFix)) {
            isLegal = true;
        }        Map map = new HashMap();        map.put("mobile", mobile);
        map.put("isLegal", isLegal);
        map.put("proFix", proFix);
        return WrapMapper.ok(map);
    }    @ApiOperation(value = "擴展性差校驗手機號格式方式", tags = {"校驗手機號控制器"})
    @RequestMapping(value = "/bad/check/mobile", method = RequestMethod.POST)
    public Wrapper badCheckMobile(@RequestBody MobileCheckRequest mobileCheckRequest) {
        logger.info("bad check mobile param {}", mobileCheckRequest.toString());
        String countryCode = mobileCheckRequest.getCountryCode();        String proFix = "";
        if (countryCode.equals("CN")) {
            proFix = "86";
        } else if (countryCode.equals("US")) {
            proFix = "1";
        } else {
            logger.error("bad check mobile param is error; param is {}, profix is {}", mobileCheckRequest.toString(), proFix);
            return WrapMapper.error("參數(shù)錯誤");
        }        String mobile = mobileCheckRequest.getMobile();        Boolean isLegal = false;
        if (mobile.startsWith(proFix)) {
            isLegal = true;
        }        Map map = new HashMap();        map.put("mobile", mobile);
        map.put("isLegal", isLegal);
        map.put("proFix", proFix);
        return WrapMapper.ok(map);
    }}

2、項目部署服務器后訪問打印日志的效果

logback 日志輸出格式

 

 

二、指定日志格式,日志輸出

1、代碼實現(xiàn)

(1)演示日志輸出控制器(同上)

(2)在項目的resources目錄下增加logback.xml設置打印格式,logback.xml內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 說明: 1、日志級別及文件 日志記錄采用分級記錄,級別與日志文件名相對應,不同級別的日志信息記錄到不同的日志文件中 例如:error級別記錄到log_error_xxx.log或log_error.log(該文件為當前記錄的日志文件),而log_error_xxx.log為歸檔日志,
	日志文件按日期記錄,同一天內(nèi),若日志文件大小等于或大于2M,則按0、1、2...順序分別命名 例如log-level-2013-12-21.0.log
	其它級別的日志也是如此。 2、文件路徑 若開發(fā)、測試用,在Eclipse中運行項目,則到Eclipse的安裝路徑查找logs文件夾,以相對路徑../logs。
	若部署到Tomcat下,則在Tomcat下的logs文件中 3、Appender FILEERROR對應error級別,文件名以log-error-xxx.log形式命名
	FILEWARN對應warn級別,文件名以log-warn-xxx.log形式命名 FILEINFO對應info級別,文件名以log-info-xxx.log形式命名
	FILEDEBUG對應debug級別,文件名以log-debug-xxx.log形式命名 stdout將日志信息輸出到控制上,為方便開發(fā)測試使用 -->
<configuration>
    <springProperty scope="context" name="LOG_HOME" source="spring.application.name"/>
    <springProfile name="local">
        <property name="LOG_PATH" value="D:/www/logs/common"/> <!-- 日志保存目錄 -->
    </springProfile>
    <springProfile name="dev">
        <property name="LOG_PATH" value="/data/logs/common" /> <!-- 日志保存目錄 -->
    </springProfile>
    <property name="appName" value="common"/>
    <property name="maxSaveDays" value="365"/><!-- 日志最大保存天數(shù) -->
    <property name="maxFileSize" value="200MB"/><!-- 單個文件最大大小 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) %green([${LOG_HOME},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]) %magenta(${PID:-}) %white(---) %-20(%yellow([%20.20thread])) %-55(%cyan(%.32logger{30}:%L)) %highlight(- %msg%n)</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="rollingFileConsole" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${appName}-log-console-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxHistory>${maxSaveDays}</maxHistory> <!--max save days -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) %green([${LOG_HOME},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]) %magenta(${PID:-}) %white(---) %-20(%yellow([%20.20thread])) %-55(%cyan(%.32logger{30}:%L)) %highlight(- %msg%n)</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="rollingFileInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${appName}-log-info-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxHistory>${maxSaveDays}</maxHistory> <!--max save days -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS"}[%X{userId}|%X{sessionId}][%p][%c{0}-%M]-%m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>
    <appender name="rollingFileError" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${appName}-log-error-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxHistory>${maxSaveDays}</maxHistory> <!--max save days -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS"}[%X{userId}|%X{sessionId}][%p][%c{0}-%M]-%m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>    
    <!-- 為單獨的包配置日志級別,若root的級別大于此級別, 此處級別也會輸出 應用場景:生產(chǎn)環(huán)境一般不會將日志級別設置為trace或debug,但是為詳細的記錄SQL語句的情況,
        可將hibernate的級別設置為debug,如此一來,日志文件中就會出現(xiàn)hibernate的debug級別日志, 而其它包則會按root的級別輸出日志 -->
    <!-- <logger name="org.springframework" level="DEBUG" /> -->
    <logger name="com.ibatis" level="DEBUG"/>
    <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG"/>
    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG"/>
    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"
            level="INFO"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <logger name="com.netflix.discovery" additivity="true" level="ERROR"/>
    <!-- 生產(chǎn)環(huán)境,將此級別配置為適合的級別,以名日志文件太多或影響程序性能 -->
    <root level="INFO">
        <appender-ref ref="rollingFileConsole"/>
        <appender-ref ref="rollingFileInfo"/>
        <appender-ref ref="rollingFileError"/>
        <appender-ref ref="stdout"/>
    </root>
</configuration>

3、項目部署服務器后訪問打印日志的效果

logback 日志輸出格式

 

?

4、查看日志記錄文件,效果也一樣,效果圖:

logback 日志輸出格式

 

?

三、項目地址

1、地址:https://github.com/dangnianchuntian/springboot

2、代碼版本:1.5.0-Release

 

【總結】

1、通過設定日志格式,輸出的樣式更加人性化,錯誤也更加明顯;

2、這個小小的改變,使得在排查程序時更加的賞心悅目,心情上的開心將在無形中增加排錯的效率;

分享到:
標簽:logback
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定