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

Android: setOnClickListener

Aufbauend auf dem ersten Tutorial (Wie fange ich an?) werde ich euch jetzt zeigen wie man seine MainActivity Class richtig befüllt und die erste Aktion über den Button ausführt.

Vorher machen wir noch einen kleinen Ausflug in den Lifecycle einer Android Activity. In der MainActivity werdet ihr ein onCreate(); finden. Diese „Mastermethode“ wird dazu verwendet Buttons und andere Elemente zu initialisieren und evtl. auch mit Leben zu befüllen. Es gibt noch andere Statusse in denen sich die Activity befinden kann. z.B. onView(); Es wird nicht empfohlen in der onView intensive Aufgaben zu initialisieren da sich sonst die ganze Activity in einem stehenden Zustand verwendet. Erst wenn der komplette Prozess abgerufen wäre würde sich die Oberfläche wieder bedienen lassen. Hier noch eine kleine Übersicht des Android Activity Lifecycles.

 

Zurück zu unseren Aktionen die wir auf unseren Button setzen wollen. Per klick soll die nächste Aktivität gestartet werden. Somit wird ein neuer Intent aufgerufen.

Um eine neue Activity aufzurufen müssen wir erstmal eine neue Activity erstellen. Dazu machen wir einen Rechtsklick auf unser Package in dem die MainActivity liegt und erstellen eine neue Klasse, hierbei geben wir als SuperClass Activity an.

Nachdem wir die Events.class erstellt haben benötigen wir noch eine neue LayoutFile für die Events Klasse. Also werden wir das machen. Rechtsklick auf den Ordner layout unter res und schon könnt ihr bei Other auf Android Layout xml File.

Das neue XML File habe ich activity_events.xml getauft. Jetzt könnt ihr gerne meinen Code kopieren. Hierbei wird lediglich eine TextView und eine ListView verwendet.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    

    <TextView
        android:id="@+id/textViewURL"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
    
    <ListView 
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</LinearLayout>

So, anschließend bearbeiten wir jetzt noch unsere Events.class folgendermaßen:

private static String _URL = "url";

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_events);

	Intent intent = super.getIntent();
	Bundle extras = intent.getExtras();
	String url = (String) extras.get(_URL);

	TextView textViewURL = (TextView) findViewById(R.id.textViewURL);
	textViewURL.setText(url);
}

Hier wird lediglich die neue Activity dargestellt und der übergeben Parameter im TextView wieder ausgegeben.
Um auch die MainActivity dementsprechend anzupassen und eine Aktion auszuführen gibt es jetzt den CodeSnippet für die MainActivity.class

public class MainActivity extends Activity {

	private static String _URL = "url";
	private String url = "http://www.infranken.de/storage/rss/rss/2.0/lokales.xml";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnShowNext = (Button) findViewById(R.id.btnGo);
        btnShowNext.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent itn = new Intent(v.getContext(), Events.class);
				itn.putExtra(_URL, url);
				v.getContext().startActivity(itn);
			}
		});

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

Bevor ihr die App nun starten könnt für einen ersten Testlauf müsstest ihr noch die Manifest File anpassen. Dank dem Sicherheitskonzept von Android, können Activities nicht willkürlich aufgerufen werden.