Log4J Plugin für JConsole/VisualVM

vorhergehende Artikel in: Java Komponenten Git(lab|hub)
25.03.2018

Während meines Jahreswechselurlaubes versuche ich immer ein wenig Bildungsurlaub zwischenzuschieben. Dazu zählt der chaos communication congress ebenso wie manche Fingerübung. Aus einer dieser Fingerübung entstand ein kleines Projekt, das bis zu einem GitHub-Repository gewachsen ist...

Nachdem ich einen Log4J-Appender gebaut hatte, der die einzelnen Log-Messages in einer Swing-GUI anzeigen kann wollte ich diese Idee ein wenig ausbauen - zunächst schwebte mir eine Stand-Alone-JMX-Anwendung vor, die die Log-Events per JMX gemeldet bekommt und in der man dann eine GUI hat, mit der man Filter konfigurieren und einzelne Logger und Log-Level ein- und ausschalten kann.

Dafür wäre es allerdings nötig gewesen, dass ich eine JMX-Verbindung lokal zu einer laufenden Java-Anwendung aufbauen kann. Meine verzweifelte Suche nach Informationen, wie die Connect-URL in diesem Fall aussehen muss bescherte mir Einblicke in die internen Funktionen einer Oracle-VM: wer schon einmal die JConsole gestartet hat, hat wahrscheinlich gesehen, dass man sich damit zu jeder aktuell laufenden Java-Anwendung verbinden kann.

Das bedeutet nicht, dass die Anwendungen per default immer einen Port für das JMX-Protokoll öffnen. Vielmehr ist es so, dass jede VM eine Schnittstelle hat, über die man sie verwalten und steuern kann (die Attach-Schnittstelle). Verbindet sich die JConsole nun mit einer Anwendung, bringt sie eine Instrumentierung über diese Schnittstelle ein, die den VM-seitigen Port für das JMX-Protokoll darstellt. Erst danach wird die lokale Verbindung zu diesem Port aufgebaut.

Wollte man dies in eigenen Applikationen nachstellen, nüsste man Klassen aus proprietären Paketen nutzen und das Ganze wäre so komplex und fragil, dass es mit einem Bugfix-Release für die JRE wahrscheinlich schon wieder zunichte gemacht werden würde.

An dieser Stelle mit meinen Versuchen angekommen fluchte ich bereits wieder auf die JConsole denn meiner Meinung nach hat Sun/Oracle hier beim Verbindungsmanagement versagt. Ich erinnerte mich an VisualVM und machte damit weiter.

Einer der Appender hatte ja bereits die Möglichkeit geboten, Log4J Log-Events als JMX-Notifications zu versenden. Die JConsole bietet allerdings keinerlei Filtermöglichkeiten für JMX-Notifications ann - entweder man wird mit allen zugeschüttet oder man erhält gar keine. Meine Idee also: vielleicht kann die VisualVM besser mit JMX und speziell mit Notifications umgehen?

Ich wurde zunächst desillusioniert: In VisualVM existiert nichts zu JMX - keine Unterstützung für Notifications und nicht einmal für MBeans. Das konnte ich nicht glauben und suchte im Internet - siehe da: Die Unterstützung existiert - allerdings in Form eines Plugins, das man erst nachinstallieren muss.

Das tat ich und nun hatte ich exakt dieselbe Funktionalität, die in der JConsole zur Verfügung steht. Dass brachte mich aber auf eine Idee: wenn es eine Plugin-Architektur gibt, muss es doch eine API und Dokumentation dafür geben - damit wäre ich in der Lage, ein eigenes Plugin zu schreiben: Dann würde die Instrumentierung und der Aufbau der JMX-Kommunikation von VisualVM erledigt und ich könnte mich auf das Filtern,... der Notifications konzentrieren.

Die Dokumentation war schnell gefunden - als ich allerdings bereits zu Anfang las: Öffne Netbeans und lege ein neues Projekt vom Typ Netbeans-Modul an... Ich habe viele Jahre lang gern und mit Erfolg Netbeans als IDE benutzt. Aber immer wenn Vendor Lock-In auch nur entfernt erahnbar ist kriege ich Fieberbläschen!!

Das Projekt war damit schon fast gestorben, als ich aus den Augenwinkeln ein VisualVM-Plugin erspähte, das es gestattete JConsole-Plugins in VisualVM zu nutzen. Das sah ich mir näher an und siehe da: Nicht nur war die Schnittstelle wesentlich simpler als die für die direkte Integration in VisualVM, es gab auch Beispiele dafür und ich konnte damit Plugins schreiben, die in beiden Anwendungen nutzbar waren und war nicht auf eine bestimmte IDE festgelegt. Dazu kommt noch, dass es sehr einfach ist, neue Plugins als Maven-Projekte zu realisieren. Man kann eigene Projekte auf diversenBeispielen GitHub einsehbar.

Artikel, die hierher verlinken

Fork der Material Design Icons von Google

07.12.2019

Nun habe ich nach QBrowser und dem Log4J Plugin für JConsole/VisualVM mit I18NEditor bereits die dritte Java-Desktop-Anwendung veröffentlicht. Zur Zeit benutze ich dafür die Material Design Icons von Google, allerdings reichen mir die dort angegebenen für meine Zwecke nicht mehr aus.

Icons - woher nehmen? - III

06.05.2018

Es ist schon einige Zeit seit meinem letzten Artikel zu diesem Thema vergangen. Da ich in letzter Zeit das eine oder andere Projekt auf Github veröffentlicht habe, benötigte ich dafür Icons mit entsprechend passenden Lizenzen.

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Mandelbrot-Sets mittels Shadern berechnen

    17.05.2019

    Nachdem ich in den letzten verregneten Tagen auf Youtube in den Videos von Numberphile versunken bin, hat mich eines davon angestachelt, mich selbst mit dem Mandelbrotset zu beschäftigen. Als ich dann noch Code fand, der behauptete, das auf einer Graphikkarte mittels Shadern berechnen zu können, war es um mich geschehen...

    Weiterlesen...

Neueste Artikel

  • Erste Vor-Version eines Gis-Plugin für die sQLshell

    Wie bereits in einem früheren Artikel erwähnt plane ich, demnächst ein Plugin für die sQLshell anzubieten, das eine Visualisierung von Daten mit räumlichem Bezug im Stil eines Geoinformationssystems erlaubt.

    Weiterlesen...
  • bad-certificates Version 2.1.0

    Das bereits vorgestellte Projekt zur automatisierten Erzeugung von Zertifikaten mit allen möglichen Fehlern hat eine Erweiterung erfahren und verfügt über ein Partnerprojekt - beide sind nunmehr in der Version 2.1.0 freigegeben

    Weiterlesen...
  • SQLite als Geodatenbank

    Wie bereits in einem früheren Artikel beschrieben treibe ich derzeit Anstrengungen voran, die sQLshell attraktiver für Nutzer zu machen, die mit Geodatenbanken arbeiten.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.