热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【logback】SpringBoot整合logback实现多环境配置

一、读取spring配置文件中的值logback.xml早于application.yml加载,logback-spring.xml晚于application.yml加载,如果lo
一、读取spring配置文件中的值

logback.xml 早于 application.yml 加载,logback-spring.xml 晚于 application.yml 加载,如果logback 配置需要使用 application.yml 中的属性,需要命名为 logback-spring.xml。

本文中采用 logback-spring.xml 文件来读取配置文件 application-${profile}.properties 中的属性值。 logback需要使用 标签才可使用 application.properties 中的属性,示例如下:

  • application.properties配置
spring.profiles.active=loc
log.url=/auditLogs/
  • logback-spring.xml配置

    
    
    
    
二、加载指定的配置模块

    中的name,读取的是 spring.profiles.active配置项的值。

    标签允许更加灵活配置文件,使用该name属性指定哪个配置文件接受配置。可以使用逗号分隔列表指定多个配置文件。

    

    
    
        
        
            
        
    

    
        
        
            
            
            
            
        
    

    
        
        
            
            
            
        
    
三、完整的 logback-spring.xml 配置文件


    
    
    
    

    
    
    
    
    

    
    
    
    
    
    
    
    
    

    
    
    
        
        
            
            
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            
            UTF-8
        
    

    
    
    
        
        
        
            
            ${LOG_APP_HOME}/audit.log.%d{yyyy-MM-dd}.%i-${POD_NAME}.log
            
            
            1000MB
            
            20
            
            20GB
        
        
            
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            
            UTF-8
        
        
        
            INFO
        
    

    
        
            
            ${LOG_ERROR_HOME}/audit-error.log.%d{yyyy-MM-dd}.%i-${POD_NAME}.log
            10MB
            
            7
            1GB
        
        
            
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            UTF-8
        
        
        
            
            ERROR
            
            ACCEPT
            
            DENY
        
    

    
        
            
            ${LOG_DEBUG_HOME}/audit-debug.log.%d{yyyy-MM-dd}.%i-${POD_NAME}.log
            10MB
            
            7
            1GB
        
        
            
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            UTF-8
        
        
        
            DEBUG
            ACCEPT
            DENY
        
    

    

    
    
        
        
            
        
    

    
        
        
            
            
            
            
        
    

    
        
        
            
            
            
        
    

四、本地进行测试

1、创建一个 logback-spring.xml 文件,将上面粘贴到该文件中来

2、创建两个 properties 文件

  • application.properties
spring.profiles.active=loc
log.url=/auditTestLogs/
  •  application-loc.properties
server.port=8081

3、写一个测试类

package com.example;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)
@SpringBootTest(classes = AuditNewTestApplication.class)
class AuditNewTestApplicationTests {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    public void a3() {
        logger.debug("debug日志");
        logger.info("info日志");
        logger.warn("warn日志");
        logger.error("error日志");
    }

}

4、运行测试类

5、在本地中查看日志文件夹中的日志

五、遇到的问题及解决办法

1、日志文件为什么要切割?

原因及解决办法:当单个日志量很大的时候,进入该文件中进行查询日志时,会由于文件太大,出现卡死现象,然后导致 k8s 中的 pod 进行重启服务。解决办法:将单个文件大小设置成 500M

2、日志记录的滚动策略 SizeAndTimeBasedRollingPolicy 和 TimeBasedRollingPolicy 的区别?

原因及解决办法:当我用 SizeAndTimeBasedRollingPolicy 但是我没进行将单个文件进行切割和压缩,然后启动项目会报错。解决办法:如果担心日志文件过大,需要切割和压缩文件,用 SizeAndTimeBasedRollingPolicy 。如果不进行切割文件,就用 TimeBasedRollingPolicy。

3、app 文件夹中,日志中想同时记录 INFO 和 ERROR 级别的日志

原因及解决办法:有些人想单个日志文件想同时记录 INFO 和 ERROR 级别的日志,不想将其进行分开。解决办法:将 onMatch 和 onMismatch 标签进行注释掉或者删掉,就能打印出大于或等于 INFO 级别的日志了。

六、总结
  • linux中绝对路径中会有三个级别日志的文件夹,app文件夹记录大于或等于INFO级别日志信息,debug文件夹记录DEBUG级别日志,errer文件夹记录ERROR级别日志。dev环境有debug级别日志,test和stage环境和prod环境不记录debug级别日志,因为在logback中没有配置。

  • dev、test、stage、prod环境在linux中控制台打印都会输出DEBUG以上的级别日志含DEBUG级别

推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
author-avatar
我是你的特效
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有