JMX學習以及在log4j中的應用

jopen 9年前發布 | 30K 次閱讀 log4j 日志處理

前言

JMX即Java Managemen Extensions,是一個為應用程序植入管理功能的框架。一套標準的代理和服務,實際上,用戶可以在任何Java應用程序中使用這些代理和服務實現管理。

常常在編程的過程中有一些配置信息需要動態的進行改變,我以往會有如下幾種做法:

  1. 寫死在Java code中,環境發生變化的時候修改Java code

  2. 寫在名為*.properties的配置文件里,使用Java讀取配置文件

然而今天我們將引入一種高級的方式來進行配置信息的管理,那便是JMX的引入。

如何使用JMX

JMX做為一份規范,JDK中提供了JMX接口,因此安裝了JDK后就可以開發基于JMX的代碼了。

JMX具有兩層結構,各層的組件如下

工具層

  1. Mbeans

  2. 通知模型:Notification、NotificationListener

  3. Mbeans與數據類:Attribute、Operator

代理層

  1. MBean Server

  2. 代理服務


下面學習下log4j2對JMX的支持

JMX-log4j2

Log4j 2 開始支持 JMX. StatusLogger, ContextSelector, 和所有的 LoggerContexts, LoggerConfigs 以及 Appenders 使用了MBeans并且可以被遠程檢測和控制.


使JMX生效

默認情況下JMX是生效的。當log4j初始化的時候StatusLogger, ContextSelector, 以及所有的LoggerContexts, LoggerConfigs 和Appenders 使用了 MBeans. 當啟動JVM時如果想禁用掉JMX則需要在系統配置文件中添加 log4j2.disable.jmx=true .

本地監視

本地監視不需要修改任何系統配置文件。使用Java里自帶的JConsole工具即可監視你的應用,當安裝完JDK之后并配置了環境變量,只需要在終端執行以下命令即可打開可視化的監視界面。

jconsole

遠程監視應用

要使遠程監視應用有效則需要在啟動JVM之前在系統配置文件中添加一下配置.

com.sun.management.jmxremote.port=portNum

其中portNum即指遠程應用的端口。

Log4j2 檢測組件

下面則是Log4j Mbeans在jconsole里的一段截圖.

JMX學習以及在log4j中的應用

可視化客戶端

Log4j包含了基本的可視化組件,可以監視 StatusLogger 輸出以及遠程修改Log4j 配置.該客戶端可以被當作單獨的應用運行,也可以作為JConsole的插件使用。

當作JConsole插件

使用下面的命令啟動jconsole

%JAVA_HOME%\bin\jconsole -pluginpath \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar

執行完上述命令后你將可以看到下面包含log4j2標簽頁的界面

JMX學習以及在log4j中的應用

遠程編輯log4j配置信息

這個GUI工具也包含了簡單的編輯器用于編輯log4j配置信息。如下圖所示

JMX學習以及在log4j中的應用


當作獨立的應用運行

執行下面的命令

%JAVA_HOME%\bin\java -cp \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar org.apache.logging.log4j.jmx.gui.ClientGui <options>

上面的options可以為下面三項中的一項

  • <host>:<port>

  • service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi

  • service:jmx:rmi://<host>:<port>/jndi/rmi://<host>:<port>/jmxrmi

此處不得不注意端口號必須與啟動應用時所指定的JMX端口號一致

例如在啟動應用的時候指定JVM參數信息如下:

com.sun.management.jmxremote.port=33445
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false

緊接著執行下面的命令:

%JAVA_HOME%\bin\java -cp \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar org.apache.logging.log4j.jmx.gui.ClientGui localhost:33445

下面則是相關的兩個示例圖片:

JMX學習以及在log4j中的應用

JMX學習以及在log4j中的應用


本文只是進行了簡單介紹,使用過程中遇到的問題將在后續進行說明。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!