logback 日誌輸出格式

ckxllf發表於2019-09-26

  前言

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

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

  1、程式碼實現

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

  /*

  * Copyright (c) 2019. zhanghan_java@163.com All Rights Reserved.

  * 專案名稱:實戰SpringBoot

  * 類名稱:CheckMobileController.java

  * 建立人:張晗

  * 聯絡方式:zhanghan_java@163.com

  * 開源地址:

  * 部落格地址: 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 = "優雅校驗手機號格式方式", 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("引數錯誤");

  }

  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("引數錯誤");

  }

  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、專案部署伺服器後訪問列印日誌的效果

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

  1、程式碼實現

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

  (2)在專案的resources目錄下增加logback.xml設定列印格式,logback.xml內容如下:

  %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)

  UTF-8

  ${LOG_PATH}/${appName}-log-console-%d{yyyy-MM-dd}.%i.log.zip

  ${maxSaveDays}

  ${maxFileSize}

  %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)

  UTF-8

  ${LOG_PATH}/${appName}-log-info-%d{yyyy-MM-dd}.%i.log.zip

  ${maxSaveDays}

  ${maxFileSize}

  %d{"yyyy-MM-dd HH:mm:ss,SSS"}[%X{userId}|%X{sessionId}][%p][%c{0}-%M]-%m%n

  UTF-8

  ERROR

  DENY

  ACCEPT

  ${LOG_PATH}/${appName}-log-error-%d{yyyy-MM-dd}.%i.log.zip

  ${maxSaveDays}

  ${maxFileSize}

  %d{"yyyy-MM-dd HH:mm:ss,SSS"}[%X{userId}|%X{sessionId}][%p][%c{0}-%M]-%m%n

  UTF-8

  ERROR

  ACCEPT

  DENY

  level="INFO"/>

  3、專案部署伺服器後訪問列印日誌的效果

  4、檢視日誌記錄檔案,效果也一樣,效果圖:

  三、專案地址

  1、地址:

  2、程式碼版本:1.5.0-Release

  【總結】

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

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2658351/,如需轉載,請註明出處,否則將追究法律責任。

相關文章