Mittels Skript Servername aus Logfile lesen
Hallo Zusammen
Ich habe folgendes Problem:
Ich muss mittels Skript den Servername sowie die Webapp aus dem jeweiligen Logfile lesen und dieses mit den erhaltenen Informationen umbenennen.
Beispiel:
Ausserdem müssten im Log alle User verändert werden:
Beispiel:
Dafür habe ich bereits ein RegEx erstellt:
Conditions: global\\([a-zA-Z0-9]{3})[a-zA-Z0-9]*
Output: $1:1
Wie kann ich diesen RegEx implementieren?
Leider habe ich keine Ahnung von Skripten und weiss auch nicht welche Skriptingsprache sich dafür eignet. :'(
Könnt ihr mir helfen?
Ich verwende das Logformat W3C (IIS).
Ich habe folgendes Problem:
Ich muss mittels Skript den Servername sowie die Webapp aus dem jeweiligen Logfile lesen und dieses mit den erhaltenen Informationen umbenennen.
Beispiel:
Vorher | Nachher |
---|---|
u_ex150605.log | u_ex150605-Srvname-Webapp.log |
Ausserdem müssten im Log alle User verändert werden:
Beispiel:
Vorher | Nachher |
---|---|
global\xyzabc | XYZ |
Dafür habe ich bereits ein RegEx erstellt:
Conditions: global\\([a-zA-Z0-9]{3})[a-zA-Z0-9]*
Output: $1:1
Wie kann ich diesen RegEx implementieren?
Leider habe ich keine Ahnung von Skripten und weiss auch nicht welche Skriptingsprache sich dafür eignet. :'(
Könnt ihr mir helfen?
Ich verwende das Logformat W3C (IIS).
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 274005
Url: https://administrator.de/forum/mittels-skript-servername-aus-logfile-lesen-274005.html
Ausgedruckt am: 19.04.2025 um 11:04 Uhr
15 Kommentare
Neuester Kommentar

mit Powershell ein Einzeiler z.B.
Gruß jodel32
(gc 'c:\u_ex150605.log') -replace 'global\\([a-zA-Z0-9]{3})[a-zA-Z0-9]*','$1' | out-file 'c:\u_ex150605-Srvname-Webapp.log'

Die Infos Srvname und Webapps müssen aber erst aus dem Logfile gelesen werden um den Namen zu generieren.
Uups hatte ich vollkommen übersehen, sorry. Muss ich mir nachher erst mal ein Logfile dafür ansehen, wo die Infos stehen ... Oder du postest mal eine Ausschnitt deines Logs mit den gewünschten Infos. das lässt sich ja dann ebenfalls mit REGEX auslesen.
Hallo paraneus,
machts du so. Du kannst damit gleich einen ganzen Ordner mit LOG-Dateien verarbeiten. Den Ausgabe-Pfad für die neuen Log-Dateien gibst du in der zweiten Zeile an und in der ersten den Pfad zu den Original-Logdateien.
Die URL (Domainteil) der Webseite im Regex der Zeile 6 natürlich noch anpassen.
Grüße Uwe
machts du so. Du kannst damit gleich einen ganzen Ordner mit LOG-Dateien verarbeiten. Den Ausgabe-Pfad für die neuen Log-Dateien gibst du in der zweiten Zeile an und in der ersten den Pfad zu den Original-Logdateien.
Die URL (Domainteil) der Webseite im Regex der Zeile 6 natürlich noch anpassen.
$pathLogIN = 'C:\logfiles'
$outpath = 'C:\temp\out'
gci $pathLogIN -Filter '*.log' | %{
$content = gc $_.FullName | out-string
$server = [regex]::match($content,'(?im)^\d{4}-\d{2}-\d{2} [^\s]+ [^\s]+ ([^\s]+)').Groups[1].Value
$app = [regex]::match($content,'(?i)http://mein\.intranet\.de/(.*?).aspx').Groups[1].Value
$content -replace 'global\\([a-zA-Z0-9]{3})[a-zA-Z0-9]*','$1' | out-file "$outpath\$($_.BaseName)-$server-$app$($_.Extension)"
}
Zitat von @Paraneus:
Nun habe ich das Problem, dass ich nur Logfiles kopieren soll, welche im Outpath noch nicht vorhanden sind. Also eine Art If not exist copy.
Kein Problem, mit einer zusätzlichen IF-Abfrage die überprüft ob das File noch nicht existiert (Zeilen 7-10):Nun habe ich das Problem, dass ich nur Logfiles kopieren soll, welche im Outpath noch nicht vorhanden sind. Also eine Art If not exist copy.
$pathLogIN = 'C:\logfiles'
$outpath = 'C:\temp\out'
gci $pathLogIN -Filter '*.log' | %{
$content = gc $_.FullName | out-string
$server = [regex]::match($content,'(?im)^\d{4}-\d{2}-\d{2} [^\s]+ [^\s]+ ([^\s]+)').Groups[1].Value
$app = [regex]::match($content,'(?i)http://mein\.intranet\.de/(.*?).aspx').Groups[1].Value
$outfile = "$outpath\$($_.BaseName)-$server-$app$($_.Extension)"
if (!(Test-Path $outfile)){
$content -replace 'global\\([a-zA-Z0-9]{3})[a-zA-Z0-9]*','$1' | out-file $outfile
}
}
gci $pathLogIN -Filter '*.log' | %{
$content = gc $_.FullName | out-string
$server = [regex]::match($content,'(?im)^\d{4}-\d{2}-\d{2} [^\s]+ [^\s]+ ([^\s]+)').Groups[1].Value
$app = [regex]::match($content,'(kollaboration|MeineStartseite|spstd)').Groups[1].Value
$app = $app.Substring(0,1).ToUpper() + $app.Substring(1)
$outfile = "$outpath\$($_.BaseName)-$server-$app$($_.Extension)"
if (!(Test-Path $outfile)){
$content -replace 'global\\([a-zA-Z0-9]{3})[a-zA-Z0-9]*','$1' | out-file $outfile
}
}