Remote Logs, Tail Logs in Windows, Log Viewer

Ich habe mich mal wieder auf den Weg gemacht um ein allgegenwärtiges Problem zu lösen. Unschöne Logs in eine Form quetschen um Sie schnell analysieren zu können. Einen schnellen überblick zu haben wo Fehler auftreten oder einfach nur ein paar Debugmessages im Blick zu haben. Dabei bin ich auf ein nützliches Open Source Projekt gestoßen. OtrosLogViewer, hört sich ziemlich chinesisch an ist aber sehr gut zu bedienen wenn es das erste mal läuft.

Super viele Einstellungsmöglichkeiten um wichtige Marken zu setzen oder einfach nur die log am Stücke zu sehen und per „tail“ immer wieder aktualisiert zu bekommen.

Der LogViewer der nicht nur ein tail Ersatz für Windows für mich ist sondern auch eine visuelle Aufbereitung der Ergebnisse mir bringt macht es um einiges leichter Auffälligkeiten zu checken.

Projektseite

http://code.google.com/p/otroslogviewer/

Installation

Ihr müsst euch lediglich die ZIP file aus dem Google Code ziehen. http://code.google.com/p/otroslogviewer/downloads/list

Achtung: Um das ganze System sauber benützen zu können solltet ihr Java JRE6 verwenden. Mit JRE7 werdet ihr massive Probleme bekommen. Habe ich auf alle Fälle festgestellt.

HowTo

Der LogViewer bietet euch die Möglichkeiten eigene Pattern anzulegen. Diese dienen dazu Logfiles verschiedenster Server zu parsen und in eine korrekte Form zu biegen. Ich habe euch hier 2 Pattern für glassfish und tomcat 7 zum download hinterlegt. Die ZIP Datei entpacken und beide Pattern Files einfach in den Ordner: plugins/logimporter kopieren.

Video

Liferay 6.1 – Minifier Error

Ein nerviger Fehler im Liferay ist der Minifier für JavaScript oder CSS Code. Der Fehler ist zwar ziemich banal aber es nervt wenn er immer und immer wieder auftritt nur weil einige Zeilen Code falsch auskommentiert wurden. Richtig, der Fehler tritt auf dern Kommentare falsch gesetzt werden.

Single Line Kommentarblöcke mit doppel Slash werden von Liferay nicht unterstützt und schießen den Minifier leider ab. Somit immer den Blockkommentar verwenden und saubere Kommentarfelder integrieren. Damit sollte dann ein reibungsloser Betrieb wieder möglich sein.

Liferay 6.1 – Segmentation fault

Probleme mit Tomcat 7 und Liferay? … Kurz nach dem Start läuft der Server nicht mehr. Die Konsole meldet lediglich Segmentation fault. Kein schöner Fehler und unser Lösungsversuch ist lediglich: JDK Update. Nachdem wir die Java 1.6.24 auf 1.6.34 geupdated haben ist der Fehler verschwunden und der Server läuft wieder stabil.

PrimeFaces GZip Error

Ein häufig auftretender und nicht erklärbarer Fehler in Primefaces ist der GZIP Error. Es gibt unterschiedliche Möglichkeiten bei Aktionen die definiert werden und eventuell falsch ausgeführt werden.

Wir suchen seit nunmehr – sporatisch – 1 Monat nach den Fehler und immer ist es lediglich ein kleines Quäntchen Glück das uns gefehlt hat. Es dreht sich um den wunderbaren Parameter ajax den man in den meisten Komponenten von Primefaces angeben kann und dieser dann entscheidet ob ein ajax Befehl ausgeführt wird oder nicht.

Jetzt kommt das große Ding und zugleich die Erklärung. Wenn man über outcomes gesteuerte Navigation- Elements anlegt in seiner faces-config.xml werden anhand eines String die Elmente gerootet. z.B.

<p:commandButton value="Step1" action="to-step-1" />

In der faces-config.xml werde ihr so etwas ähnliches vorfinden:

<navigation-rule>
		<display-name>Step 0</display-name>
		<from-view-id>/step0.xhtml</from-view-id>
		<navigation-case>
		 	<from-outcome>to-step-1</from-outcome>
			<to-view-id>/step1.xhtml</to-view-id>
		</navigation-case>
</navigation-rule>

Wenn ihr dieses Beispiel jetzt ausführen würdet, lauft ihr in eine Falle die nicht schön ist und aus der mann nur ganz schwer wieder heraus kommt weil es keine konkreten Hinweise dazu gibt. Wenn man in die Browserconsole oder die Entwicklertools von z.B. google Chrome schaut werdet ihr sehen das nach dem laden von step1.xhtml euer jQuery abstürzt und somit die Seite jegliche Funktionalität verliert die euch Primefaces bietet.

Einfacher Lösungsansatz:

<p:commandButton value="Step1" action="to-step-1" ajax="false" />

Der kleine Parameter ajax=“false“ verwandelt den Javascript Aufruf für den Button in einen Standardaufruf um und „refreshed“ die Seite somit korrekt und alle Funktionen werden korrekt ausgeführt!