Spring Boot Logback日志格式改为JSON
在阿里云、或者日志分析时使用JSON格式输出日志更加方便。
依赖
增加Logbak JSON解析依赖。
另外需要注意的是JSON格式输出依赖Jackson,根据工程情况按需添加Jackson依赖。
<!--日志--><dependency><groupId>ch.qos.logback.contrib</groupId><artifactId>logback-json-classic</artifactId><version>0.1.5</version></dependency><!-- Logbak默认JSON格式 方式需要的依赖--><dependency><groupId>ch.qos.logback.contrib</groupId><artifactId>logback-jackson</artifactId><version>0.1.5</version></dependency><!-- Logback自定义JSON格式 方式需要的依赖--><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>5.2</version></dependency>
配置输出格式
修改格式主要是修改logback.xml中appender配置。
介绍两种修改JSON格式方式:
- Logbak默认JSON格式:Logback默认JSON输出格式,没有自定义的字段,适合简单的日志输出。
- Logback自定义JSON格式:支持自定义输出JSON key,例如打印HTTP 请求url、请求方的IP、userAgent等信息,并且支持配置输出格式,例如time 格式、message长度、exception 堆栈深度、logger格式等等。推荐使用此方式。
Logbak默认JSON格式
<appender name="json" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.contrib.json.classic.JsonLayout"><jsonFormatterclass="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"><prettyPrint>true</prettyPrint></jsonFormatter><timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat></layout>
</appender><logger name="jsonLogger" level="TRACE"><appender-ref ref="json" />
</logger>
Logback自定义JSON格式
<appender name="consoleJsonEncoder" class="ch.qos.logback.core.ConsoleAppender"><encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"><jsonFactoryDecorator class="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator"><escape><targetCharacterCode>10</targetCharacterCode><escapeSequence>\u2028</escapeSequence></escape></jsonFactoryDecorator><providers><pattern><pattern>{"time":"%date{ISO8601}","traceId":"%mdc{traceId}","level":"%level","thread":"%thread","userId":"%mdc{userId}","userName":"%mdc{userName}","ip":"%mdc{ip}","url":"%mdc{url}","ua":"%mdc{ua}","clazz":"%logger{10}","line":"%line","message":"%msg","exception":"%ex{full}"}</pattern></pattern></providers></encoder></appender>
- %date{ISO8601}:指定日期格式,输出 2023-08-03 16:12:01,172。
- %mdc{traceId}:格式为%mdc{key},key替换为MDC put使用的值。输出MDC类put的traceId
- %level:日志级别,例如:debug、info、warn、error
- %thread:线程ID
- %logger:当前输出日志class名称,例如:c.c.w.c.g.GroupMealCallbackController
- %line:打印日志行号
- %msg:程序里面输出的日志信息。如果msg过长可以截取指定长度,语法:%.-nmsg,例如%.-1024msg 截取前1024个字符。
- %ex:异常堆栈信息
更多Logback pattern可以参考官方文档:Conversion Word
日志输出效果:
{"time": "2023-08-03 16:12:02,839","traceId": "f935f95c01ee4f9f9af3c34e0e1c061a","level": "INFO ","thread": "http-nio-8663-exec-11","userId": "6","userName": "张三","ip": "172.18.196.23","url": "/xx/callback/order/completeCallback","ua": "Apache-HttpClient/4.5.1 (Java/1.8.0_201)","clazz": "c.c.w.c.g.GroupMealCallbackController","line": "39","message": "订单完成回调","exception": ""
}
相关文章:
Spring Boot Logback日志格式改为JSON
在阿里云、或者日志分析时使用JSON格式输出日志更加方便。 依赖 增加Logbak JSON解析依赖。 另外需要注意的是JSON格式输出依赖Jackson,根据工程情况按需添加Jackson依赖。 <!--日志--><dependency><groupId>ch.qos.logback.contrib</grou…...
Linux 块设备操作函数
和字符设备的fil_operations一样,块设备也有操作集,为结构体block_device_operations,此结构体定义在include/linux/blkdev.h中,结构体内容如下: struct block_device_operations {int (*open) (struct block_device …...
linux c++网络编程基础:服务端与客户端的实现
在Linux环境下,我们可以使用socket编程来实现网络通信。下面是一个简单的C++版本的客户端和服务端的示例代码。 服务端代码: #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #...
坐标转换-使用geotools读取和转换地理空间表的坐标系(sqlserver、postgresql)
前言: 业务上通过GIS软件将空间数据导入到数据库时,因为不同的数据来源和软件设置,可能导入到数据库的空间表坐标系是各种各样的。 如果要把数据库空间表发布到geoserver并且统一坐标系,只是在geoserver单纯的设置坐标系只是改了…...
JavaScript的主要应用场景有哪些?请描述一下JavaScript的基本数据类型和引用数据类型分别是哪些?
1、JavaScript的主要应用场景有哪些? JavaScript是一种广泛使用的编程语言,它主要用于Web开发、移动应用开发、游戏开发、物联网设备开发等场景。以下是JavaScript的主要应用场景: Web开发:JavaScript是Web开发中最常用的编程语…...
webpack性能优化
文章目录 1. 性能优化-分包2. 动态导入3. 自定义分包4. Prefetch和Preload5. CDN加载配置6. CSS的提取7. terser压缩7.1 Terser在webpack中配置7.2 css压缩 8. Tree Shaking 消除未使用的代码8.1 usedExports 配置8.2 sideEffects配置8.3 CSS实现Tree Shaking 9. Scope Hoistin…...
保存和读取带有透明通道的视频
保存带有透明通道的视频: import osimport imageio from rembg import remove as removBg,new_session from PIL import Image import numpy as np import cv2 from tqdm import tqdmclass cls_rembg():def __init__(self,model_pth):self.session new_session(mo…...
bilibili的评论ip属地显示未知
现象 出于某些原因,我们在日常使用中的大部分平台都开启了IP地址显示,一般会显示当事人所在的地址,这其中就有一些奇怪的地址,(在此不谈魔法)就比如我最近在刷B站的时候,就在评论区发现了一些显…...
[BabysqliV3.0]phar反序列化
文章目录 [BabysqliV3.0]phar反序列化 [BabysqliV3.0]phar反序列化 开始以为是sql注入 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ST1jvadM-1691302941344)(https://raw.githubusercontent.com/leekosss/photoBed/master/202308032140269.png)…...
数据库架构演变过程
🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…...
webpack 静态模块打包工具
webpack 为什么? 把静态模块内容,压缩,整合,转译等(前端工程化) 把less/sass转成css代码把ES6 降级成ES5支持多种模块文件类型,多种模块标准语法 vite 为什么不直接学习vite 而学习webpack 因为很多项目还是基于webpack来进…...
万界星空科技/免费开源MES系统/免费仓库管理
仓库管理(仓储管理),指对仓库及仓库内部的物资进行收发、结存等有效控制和管理,确保仓储货物的完好无损,保证生产经营活动的正常进行,在此基础上对货物进行分类记录,通过报表分析展示仓库状态、…...
【暑期每日一练】 Epilogue
目录 选择题(1)解析: (2)解析: (3)解析: (4)解析: (5)解析: 编程题题一描述输入描述:输…...
Go微服务实践 - Rpc核心概念理解
概述 从0研究一下Golang已经Golang的微服务生态体系,Golang的微服务首先要从Rpc开始,在升级到Grpc,详细介绍这些技术点都在解决什么技术问题。 Rpc Rpc (Remote Procedure Call) 远程过程调用,简单的理解是一个节点请求另一个节…...
Effective Java笔记(27)消除非受检的警告
用泛型编程时会遇到讲多编译器警告 : 非受检转换警告( unchecked cast warning )、非受检方法调用警告、非受检参数化可变参数类型警告( unchecked parameterized vararg type warning),以及非受检转换警告…...
Dapper
介绍 Dapper是一个轻量级的ORM(对象关系映射)框架,它可以方便地将数据库查询结果映射到.NET对象上,同时也支持执行原生SQL查询。下面我将详细介绍Dapper的使用方法。 安装Dapper 首先,你需要通过NuGet包管理器将Dap…...
Python基础知识(一)
数据类型 基本类型 数字,字符串,布尔 数字类型 int整型 整数 float浮点型 带小数的数 complex复数 abj 字符串类型 str字符串 视作文本 组成:由数字,字母,空格,其他字符等组合而成 表达ÿ…...
QTthreadPool 程序
//*******************主窗口****************************// ------------------------.H--------------------------------- ----------------------------------------------------------- #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #inclu…...
python注册机制Registry
Register用法 1. 为什么使用Register2. 先验知识-----装饰器2.1 代码视角的装饰器用法2.2 装饰器的使用场景2 3. Registry注册器参数parent介绍未完待续 1. 为什么使用Register 2. 先验知识-----装饰器 2.1 代码视角的装饰器用法 实例1 decorate def func():pass #! 等价于…...
【Megatron-DeepSpeed】张量并行工具代码mpu详解(三):张量并行层的实现及测试
相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(三):张量并行层的实现及测试 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一):并行环境初始化 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二):Collective通信操作的封装ma…...
Activiti7实战指南:从流程实例到任务分配的全流程解析
1. Activiti7流程引擎核心概念解析 Activiti7作为当前最流行的开源工作流引擎之一,在企业级业务流程管理中扮演着重要角色。我第一次接触Activiti是在2014年参与某金融项目的审批系统开发时,当时就被它优雅的设计理念所吸引。经过多年实战,我…...
国外SEO优化公司如何提高网站在搜索引擎的排名_国外SEO优化公司的服务语言支持有哪些
国外SEO优化公司如何提高网站在搜索引擎的排名_国外SEO优化公司的服务语言支持有哪些 在当今全球化的互联网时代,国外SEO优化公司在提升网站在搜索引擎中的排名方面扮演着至关重要的角色。不仅仅是提升网站的曝光率,还能有效地增加网站的访问量和用户转…...
MCP4151数字电位器Arduino驱动与三线SPI时序详解
1. MCP4151 数字电位器 Arduino 库深度技术解析1.1 器件本质与工程定位MCP4151 是 Microchip 推出的单通道、10kΩ 标称阻值、257 抽头(0–256)非易失性数字电位器。其核心价值不在于替代模拟电位器进行手动调节,而在于为嵌入式系统提供可编程…...
GAPSO-LSTM:遗传粒子群优化算法优化LSTM超参数的数据回归预测方法
GAPSO-LSTM,即遗传粒子群优化算法优化LSTM的超参数做数据回归预测,多输入单输出,预测精度高于PSO-LSTM,算法原理为串行GAPSO,PSO的寻优结果再引入高斯变异和个体杂交,可以解决PSO容易陷入局部最优的问题。一…...
MAX31865嵌入式驱动库:高精度RTD温度测量实战指南
1. 项目概述7Semi_MAX31865 是一款面向工业级高精度温度测量场景的嵌入式驱动库,专为 Maxim Integrated(现属 Analog Devices)MAX31865 RTD-to-digital 转换器芯片设计。该库并非简单封装,而是以底层硬件控制为核心,提…...
嵌入式环形缓冲区:统一队列/栈/数组的零分配实现
1. 项目概述SSVQueueStackArray 是一个面向嵌入式系统的轻量级、零分配(zero-allocation)、编译期类型安全的环形缓冲区(Ring Buffer)实现库,专为资源受限的 MCU 环境设计。其核心目标并非提供通用容器抽象,…...
【深度解析】Hermes Agent:具备学习循环的开源 AI 代理如何落地到你的开发工作流?
摘要 Hermes Agent 是 News Research 推出的开源 AI Agent 系统,不只是“聊天包装器”,而是带有持久化记忆、自我技能学习与多通道接入的完整代理运行环境。本文从架构原理到落地实践,系统解析 Hermes 的学习循环、模型接入方式(云…...
智能工具助力论文答辩:精选10款AI应用(含爱毕业aibiye)与权威模板分析
工具对比速览表 工具名称 核心功能 适用场景 特色优势 Aibiye 智能成文、文献查找、数据分析 社科/金融/理工类论文 融合多模型架构,精准把握高校规范 Aicheck 初稿生成、大纲定制、图表插入 快速完成初稿需求 全学科覆盖,20-30分钟极速生成 …...
HJ163 时津风的资源收集
题目题解(15)讨论(7)排行 中等 通过率:44.75% 时间限制:1秒 空间限制:256M 知识点广度优先搜索(BFS) 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 …...
2025Reddit养号实战:3步打造高Karma账号矩阵
1. Reddit养号基础:为什么Karma值如此重要? 如果你刚接触Reddit,可能会对这个平台的"Karma系统"感到困惑。简单来说,Karma就像你在Reddit社区里的信用积分,它决定了你的发言权和影响力。我刚开始运营Reddit账…...
