Posts Tagged “bash”

Grep für Application-Logs

Bei der Fehlersuche bieten einem die Application-Logs oftmals einen guten Einstiegspunkt. Doch die Suche darin kann zum Teil recht mühsam sein. Vor allem wenn man nicht nach der Fehlermeldung selbst suchen will, sondern zum Beispiel alle Fehler haben will, die einen bestimmten Methodenaufruf im Stacktrace haben. Und dann wollte ich auch nicht nur die Zeile haben, sondern den ganzen Log-Eintrag, inklusive Message und komplettem Stacktrace.

Ich habe mir dafür ein kleines PHP-Skript geschrieben. Vielleicht findet es ja sonst jemand nützlich:

<?php
// loggrep.php 2011-12-08
if (2 !== $argc && 3 !== $argc) {
    echo "USAGE: {$argv[0]} <pcre-pattern> <file>\n";
    exit(1);
}
 
$filename = 'php://stdin';
if (isset($argv[2])) {
    $filename = $argv[2];
}
$fp = fopen($filename, 'r');
 
// "2011-11-22T02:16:34+01:00 - "
$startPattern = '#^\d{4}(-\d{2}){2}T\d{2}(:\d{2}){2}\+\d{2}:\d{2} - #';
$searchPattern = $argv[1];
 
$found = false;
 
while ($line = fgets($fp)) {
    if (preg_match($startPattern, $line)) {
        if (true === $found) {
            foreach ($buffer as $bufferedLine) {
                echo $bufferedLine;
            }
        }
 
        $buffer = array();
        $found = false;
    }
 
    if (preg_match($searchPattern, $line)) {
        $found = true;
    }
 
    $buffer[] = $line;
}

Der Aufruf sieht dann so aus:

$ php loggrep "#Mage_Core_Block_Template#" exception.log

Wichtig ist, dass der Suchbegriff mit PCRE-Syntax (inklusive Delimiter) angegeben wird.

Update 08.11.2011

Jetzt neu: Falls keine Datei angegeben wird, kann das Skript auch von STDIN lesen. Damit kann man auch einfach in gepackten Dateien suchen:

$ zcat exception.log.1.gz | php loggrep "#Mage_Core_Block_Template#"

Read More

Ordnerweise Flac zu Ogg konvertieren

Da ich meine CD-Sammlung inzwischen als flac-Dateien auf der Platte habe, ich aber auf dem Handy (das ich als Musikspieler verwende) nicht soviel Platz habe bietet es sich an die Dateien vorher in ein platzsparenderes Format zu konvertieren, zum Beispiel ogg Vorbis. oggenc legt seine Dateien aber immer in den gleichen Ordner ab, oder konvertiert nur eine Datei, was mühsam ist. Also müsste ich manuell Transkoding anstoßen, einen neuen Ordner erstellen, ogg-Dateien rüberkopieren, und so weiter. Da mir das zu doof war habe ich mir einen Bash-Skript geschrieben, der das für mich macht :-)

Es können auch mehrere Quellordner angegeben werden: flac2ogg.sh -t /mnt/portable /pub/music/The_Juliana_Theory-Deadbeat_Sweetheartbeat /pub/music/Panic!_At_The_Disco-A_Fever_You_Cant_Sweat_Out.

Download: flac2ogg.sh.gz

Read More