logback 日志输出格式

article/2025/10/18 21:49:38

强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan​

【前言】

         日志对一个系统的重要性不言而喻;日志通常是在排查问题时给人看,一个友好的输出样式让人看到后赏心悦目,排查效率通常也会随之提高;下面为大家共享一下通过设置logback日志输出格式,打印出令人欣喜的日志样式。

【搞一下日志格式】

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

              1、代码实现

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

/** Copyright (c) 2019. zhanghan_java@163.com All Rights Reserved.* 项目名称:实战SpringBoot* 类名称:CheckMobileController.java* 创建人:张晗* 联系方式: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);@Autowiredprivate 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内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 说明: 1、日志级别及文件 日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中 例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志,日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名 例如log-level-2013-12-21.0.log其它级别的日志也是如此。 2、文件路径 若开发、测试用,在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将日志信息输出到控制上,为方便开发测试使用 -->
<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"/><!-- 日志最大保存天数 --><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的级别大于此级别, 此处级别也会输出 应用场景:生产环境一般不会将日志级别设置为trace或debug,但是为详细的记录SQL语句的情况,可将hibernate的级别设置为debug,如此一来,日志文件中就会出现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"/><!-- 生产环境,将此级别配置为适合的级别,以名日志文件太多或影响程序性能 --><root level="INFO"><appender-ref ref="rollingFileConsole"/><appender-ref ref="rollingFileInfo"/><appender-ref ref="rollingFileError"/><appender-ref ref="stdout"/></root>
</configuration>

              3、项目部署服务器后访问打印日志的效果

              4、查看日志记录文件,效果也一样,效果图:

        三、项目地址

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

                 2、代码版本:1.5.0-Release

【总结】

        1、通过设定日志格式,输出的样式更加人性化,错误也更加明显;

        2、这个小小的改变,使得在排查程序时更加的赏心悦目,心情上的开心将在无形中增加排错的效率;


http://chatgpt.dhexx.cn/article/7gGSvVtu.shtml

相关文章

Nginx的日志格式

vim /etc/logstash/conf.d/ filter模块的作用&#xff1a;过滤&#xff0c;{在一个大的真空管里面&#xff0c;中间有一个过滤网&#xff0c;只有比这个小的东西能过去&#xff0c;大的会拦住} 在grok中使用match进行选择&#xff0c;所传送过来的是下面这样。希望把他们变成i…

什么是日志文件

文章目录 什么是日志文件Centos 7 日志文件简易说明日志文件的重要性Linux常见的日志文件文件名/var/log/boot.log/var/log/cron/var/log/dmesg/var/log/lastlog/var/log/maillog或 /var/log/mail/*/var/log/messages/var/log/secure/var/log/wtmp、/var/log/faillog/var/log/h…

AE2018插件AfterCodecs v1.9.0安装教程,(AE mp4)

1.自己百度下载好 2.这2个文件夹要复制&#xff0c;其他可以不管 复制Autokroma AfterCodecs 文件夹到 C:\Program Files\Adobe\Common\Plug-ins\7.0\MediaCore 复制com.autokroma.afcpanel 文件夹到 Adobe After Effects CC 2018\Support Files\Plug-ins\Extensions&#x…

PS/PR/AE全套插件一键安装包无需注册码

注意事项&#xff1a; 1、下载前请关闭360、电脑管家等杀毒软件&#xff0c;否则会误报病毒导致无法安装&#xff1b; 2、安装PS/PR/AE插件合集前&#xff0c;请务必先安装好Adobe软件&#xff1b; 3、安装PS/PR/AE插件合集前&#xff0c;请务必关闭Adobe旗下所有软件。 安装步…

Ae 2020最新版下载地址 一键安装Windows

各类cc软件。 地址&#xff1a;https://www.yuque.com/docs/share/cf424323-49e5-43e6-a80c-4f07ce467d56 访问密码&#xff1a;关注公众号"糊糊省钱"&#xff0c;回复“ps”获取

Adobe After Effects(AE)2022软件安装[MAC]

Adobe After Effects简称“AE”&#xff0c;Adobe After Effects 2022mac是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室&#xff0c;属于层类型后期软件。Adobe…

AE CC2018/64位安装步骤及各种出现问题!!(真的装了好久)

最近爱上录vlog&#xff0c;但是作为一个计算机学院的学生我怎么仅仅局限于手机里的剪视频软件呢&#xff01;然后我打算学一下AE&#xff0c;但是在这个py的过程中&#xff0c;真的废了快一个晚上了&#xff0c;从第一次安装出现问题我就应该立马百度&#xff0c;但是我没有&a…

2023AE软件、Adobe After Effects安装下载教程

2023AE软件是一款由Adobe公司开发的视频编辑软件&#xff0c;也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用&#xff0c;用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式&#xff0c;具有丰富的插件和预设&#…

Adobe After Effect (AE) cc2020 安装教程【64位】

Adobe After Effects简称“AE” 是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。属于层类型后期软件。 ----介绍来源于百度 【软件名称】&#xff1a; After …

【AE2019】Adobe_After_Effects_2019软件下载及安装教程

下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1-foCrqbfKugK6cf7M4nevQ 提取码&#xff1a;6ewm 下载方式&#xff1a; 复制链接到浏览器中打开&#xff0c;输入提取码&#xff0c;保存到网盘&#xff0c;然后打开百度网盘&#xff08;PC端&#xff09;&a…

AE中文版 AE2021中文版下载 AfterEffects2021中文版ACR14.0最新下载和安装

AE我目前最为专业也是最火的特效制作工具&#xff0c;全称叫AfterEffects&#xff0c;现在最新的就是2021的&#xff0c;而且是中文&#xff0c;并且内置的ACR已更新到最新的14.0&#xff0c;非常适合新手朋友刚开始零基础入门学习使用&#xff0c;并且非常好上手&#xff0c;学…

After Effects 2021软件安装包

Ae 2021的全称是After Effects 2021&#xff0c;它是由Adobe公司研发推出的一款功能强大全面的视频制作软件&#xff0c;这款软件不仅仅可以帮助用户制作出各种精彩且有创意的动画、视频等作品&#xff0c;还可以凭借着自己的思维给视频作品添加文字、音乐、片头以及标题等&…

After Effects (AE)2021软件下载及安装教程。

**目录** 一、前言二、下载三、安装教程 一、前言 Adobe After Effects简称“AE”是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。属于层类型后期软件。 Adobe…

PS/PR/AE插件免费下载网站整理(附送一键安装包)

你知道别人办公效率为什么比你高吗&#xff1f; 很可能是你不懂得用插件&#xff0c;还傻傻的去背网上的教程&#xff0c;一步步手动操作 就好比当你还在PS里一顿操作猛如虎&#xff0c;好不容易花30分钟修好一张图的时候… 人家早就用插件1分钟搞定了~~&#xff08;然后摸鱼2…

AE(ArcGIS Engine)的安装与配置(附加ArcGIS安装及所需安装包)

本文使用的ArcGIS 是10.2版本&#xff0c;因此安装的AE也是10.2版本&#xff0c;与此配套的安装了VS(Visual Studio) 2012。事实上&#xff0c;在安装了ArcGIS后&#xff0c;相应的便确定了VS与AE的版本&#xff0c;AE 10.2对应的VS有两种版本&#xff1a;2010与2012&#xff0…

Adobe After Effect (AE) cc2021 安装教程【64位】

Adobe After Effects简称“AE” 是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。属于层类型后期软件。 ----介绍来源于百度 【软件名称】&#xff1a; After …

QImage缩放后图片更清晰处理

QImage的缩放是比较常用的&#xff0c;今天碰到一个问题&#xff1a; 我发现缩放后的图片看起来很不清晰&#xff0c;于是看了一下QImage的scaled方法。发现它默认的是快速缩放&#xff0c;也就是增加scale的处理速度&#xff0c;牺牲的就是图片的质量。当我更需要图片质量的时…

Qt之QImage类

文章目录 QT——QImage类QImage获取图像的数据信息QImage图像格式转换由RGB格式转换为BGR格式将彩色图转换为灰度图图像保存 QImage图像显示在QLabel上QPixmap与QImage之间的互相转换Mat与QImage之间的互相转换8位的灰度图像进行显示QImage::Format_Indexed8三通道的彩色图进行…

QImage 图像处理

首页博客学院下载GitChatTinyMind论坛问答商城 写博客发Chat登录注册 youngyang_sjtu的博客 RSS订阅 转 QImage像素级操作 2018年03月20日 14:31:04 阅读数&#xff1a;754 转自http://blog.csdn.net/silangquan/article/details/41008183 这篇文章主要阐述了如何使用…

QImage的显示

因为想利用QT的gui在arm上显示的缘故&#xff0c;因此开始接触了QT。最近&#xff0c;用QT在弄一个显示图片的小程序。程序如下&#xff1a; #include <QtGui/QApplication> #include "mainwindow.h" #include "qimage.h" #include "qlabel.h&q…