使用logback按天生成日志并按等级进行分类

news2024/11/14 16:25:34

先看效果---->>>>

按照:error、info、warn进行分类:

 每个文件里面按日期进行分类:

 其中对应的Maven如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.yml中添加以下内容:

#日志配置
logging:
  file:
    path: logs #content root目录下的logs文件夹存放日志,不存在则创建
  pattern:
    console: "%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n"

核心文件:logback-spring.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="60 seconds">

    <springProperty scope="context" name="LOG_NAME" source="spring.application.name"/>
    <springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>


    <!-- 日志属性配置 -->
    <property name="LOG_FILE" value="${LOG_PATH}/${LOG_NAME}.log"/>
    <property name="LOG_FILE_CLEAN_HISTORY_ON_START" value="false" />
    <property name="ROLLING_FILE_NAME_PATTERN" value="${LOG_FILE}.%d{yyyy-MM-dd}.%i" />
    <property name="LOG_FILE_MAX_SIZE" value="512MB" />
    <property name="LOG_FILE_MAX_HISTORY" value="30" />

    <contextName>${LOG_NAME}</contextName>
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出(配色):%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%boldMagenta(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %msg %n</pattern>
        </encoder>
    </appender>


    <!--根据日志级别分离日志,分别输出到不同的文件-->
    <appender name="debugLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按时间保存日志 修改格式可以按小时、按天、月来保存-->
            <fileNamePattern>${LOG_PATH}/${LOG_NAME}-debug.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--保存时长-->
            <MaxHistory>${LOG_FILE_MAX_HISTORY}</MaxHistory>
            <!--文件大小-->
            <totalSizeCap>${LOG_FILE_MAX_SIZE}</totalSizeCap>
        </rollingPolicy>
    </appender>


    <!--根据日志级别分离日志,分别输出到不同的文件-->
     <appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按时间保存日志 修改格式可以按小时、按天、月来保存-->
            <fileNamePattern>${LOG_PATH}/${LOG_NAME}-info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--保存时长-->
            <MaxHistory>${LOG_FILE_MAX_HISTORY}</MaxHistory>
            <!--文件大小-->
            <totalSizeCap>${LOG_FILE_MAX_SIZE}</totalSizeCap>
        </rollingPolicy>
    </appender>


    <appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${LOG_PATH}/${LOG_NAME}-error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--保存时长-->
            <MaxHistory>${LOG_FILE_MAX_HISTORY}</MaxHistory>
            <!--文件大小-->
            <totalSizeCap>${LOG_FILE_MAX_SIZE}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!--如果不需要区分spring环境,直接用下边代码-->
    <root level="info">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="infoLog"/>
        <appender-ref ref="errorLog"/>
    </root>

<!--如果需要区分springfile 需要用下边代码-->
<!--    <springProfile name="local">
        <root level="debug">
            <appender-ref ref="consoleLog"/>
        </root>
    </springProfile>


    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="infoLog"/>
            <appender-ref ref="errorLog"/>
            <appender-ref ref="JSON_FILE" />
        </root>
    </springProfile>

    <springProfile name="test">
        <root level="info">
            <appender-ref ref="infoLog"/>
            <appender-ref ref="errorLog"/>
            <appender-ref ref="JSON_FILE" />
        </root>
    </springProfile>

    <springProfile name="prod">
        <root level="info">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="infoLog"/>
            <appender-ref ref="errorLog"/>
            <appender-ref ref="JSON_FILE" />
        </root>
    </springProfile>-->


</configuration>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务框架SpringcloudAlibaba+Nacos集成RabbiMQ

目前公司使用jeepluscloud版本&#xff0c;这个版本没有集成消息队列&#xff0c;这里记录一下&#xff0c;集成的过程&#xff1b;这个框架跟ruoyi的那个微服务版本结构一模一样&#xff0c;所以也可以快速上手。 1.项目结构图&#xff1a; 配置类的东西做成一个公共的模块 …

Java学习 8.方法习题

1.递归求 N 的阶乘的和 思路 循环递归先从1到N相乘&#xff0c;求出每一项的阶乘&#xff0c;在定义变量将它们相加 代码实现 public static int rec(int N){int i1;int sum0;int num1;for(i1;i<N;i){num*i;sumnum;}return sum;} 运行结果 2.递归求和 求12...10 思路 …

react项目入门,创建项目

react项目入门&#xff0c;创建项目 // react-ts项目入门&#xff0c;创建项目 // https://juejin.cn/post/6844904184597184519第零步&#xff0c;检查版本 node -v npm -v 1a69c3036bc3aea6d29d2b66fe46602f.jpg 第一步&#xff0c;新建个文件夹&#xff0c;不能中午命名&a…

AI时代:ChatGPT让程序员插上翅膀

程序员开发新模式&#xff1a;一本专注于帮助程序员在AI时代实现晋级、提高效率的图书。书中介绍了如何使用 ChatGPT 来完成高质量代码编写、文档编写、软件设计等各个环节&#xff0c;并通过实战案例展示了 ChatGPT在实际项目开发中的应用方法。 1.开发新模式&#xff1a;让程…

Linux安装pinpoint监控保姆级安装攻略没有之一

Linux安装pinpoint监控&#xff0c;保姆级安装攻略&#xff0c;没有之一 pinpoint介绍 Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具&#xff0c;用于基于java的大规模分布式系统&#xff0c;基于Google Dapper论文。 架构组成 Pinpoin…

Flask Shell 操作 SQLite

一、前言 这段时间在玩Flask Web&#xff0c;发现用Flask Shell去操作SQLite还是比较方便的。今天简单地介绍一下。 二、SQLite SQLite是一种嵌入式数据库&#xff0c;它的数据库就是一个文件&#xff0c;处理速度快&#xff0c;经常被集成在各种应用程序中&#xff0c;在IO…

5分钟搞定深度学习中间特征可视化

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 今天跟大家分享一个可视化CNN/ViT中间特征的库&#xff1a;pytorch-grad-cam 下载地址&#xff1a;https://github.com/jacobgil/pytorch-grad-cam pytorch-grad-cam支持多种可视化方法&#…

接口测试之jmeter基本归结

一、接口测试 二、jmeter脚本开发 三、Jmeter参数化技术

云帆培训考试系统更新说明:v6.9.0

1、增加群组功能 -- 增加群组功能&#xff0c;一个用户可以存在于多个小组中&#xff1b; -- 在线考试、课程学习、活动报名、题库训练、知识竞赛增加群组权限设置&#xff1b; 2、增加线下考试功能 -- 增加线下考试功能&#xff0c;可批量导入线下成绩&#xff0c;管理线下…

Spring Web MVC练习

一&#xff1a;开发程序常见问题 (1)学会定位前后端问题 &#x1f497;通过看日志&#xff0c;查看到底是前端问题还是后端问题 ①前端&#xff1a;F12查看网页的控制台 ②后端&#xff1a;测试后端接口参数&#xff1b;查看IDEA的控制台 (测试后端接口参数&#xff0c;即去访…

java中包的概念

内容仅供复习 java中包是把一些类进行打包&#xff0c;在一个包中所有public的类可以直接使用。如果在别的包中要使用一个类就必须import这个包。friendly类型的方法在同个包中可以使用&#xff0c;在不同包里面不可以访问这个类型的方法。 创建一个java项目&#xff0c;在src…

【Http协议】 二

实际开发中&#xff0c;经常需要能够手动的构造出Http协议的请求 一般是通过以下几种方式&#xff1a; 1.通过html中的form表单 2.通过js的ajax 3.Java代码&#xff08;其他各种语言&#xff09; 4.借助一些第三方工具 1.通过html的form标签/表单构造http请求 >对于编写html…

SpringBoot通过注解形式实现系统操作日志

介绍 我们在日常开发工作中&#xff0c;肯定逃不开与日志接触&#xff0c;一些比较严谨的后台管理系统里面会涉及到一些比较重要的资料&#xff0c;有些公司为了知道有哪些人登录了系统&#xff0c;是谁在什么时候修改了用户信息或者资料&#xff0c;所以就有了操作日志这么个…

MySQL 基础学习笔记(一)

目录 1 SQL简介2 MySQL基本语法2.1 语法规则2.2 数据类型 3 DDL3.1 操作数据库3.2 操作表 4 DML4.1 添加数据4.2 修改数据4.3 删除数据 5 DQL5.1 基础查询5.2 条件查询5.3 排序查询5.4 聚合查询5.5 分组查询5.6 分页查询 1 SQL简介 SQL &#xff1a;Structured Query Language&…

基于 MySQL 多通道主主复制的机房容灾方案

文章中介绍了多种 MySQL 高可用技术&#xff0c;并介绍了根据自身需求选择多通道主主复制技术的过程和注意事项。 作者&#xff1a;徐良&#xff0c;现任中国移动智慧家庭运营中心数据库高级经理&#xff0c;多年数据库运维优化经验&#xff0c;历任华为、一线互联网公司高级 D…

使用Nokogiri和OpenURI库进行HTTP爬虫

目录 一、Nokogiri库 二、OpenURI库 三、结合Nokogiri和OpenURI进行爬虫编程 四、高级爬虫编程 1、并发爬取 2、错误处理和异常处理 3、深度爬取 总结 在当今的数字化时代&#xff0c;网络爬虫已经成为收集和处理大量信息的重要工具。其中&#xff0c;Nokogiri和OpenUR…

softmax的高效CUDA编程和oneflow实现初步解析

本文参考了添加链接描述,其中oneflow实现softmax的CUDA编程源代码参考链接添加链接描述 关于softmax的解读以及CUDA代码实现可以参考本人之前编写的几篇文章添加链接描述,添加链接描述,添加链接描述 下面这个图片是之前本人实现的softmax.cu经过接入python接口,最终和pytor…

Javascript基础-BOM

文章目录 BOM——Browser Object Model定时器--延时函数 JS执行机制具体流程 三个常见对象location对象navigator对象history对象 本地存储介绍sessionStoragesessionStorage 存储复杂数据类型字符串拼接 正则表达式元字符 BOM——Browser Object Model 浏览器对象模型&#x…

【LeetCode:26. 删除有序数组中的重复项 | 双指针】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

怎么从外面远程访问服务器设备?

怎么从外面远程访问服务器设备&#xff1f; “我家里有一台服务器设备&#xff0c;当我在学校时需要远程访问家里的服务器。请问是否可以从外网远程访问家里的服务器设备&#xff0c;有什么方法可以实现吗&#xff1f;” 远程访问服务器设备&#xff0c;一种典型…