Logfilter mit cfg-Datei

Alles zum Thema Log-Analyse und Sawmill Analytics.
Antworten
katrin
Beiträge: 9
Registriert: 9. Jan 2009 10:26

Logfilter mit cfg-Datei

Beitrag von katrin » 7. Dez 2009 13:12

Hallo,

ich versuche gerade einen Logfilter zu schreiben, der Logeinträge ausfiltert, die im Spider-Feld bestimmte Einträg enthalten. Da sich diese Einträge im Laufe der Zeit ändern und da ich diesen Filter in über 60 Profilen verwende, würde ich dies gerne über einer Konfigurations-Datei (spiderfilter.cfg) lösen.

In der Datei spiderfilter.cfg sollten dann Einträge vorhanden sein, wie z.b. baidu, soguo,... Die Datei sieht folgendermaßen aus:

Code: Alles auswählen

spiderfilter = {
 baidu = "baidu"
 sogou = "soguo"
 Nokia  = "Nokia"
 Mozilla = "Mozilla" 
  } # spiderfilter
Wenn im Feld user_agent dieser String enthalten ist, soll der Eintrag nicht gewertet werden.

Ich habe es folgendermaßen (erweiterte Ausdruckssyntax) versucht, leider scheint die Syntax aber nicht zu stimmen:

Code: Alles auswählen

if (contains(cs_user_agent, node_value("goethe_spiderfilter"))) then ('reject');
BTW: ich kenne die spiders.cfg, nur leider muss ich für unsere Zwecke einen Extra-Filter verwenden. Die Syntax sollte man dann ja ganz einfach auch auf andere Logfelder und Strings anwenden können?!

Vielen Dank für die Hilfe und schöne Grüße,
Katrin

mkonrath
Beiträge: 6
Registriert: 24. Apr 2009 18:25

Re: Logfilter mit cfg-Datei

Beitrag von mkonrath » 8. Dez 2009 17:24

Hallo Katrin,

auf diese Weise funktioniert es leider nicht.

Die Funktion contain
contains(string S, string T)
The value of this expression is true if the string S contains the value of the string T.
lässt als Parameter nur zwei Zeichenketten zu.

Mit der Funktion node_value
node_value(node N)
Returns the value of node N.
erhält man den Wert des ganzen Knoten zurück. In dem Fall ist das aber der komplette Block zwischen den beiden geschweiften Klammern.
Somit müsste man vorher die entsprechende Subnode (baidu, sogue, etc.) selektieren. Dies ist aber gar nicht so einfach, da man auf Subnodes nur direkt mit den Namen oder der Nummer zugreifen kann. Leider kann man nicht nach dem (Sub-)Nodenamen suchen. Wenn man das ganze unbedingt so lösen möchte, wird man vermutlich etwas tricksen müssen.

Mit Hilfe einer Schleife müsste man dann alle Subnodes der Reihe nach durchtesten, ob deren Name im entsprechenden Feld vorkommt.

Der Ansatz dazu wäre also der folgende (mit Hilfe einer foreach-Schleife):

Code: Alles auswählen

foreach spider_to_block "spiderfilter"
  if (contains(cs_user_agent, node_value(spider_to_block))) then ('reject');
In jedem Schleifendurchgang wird der Variable spider_to_block eine neue Subnode aus "spiderfilter" zugewiesen und damit jedesmal der nachfolgende Ausdruck "If ..." ausgeführt.

So oder so ähnlich zumindest müsste es funktionieren (ungetestet von uns).

Viele Grüße und viel Erfolg
Mathias Konrath
HAAGE & PARTNER Computer GmbH

katrin
Beiträge: 9
Registriert: 9. Jan 2009 10:26

Re: Logfilter mit cfg-Datei

Beitrag von katrin » 16. Dez 2009 13:14

Lieber Mathias,

vielen Dank schonmal für den Tipp. Ich werde das testen und mich dann nochmal melden.

Viele Grüße,
Katrin

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste