logback日誌級別動態切換的四種方案

生產環境中常常有須要動態修改日誌級別。 如今就介紹幾種方案web

方案一:開啓logback的自動掃描更新

配置以下spring

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- configuration標籤 scan屬性表明logback框架會定時檢測改配置文件是否有發生改動,若是有則更新爲最新配置-->

而後就將修改的配置文件拷貝到app.jar的同級目錄下config/logback.xmlapi

方案二:自定義api

代碼以下springboot

/**
 * log api
 * @author lipeng
 */
@RequestMapping("/api/log")
@RestController
public class LogbackController {

    private Logger log = LoggerFactory.getLogger(LogbackController.class);

    /**
     * logback動態修改包名的日誌級別
     * @param level 日誌級別
     * @param packageName 包名
     * @return 當前的日誌級別
     * @throws Exception
     */
    @RequestMapping(value = "/setlevel")
    public String updateLogbackLevel( @RequestParam(value="level") String level,
                                      @RequestParam(value="packageName",defaultValue = "-1") String packageName) throws Exception {
        ch.qos.logback.classic.LoggerContext loggerContext =(ch.qos.logback.classic.LoggerContext) LoggerFactory.getILoggerFactory();
       Logger logger= null
        if(packageName.equals("-1")) {
            // 默認值-1,更改全局日誌級別;不然按傳遞的包名或類名修改日誌級別。
          logger=  loggerContext.getLogger("root")
        } else {
           logger= loggerContext.getLogger(packageName)
        }
        logger.setLevel(ch.qos.logback.classic.Level.toLevel(level));
        return logger.getLevel();
    }

}

方案三:springboot引入Actuator

一、pom.xml增長相關依賴app

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

一、配置文件中增長配置 若是是springboot1.X,框架

management.security.enabled=false

若是是springboot2.X,則參考以下配置spring-boot

management:
  endpoint:
    health:
      show-details: "ALWAYS"
  endpoints:
    web:
      exposure:
        include: "*"

三、查看級別 咱們能夠發送GET 請求到 http://localhost:8080/actuator/loggers 來獲取支持的日誌等級,以及系統(ROOT)默認的日誌等和各個包路徑(com.xxx.aa等)對應的日誌級別。 訪問會返回全部的類的日誌級別信息。 四、修改日誌級別 經過 http://localhost:8080/actuator/loggers 端點提供的 POST 請求,修改包路徑com.xxx.aa的日誌級別爲DEBUG:debug

發送POST 請求到 http://localhost:8080/actuator/loggers/com.xxx.aa,其中請求 Body 的內容以下:日誌

{
"configuredLevel": "DEBUG"
}

再用GET 訪問 http://localhost:8080/loggers/com.xxx.aa查看當前的日誌級別:code

{
configuredLevel: "DEBUG",
effectiveLevel: "INFO"
}

方案四 集成springcloudadmin來動態修改配置

springcloudadmin安裝部署我就不作描述了,網上不少。 一、引入admin依賴

<dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
        </dependency>
        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

二、登陸springcloudadmin,找到指定的服務中某一個節點 在這裏插入圖片描述 而後點擊左邊日期,進入控制檯,以下 在這裏插入圖片描述 這樣就能動態修改了,操做比較方便。

總結

在條件容許的狀況下建議使用方案四

相關文章
相關標籤/搜索