【Log4j2】Log4j2最佳实践:Log4j2配置超过7天压缩,超过3个月删除文件的滚动日志,分别定义info文件和error文件,按照每小时存储
目录
Log4j2配置
springboot多环境日志配置
参考资料
Log4j2配置
如果你想要在控制台输出美化的日志信息,你可以使用Log4j2的ConsoleAppender和AnsiColorConverter来实现。下面是相应的配置示例:
<Configuration status="WARN"><Properties><Property name="logPath">/path/to/logs</Property></Properties><Appenders><Routing name="RoutingAppender"><Routes pattern="$${ctx:loggerType}"><Route key="info" ref="InfoFileAppender"><Filters><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></Filters></Route><Route key="error" ref="ErrorFileAppender"><Filters><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/></Filters></Route></Routes></Routing><Console name="ConsoleAppender" target="SYSTEM_OUT"><PatternLayout pattern="%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=blue, TRACE=blue}" /></Console><RollingFile name="InfoFileAppender" fileName="${logPath}/info.log"filePattern="${logPath}/info-%d{yyyy-MM-dd-HH}.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true" /></Policies><DefaultRolloverStrategy max="24"><Delete basePath="${logPath}"><IfFileName glob="info-*.log" /><IfLastModified age="7d" /></Delete></DefaultRolloverStrategy><Actions><GZCompress><IfLastModified age="7d"/></GZCompress></Actions></RollingFile><RollingFile name="ErrorFileAppender" fileName="${logPath}/error.log"filePattern="${logPath}/error-%d{yyyy-MM-dd-HH}.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true" /></Policies><DefaultRolloverStrategy max="24"><Delete basePath="${logPath}"><IfFileName glob="error-*.log" /><IfLastModified age="7d" /></Delete></DefaultRolloverStrategy><Actions><GZCompress><IfLastModified age="7d"/></GZCompress></Actions></RollingFile></Appenders><Loggers><Root level="info"><AppenderRef ref="RoutingAppender"/><AppenderRef ref="ConsoleAppender"/></Root></Loggers>
</Configuration>
在这个配置中,我们定义了两个RollingFile appender,分别用于info日志和error日志。每个appender都有自己的文件名、文件模式、时间触发策略和滚动策略。同时,我们使用了DeleteAction来保持每个类型的日志文件在7天内,并使用GZCompressAction在满足条件后进行压缩。
使用RoutingAppender可以根据Logger的上下文信息将日志路由到不同的appender。在这个示例中,我们使用"loggerType"作为Routing key,并在Routes元素内定义了两个Route,分别将"info"和"error"路由到对应的appender。
最后,我们将RoutingAppender作为Root logger的Appender引用,以便所有日志都能正确路由到相应的appender。
请根据实际需求修改logPath配置属性,将日志存储在适当的位置。另外,你可以通过修改DeleteAction的条件来实现按照3个月删除文件的需求。例如,可以将<IfLastModified age="7d" />改为<IfLastModified age="90d" />。
springboot多环境日志配置
在Spring Boot多环境下,可以为不同环境分别配置不同的Log4j2配置文件,使用Spring Boot提供的`logging.config`配置项指定当前环境下使用的Log4j2配置文件。
首先,在项目的resources目录下创建多个Log4j2配置文件,以application-{profile}.yml(或application-{profile}.properties)命名,其中{profile}为环境名称,如application-dev.yml、application-test.yml和application-prod.yml。
接着,在Spring Boot的配置文件(如application.yml)中,指定`logging.config`配置项的值为当前环境下使用的Log4j2配置文件路径。例如:
```yaml
spring:
profiles:
active: dev
application:
name: myapp
main:
allow-bean-definition-overriding: true
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
logging:
config: classpath:log4j2-${spring.profiles.active}.xml
```
在上面的配置中,我们将`logging.config`配置项的值设置为`classpath:log4j2-${spring.profiles.active}.xml`,即使用当前激活的环境对应的Log4j2配置文件。这里使用了`${spring.profiles.active}`EL表达式获取当前激活的环境名称。
最后,在Log4j2配置文件中,可以使用`${sys:property}`获取系统属性,例如`${sys:logPath}`获取名为`logPath`的系统属性。也可以使用`${ctx:variableName}`获取Log4j2上下文变量。
例如,在Log4j2配置文件中,可以使用以下方式获取当前环境对应的配置项:
```xml
<Configuration>
<Properties>
<Property name="logPath">${sys:logPath}</Property>
</Properties>
<!-- 定义Appenders和Loggers -->
</Configuration>
```
在上面的配置中,我们使用`${sys:logPath}`获取名为`logPath`的系统属性。
这样,就可以实现在Spring Boot多环境下使用Log4j2的配置了。
参考资料
log4j2 的使用【超详细图文】-CSDN博客
log4j2 实际使用详解-CSDN博客
相关文章:
【Log4j2】Log4j2最佳实践:Log4j2配置超过7天压缩,超过3个月删除文件的滚动日志,分别定义info文件和error文件,按照每小时存储
目录 Log4j2配置 springboot多环境日志配置 参考资料 Log4j2配置 如果你想要在控制台输出美化的日志信息,你可以使用Log4j2的ConsoleAppender和AnsiColorConverter来实现。下面是相应的配置示例: <Configuration status"WARN"><…...
windows和Linux如何做强制域名解析
首先我们了解两个问题: 一、域名解析是什么? 域名解析是让我们可以通过网站的域名来找到它对应的IP地址,以便更加方便的访问我们所需访问的网站的一种服务。 它通过DNS服务器来进行,我们输入所想要访问的域名,将会通过…...
5G NTN:通信新天地,卫星通信的奇妙探索
导言 嗨,大家好!今天我们要深入了解一项让通信更强大的技术——5G NTN。它和卫星通信结合在一起,为我们带来了通信的新时代。在这篇文章中,我们将用白话文揭示5G NTN和卫星通信的关系,探索这个通信世界的奇妙之旅。 5…...
RabbitMQ的基础使用
/*** 使用rabbitMQ* 1.引用amqp场景 RabbitAutoConfiguration就会自动生效* 2.给容器中自动配置了各种api RabbitTemplate AmqpAdmin CachingConnectionFactory RabbitMessagingTemplate* 所有属性都是 spring.rabbitmq开头* 3.通过注解EnableRabbit使用* 4.监听消息 使用Rabbi…...
使用Uniapp随手记录知识点
使用uniapp随手记录知识点 1 组件内置组件扩展组件 2 vuex状态管理使用流程mapState 辅助函数gettersMutation 1 组件 内置组件 内置组件内主要包含一些基础的view button video scroll-view等内置基础组件,满足基础场景 扩展组件 扩展组件是uniapp封装了一些成…...
Fiber Node的数据结构,以及如何在Reconciliation阶段被使用。
首先,Fiber Node是React用来描述组件树的数据结构,每一个React组件都对应一个Fiber Node。下面是一个Fiber Node的基本结构: const fiber {// 标识这个Fiber Node的类型(函数组件,类组件,DOM节点类型等&a…...
Spring Cloud Alibaba 之 Sentinel
大家好,我是升仔 引言 在微服务架构中,服务之间的依赖错综复杂。一旦某个服务出现问题,很容易引发连锁反应,导致整个系统瘫痪。Sentinel 就是为了解决这类问题而生的。它通过流量控制、熔断降级等机制,保护服务不被过多…...
Jenkins Tutorial
什么是Jenkins Jenkins是一个自动化平台,它允许你使用pipelines去部署应用。它也可以自动化其他任务。 BUILDTESTDEPLOYMENT Jenkins 架构 首先,你拥有一个Master Server,它控制pipelines和安排Build到你的Agent上; 其次&…...
css mask 案例
文章目录 一、基本用法二、图案遮罩二、文字阴影效果三、日历探照灯效果 CSS的mask属性用于定义一个可重复使用的遮罩,可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性,可以创建独特的效果,比如圆形、渐变…...
案例系列:Movielens_预测用户对电影的评分_基于行为序列Transformer的推荐系统
文章目录 简介数据集设置准备数据下载并准备数据框将电影评分数据转换为序列 定义元数据为训练和评估创建 tf.data.Dataset创建模型输入编码输入特征创建一个二叉搜索树模型运行训练和评估实验结论 描述: 使用行为序列Transformer(BST)模型在…...
单词接龙[中等]
一、题目 字典wordList中从单词beginWord和endWord的 转换序列 是一个按下述规格形成的序列beginWord -> s1 -> s2 -> ... -> sk: 1、每一对相邻的单词只差一个字母。 2、对于1 < i < k时,每个si都在wordList中。注意,beg…...
机器人制作开源方案 | 森林管理员
作者:李佳骏、常睿康、张智斌、李世斌、高华耸 单位:山西能源学院 指导老师:赵浩成、郜敏 1. 研究背景 森林作为地球上可再生自然资源及陆地生态的主体,在人类生存和发展的历史中起着不可代替的作用,它不仅能提供…...
Laravel框架使用phpstudy本地安装的composer用Laravel 安装器进行安装搭建
一、首先需要安装Laravel 安装器 composer global require laravel/installer 二、安装器安装好后,可以使用如下命令创建项目 laravel new sys 三、本地运行 php artisan serve 四、 使用Composer快速安装Laravel5.8框架 安装指定版本的最新版本(推荐&a…...
炫酷登录注册界面【超级简单 jQuery+JS+HTML+CSS实现】
一:源码获取 这两天根据需求写了一个比较好看的有动态效果的登录注册切换页面,这里我将源码资源分享给大家,大家可以直接免费下载使用哦,没有 vip 的小伙伴找我私聊发送"登录注册"即可我给你发文件,此登录注…...
2023年国赛高教杯数学建模E题黄河水沙监测数据分析解题全过程文档及程序
2023年国赛高教杯数学建模 E题 黄河水沙监测数据分析 原题再现 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变化和人民生活的影响,以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾等方面都具有重要的理论指导…...
跨国企业传输大文件注意事项和解决方案
随着全球化的推进,越来越多的企业需要在跨国业务合作、项目交付、数据分析等方面展开合作,这就带来了大量大文件的传输需求。大文件传输是指文件大小超过1GB的传输,通常涉及视频、音频、图片、文档、压缩包等多种格式。跨国传输大文件不仅需要…...
【Redis】Redis 的数据类型
有五种常用数据类型:String、Hash、Set、List、SortedSet。以及三种特殊的数据类型:Bitmap、HyperLogLog、Geospatial ,其中HyperLogLog、Bitmap的底层都是 String 数据类型,Geospatial 的底层是 Sorted Set 数据类型。 五种常用…...
QT小技巧 - 使用QMovie进行gif切帧
简介 使用QMovie 将 gif 进行切帧, magick 进行合并代码 QString gifPath "E:\\workspace\\qt\\gif2imgs\\203526qre64haq3ccoobqi.gif"; // 你的图片QMovie movie(gifPath); movie.setCacheMode(QMovie::CacheNone);qDebug() << movie.frameCou…...
ES-搜索
聚合分析 聚合分析,英文为Aggregation,是es 除搜索功能外提供的针对es 数据做统计分析的功能 - 功能丰富,提供Bucket、Metric、Pipeline等多种分析方式,可以满足大部分的分析需求 实时性高,所有的计算结果都是即时返回…...
微信小程序面试题
微信小程序面试题 请解释微信小程序的生命周期及其对应的钩子函数。 微信小程序的生命周期包括 onLaunch、onShow、onHide、onError、onPageNotFound 等阶段。对应的钩子函数分别是: onLaunch:小程序初始化时触发。onShow:小程序启动或从后台…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
