首页 > 编程语言 >【java】动态修改日志级别

【java】动态修改日志级别

时间:2023-03-04 16:46:17浏览次数:32  
标签:java 自定义 Level 日志 级别 logger Logger

背景

  • 开发过程中,为了方便问题快速定位,都会在代码中增加相关日志
  • 生产环境中,为了减少日志输出量,需要提高日志级别,节约资源。

如果能动态修改日志级别,当出现问题时,动态降低日志级别,输出相关的调试信息;问题解决后,动态提高日志级别,屏蔽相关的调试信息。

实现原理

1. log4j

Log4j有三个主要的组件/对象:

  • Loggers(记录器):日志类别
  • Appenders (输出源) :日志要输出的地方
  • Layouts(布局):日志以何种形式输出

想要修改日志级别,主要修改Logger对象,设置输出级别。

1.1 修改根Logger级别

Level level = Level.toLevel(levelName);
LogManager.getRootLogger().setLevel(level);

1.2 修改自定义的Logger级别

Level level = Level.toLevel(levelName);
Logger.getLogger(packageName).setLevel(level);

一般代码中是通过Logger.getLogger(this.getClass)来实例化一个logger,进行日志的打印输出,这都是自定义的logger
如果root logger和自定义logger配置的输出位置不同,取二者的并集,配置的位置都会输出日志
如果root logger和自定义logger配置的输出level不同,主要按照自定义的logger级别输出为主

2. logback

2.1 修改根Logger级别

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.getLogger(Logger.ROOT_LOGGER_NAME).setLevel(Level.toLevel(levelName));

2.2 修改自定义的Logger级别

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.getLogger(packageName).setLevel(Level.toLevel(levelName));

标签:java,自定义,Level,日志,级别,logger,Logger
From: https://www.cnblogs.com/xiaoyu-jane/p/17178528.html

相关文章

  • Mysql 中二进制日志的初步认知
    二进制日志二进制日志中以“事件”的形式记录了数据库中数据的变化情况,对于MySQL数据库的灾难恢复起着重要的作用。开启二进制日志可以在​​my.cnf​​​文件或者​​my......
  • 【Java Pro】001-Java基础:面向对象
    【JavaPro】001-Java基础:面向对象文章目录​​【JavaPro】001-Java基础:面向对象​​​​一、面向对象​​​​1、什么是对象​​​​现实生活中的对象与程序中的对象​​......
  • Java 集合 为什么重写 HashCode 和 equals
    #Java集合为什么重写HashCode和equals>Object源码中的HashCode和equals方法:>>```>publicnativeinthashCode();>>publicbooleanequals(Objectobj){>......
  • JavaScript Modal Image
    <!DOCTYPEhtml><html><head><title>JavaScriptModalImage</title></head><styletype="text/css"> .modal{ position:fixed; z-index:1......
  • Java GUI编程(包括awt,event)弹球小游戏功能扩充。
    原网址:https://gitee.com/EdsionKXXX/pinball-game-demo源代码:1packageAWT_GameDemo;234importjavax.swing.*;5importjava.awt.*;6importja......
  • java 线程同步
    多种方式可以完成线程同步,传统方法是关键字synchronized完成的,可以是同步方法也可以是同步代码块同步方法@Data@AllArgsConstructor@NoArgsConstructorclassMyThea......
  • java 创建线程
    继承ThreadclassMyThread1extendsThread{@Overridepublicvoidrun(){System.out.println("继承Thread...");}}publicclassTest1{......
  • java 线程状态
    线程状态java.lang.Thread.State里明确了线程的各个状态以及怎么进入和退出各个状态publicenumState{//初始化状态,线程创建之后的状态,newThread()之后进......
  • Java集合LinkedList源码中 实现 List 接口 却没有 在 LinkedList实现全部的 List接口
    Java集合LinkedList源码中实现List接口却没有在LinkedList实现全部的List接口方法普通类实现接口,应该实现接口中全部的抽象方法。难道是源码实现接口有什么特殊的......
  • Java 需要快速读出和写入的框架架构
    //对标牛客竞赛小白月赛109a题//importjava.util.*;importjava.io.*;publicclassMain{staticlongn;staticBufferedReaderbf=newBufferedReader(n......