logback之配置文件使用详解
目录
(一)配置文件的加载
(二)使用介绍
1、configuration:配置文件的跟元素
2、contextName:设置日志上下文名称
3、contextListener:设置上下文监听事件
4、property/variable/substitutionProperty:设置变量
5、conversionRule:自定义关键字的转换规则
6、statusListener:配置日志的状态监听器
7、appender:日志事件的输出组件
8、logger:日志记录实例
9、include:内嵌配置文件
(一)配置文件的加载
(1)设置系统变量:logback.configurationFile指定配置文件路径
启动时加入启动参数-Dlogback.configurationFile=/path/log/logback.xml
(2)查找resource下的logback-test.xml(这个通常是单元测试时使用,配置在test/resources下)
(3)查找resource下的logback.xml
(二)使用介绍
先给出一份比较详细的配置文件(注意此配置文件并不一定合理,因为很多标签属性是为了展示其用法而加,实际的配置文件需要根据项目所需设置),然后再对其中标签元素一一介绍
<configuration scan="true" scanPeriod="1 minute" debug="true"><!--<turboFilter class=""/>--><!-- Appenders --><!--<contextName>mallLogSystem</contextName>--><!--<contextListener class=""/>--><property name="logPath" value="logs" scope="SYSTEM"/><property name="appName" value="mallSystem"/><!--<property resource="log.properties"/>--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><!-- 设置是否在启动时触发之前丢弃的事件 --><discardingThreshold>0</discardingThreshold><!-- 设置这个appender的neveQueueSize --><queueSize>512</queueSize><!-- 添加真实的appender --><appender-ref ref="ROLLING"/></appender><appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${logPath}/${appName}.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/${appName}.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory> <!-- 保留最近30天的日志文件 --><MaxFileSize>10MB</MaxFileSize></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="impossible" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${logPath}/${impossibleName}.log</file><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>${logPath}/${impossibleName}.%i.log.zip</fileNamePattern><minIndex>1</minIndex><maxIndex>3</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>16kb</maxFileSize></triggeringPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} %msg%n</pattern></encoder><filter class="com.mall.common.log.LevelRangeFilter"><minLevel>WARN</minLevel><maxLevel>ERROR</maxLevel><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><logger name="impossible" additivity="false"><appender-ref ref="impossible"/></logger><!-- Root Logger --><root level="Info"><appender-ref ref="CONSOLE"/><appender-ref ref="ASYNC"/></root>
</configuration>
1、configuration:配置文件的跟元素
属性介绍
scan:true表示会添加一个定时任务检查配置文件是否改变,改变则重新加载,和scanPeriod配合使用。默认为false.
scanPeriod:扫描周期,支持Duration字符串转换,300 millisecond,1 minute,60 second, 1 hour,1 day。空格将数量和单位分割开。
debug:true,表示开启日志初始化时的内部日志打印,可以看到日志初始化的一些输出日志。默认是关闭的,日志初始化有问题可以将此项打开,方便看初始化过程。
packagingData: 如果设置为true,那么设置context中对应的属性为true。此属性控制有异常抛出时,异常堆栈是否包含jar包以及对应版本号,默认为false
2、contextName:设置日志上下文名称
3、contextListener:设置上下文监听事件
可以监听上下文生命周期的事件,属性class设置监听器的类。监听事件包含:onStart、onReset、onStop、onLevelChange
4、property/variable/substitutionProperty:设置变量
这3个标签是同一个(历史原因造成),可以定义key-value属性值
scope:作用域,有3种范围:LOCAL, CONTEXT, SYSTEM。变量的查找顺序是本地,然后是CONTEXT,然后才是SYSTEM。默认是LOCAL。注意SYSTEM实际会设置到系统变量中,所以需要谨慎。
name:key值
value:key对应的value。
file:支持批量配置文件导入,值为文件绝对路径
resource:配置的是资源文件,相对于resources路径,如:<property resource="log.properties"/>
name和value是成对出现的,并且和file、resource互斥,即一个property只配置3者其中之一即可
5、conversionRule:自定义关键字的转换规则
只需要配置class属性,对应的是转换器类。详情可参见《logback之自定义pattern使用的转换器》
6、statusListener:配置日志的状态监听器
也只需要配置监听器类,只需要实现addStatusEvent即可,然后结合StatusPrinter,可以打印状态事件,在排错方面很有用。
7、appender:日志事件的输出组件
name:定义一个名称
class:对应的appender类
通常有4种appender:ConsoleAppender,FileAppender,RollingFileAppender,AsyncAppender。除了AsyncAppender需要引用实际的appender以外,其余appender都需要定义encoder,以设置日志输出格式:
<encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
pattern详细介绍,可参加《logback之pattern详解以及源码分析》同时还可以添加过滤器,如下:
<filter class="ch.qos.logback.classic.filter.LevelFilter"><Level>INFO</Level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter>
过滤器可自定义,详情可参见另一篇《logback之自定义过滤器》
(1) ConsoleAppender:输出到控制台,示例如下:
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender>
(2)FileAppender:输出到固定的日志文件
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender"><file>${logPath}/${appName}_fix.log</file><append>true</append><prudent>false</prudent><BufferSize>1024</BufferSize><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender>
file:设置文件名称,支持变量绑定
append:是否将日志追加到文件现有内容的末尾,默认为true。
prudent:是否prudent模式,默认为false。此项开启需谨慎,用于多个进程间的共享文件写入,会加文件锁,所以可能会有性能影响。(如果文件每秒只有30条日志,性能影响不大,但如果每秒超过100以上,那么就可能会有性能问题了)
BufferSize:缓存区大小。FileAppender用BufferedOutputStream实际输出日志,所以可以设置缓存区大小,默认8096。
(3)RollingFileAppender:也是输出到日志文件,继承FileAppender,但可以配置滚动策略实现日志滚动,这个在实际生产中用的比较大。如下示例是每天滚动一次文件,最多保留30天的日志。同时还按文件大小滚动,如果文件超过10M也会滚动
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${logPath}/${appName}.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/${appName}.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory> <!-- 保留最近30天的日志文件 --><MaxFileSize>10MB</MaxFileSize></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender>
继承自FileAppender,所以FileAppender可以设置的属性,它都可以设置。另外增加了RollingPolicy和TriggeringPolicy。设置滚动策略以及滚动触发的策略。SizeAndTimeBasedRollingPolicy继承自TimeBasedRollingPolicy,既是RollingPolicy也是TriggeringPolicy。所以不用额外设置TriggeringPolicy。
滚动策略和触发策略还可以有如下搭配:
按文件大小滚动:最多3个滚动文件,超过3个,会把旧的删掉。触发条件按文件大小,下面配置的是16kb。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>${logPath}/${impossibleName}.%i.log.zip</fileNamePattern><minIndex>1</minIndex><maxIndex>3</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>16kb</maxFileSize></triggeringPolicy>
按日期滚动:每天滚动一次,滚动的频率是根据所配置${yyyy-MM-dd}文件日期格式定的,如果配置按月,那么就是${yyyy-MM}
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/logback.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>logs/logback.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory> <!-- 保留最近30天的日志文件 --></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender>
(4)AsyncAppender:异步日志输出,需要appender-ref指定实际的appender组件。
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><!-- 如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>20</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>512</queueSize><!-- 队列满了不阻塞调用者--><neverBlock>true</neverBlock><!-- 添加真实的appender,最多只能添加一个 --><appender-ref ref="ROLLING"/></appender>
AsyncAppender是为了不阻塞主线程而使用的,日志不会直接输出,而是放到阻塞队列中。它会开启一个单独的后台线程,从ArrayBlockingQueue中日志获取再调用实际的appender输出日志。
discardingThreshold:设置队列容量剩余多少时直接丢弃info(包含info)级别以下的日志的阈值。日志容量达到阈值,说明此时日志负载是比较重的,这时保证重要级别的日志输出。默认为-1,表示不限制。
queueSize:队列的容量
neverBlock:设置日志事件添加到队列中的方式,如果是neverBlock那么使用offer添加日志事件,那么在日志容量满的情况下是不会阻塞的;但如果是false,那么使用put添加就会阻塞主线程进入等待了。
8、logger:日志记录实例
标签属性:
name:logger的名称,有层级关系。如com.example.ClassInfo,那么它父级logger是com.example-》com-》root。所有的logger的根logger都是root。
level:定义日志级别,如果没有定义则继承父级logger的日志级别。
additivity:定义日志是否传递到父级,如果为true的话,那么除了会输出到当前logger的appender以外,还会传递给父级的appender。那么一条日志记录会输出到多个日志文件中。默认为true。
内嵌标签:
appender-ref:引用的appender
<logger name="impossible" additivity="false"><appender-ref ref="impossible"/><appender-ref ref="fileAppender"/></logger>
9、include:内嵌配置文件
标签属性:
file:定义内嵌文件的绝对路径
url:url形式引入内嵌文件
resource:相对于resources路径引入内嵌文件
optional:是否输出解析内嵌配置文件过程中的状态日志,默认是false。
file、url、resource只能配置其中一个。内嵌文件必须以<included>开头,以<included>结尾。
如定义一个logProperty.xml:
<included><property name="logPath" value="logs"/><property name="appName" value="mallSystem"/>
</included>
然后在主配置文件中引入:
<include resources="logProperty.xml"/>
相关文章:
logback之配置文件使用详解
目录 (一)配置文件的加载 (二)使用介绍 1、configuration:配置文件的跟元素 2、contextName:设置日志上下文名称 3、contextListener:设置上下文监听事件 4、property/variable/substituti…...

壁纸样机神器,这个工具适合专业设计师用吗?
壁纸样机神器在一定程度上适合专业设计师使用,但是否适合具体取决于设计师的需求和使用场景: 适合专业设计师的方面 快速实现设计想法:专业设计师在创作过程中,有时需要快速将设计想法变为可视化的效果图,以便进行初…...

MySQL秘籍之索引与查询优化实战指南
MySQL秘籍之索引与查询优化实战指南 目录 MySQL秘籍之索引与查询优化实战指南相关阅读索引相关EXPLAIN 版本 1. 初级篇1.1 【练体术】基础1.1.1 库操作1.1.1 表操作创建一个表增加表字段 1.1.2 增删改插入一条数据删除一条数据更新一条数据库 1.1.3 查询查询所有数据条件查询&a…...
【AI日记】25.01.03 kaggle 比赛 3-2 未来的命运
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加:kaggle 比赛 Forecasting Sticker Sales时间:8 小时 读书 书名:秦制两千年时间:1.5 小时评估:读完,非常不错,很…...

Linux(Centos 7.6)命令详解:ls
1.命令作用 列出目录内容(list directory contents) 2.命令语法 Usage: ls [OPTION]... [FILE]... 3.参数详解 OPTION: -l,long list 使用长列表格式-a,all 不忽略.开头的条目(打印所有条目,包括.开头的隐藏条目)…...

【Unity3D】UGUI Canvas画布渲染流程
参考文档:画布 - Unity 手册 Canvas组件:画布组件是进行 UI 布局和渲染的抽象空间。所有 UI 元素都必须是附加了画布组件的游戏对象的子对象。 参数: Render Mode 渲染模式:Screen Space - Overlay、Screen Spa…...
minikube安装k8s
一、安装k8s版本 export REGISTRY_MIRRORhttps://registry.cn-hangzhou.aliyuncs.com curl -sSL https://kuboard.cn/install-script/v1.30.x/install_kubelet.sh | sh -s 1.30.0 二、安装docker及minikube useradd docker passwd docker 密码也设置为docker #创建docker组…...

Docker图形化界面工具Portainer最佳实践
前言 安装Portainer 实践-基于Portainer安装redis-sentinel部署 Spring Boot集成Redis Sentinel 前言 本篇文章笔者推荐一个笔者最常用的docker图形化管理工具——Portainer。 安装Portainer 编写docker-compose文件 Portainer部署的步骤比较简单,我们还是以…...

借助 FinClip 跨端技术探索鸿蒙原生应用开发之旅
在当今数字化浪潮汹涌澎湃的时代,移动应用开发领域正经历着深刻的变革与创新。鸿蒙操作系统的崛起,以其独特的分布式架构和强大的性能表现,吸引了众多开发者的目光。而FinClip 跨端技术的出现,为开发者涉足鸿蒙原生应用开发提供了…...
【网络】ARP表、MAC表、路由表
ARP表 网络设备存储IP-MAC映射关系的表项,便于快速查找和转发数据包 ARP协议工作原理 ARP(Address Resolution Protocol),地址解析协议,能够将网络层的IP地址解析为数据链路层的MAC地址。 1.主机在自己的ARP缓冲区中建…...

Linux驱动开发学习准备(Linux内核源码添加到工程-Workspace)
Linux内核源码添加到VsCode工程 下载Linux-4.9.88源码: 没有处理同名文件的压缩包: https://pan.baidu.com/s/1yjIBXmxG9pwP0aOhW8VAVQ?pwde9cv 已把同名文件中以大写命名的文件加上_2后缀的压缩包: https://pan.baidu.com/s/1RIRRUllYFn2…...

25.1.3
java数组: dataType[] arrayRefVar //推荐写法 //int[] mylist //或 dataType arrayRefVar[] //int mylist[]创建数组对象: arrayRefVar new dataType[arraySize]; dataType[] arrayRefVar new dataType[arraySize];for-each循环: jav…...

Leecode刷题C语言之我的日程安排表②
执行结果:通过 执行用时和内存消耗如下: typedef struct {int start;int end; }BOOKING;#define MAX_BOOK_NUM (1000) typedef struct MyCalendar_ {BOOKING book[MAX_BOOK_NUM];int bnum;BOOKING *sorted[MAX_BOOK_NUM];int num;int conflict[MAX_BOOK_NUM];int c…...

十二、Vue 路由
文章目录 一、简介二、安装与基本配置安装 Vue Router创建路由实例在应用中使用路由实例三、路由组件与视图路由组件的定义与使用四、动态路由动态路由参数的定义与获取动态路由的应用场景五、嵌套路由嵌套路由的概念与配置嵌套路由的应用场景六、路由导航<router - link>…...

smell---Paddle-DI
跨模态文档智能大模型–Ernie-Layout 目标:提取文档中无结构或半结构化的知识 github项目地址 Paddle NLP ERNIE-Layout基于Transformer Encode架构,并提出以下trick: 1、OCR工具提取信息 借助OCR工具提取图片中的文字及文字对应的坐标信息…...

PCL点云库入门——PCL库点云特征之点云法向量(NormalEstimation)及其可视化
1、PCL点云库中点云特征综述 1.1、点云特征综述 点云特征描述在三维数据处理领域扮演着至关重要的角色,它直接决定了后续的识别、分类以及重建等关键任务的执行效果。在众多的特征描述方法中,我们可以看到基于几何形状的特征、基于统计信息的特征以及…...
25.Java JUC 引入(进程与线程、线程的状态、并发与并行、管程、用户线程与守护线程)
一、JUC 简介 JUC 是 java.util.concurrent 工具包的简称,这是一个处理线程的工具包,从 JDK1.5 开始出现 二、进程与线程 1、基本介绍 (1)进程 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源…...

Linux 异步 I/O 框架 io_uring:基本原理、程序示例与性能压测
大家觉得有意义和帮助记得关注和点赞!!! io_uring 是 2019 年 Linux 5.1 内核首次引入的高性能 异步 I/O 框架,能显著加速 I/O 密集型应用的性能。 但如果你的应用已经在使用 传统 Linux AIO 了,并且使用方式恰当&…...
Uniapp中使用`wxml-to-canvas`开发DOM生成图片功能
Uniapp中使用wxml-to-canvas开发DOM生成图片功能 在移动端开发中,生成图片是一个常见需求,例如用于分享海报、生成动态二维码等。在Uniapp框架中,我们可以通过wxml-to-canvas插件轻松实现将DOM转化为图片的功能。本文将详细介绍如何在Uniapp…...
Linux之ARM(MX6U)裸机篇----5.仿stm32的LED驱动实验
一,启动文件 .global _start .global _bss_start /* 类似宏定义把__bss_start定义为_bss_start */ _bss_start:.word __bss_start.global _bss_end _bss_end:.word __bss_end_start:#设置处理器进入SVC模式mrs r0, cpsr /* 读取cpsr到r0 */bic r0, r0, …...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...