2017-05-12 4 views
2

Ich muss das Profil für diese Syslog-Einträge extrahieren.PCRE zu POSIX Unterstützung

May 11 09:35:59 server-0548 ea_appserver: env=ACPT profile=product_api java[31185]: 2017-05-11 09:35:59,210 server-0548 org.hibernate.internal.SessionFactoryImpl ServerService Thread Pool -- 51 HHH000008: JTASessionContext being used with JDBCTransactionFactory; auto-flush will not operate correctly with getCurrentSession()

Die folgenden regex Werke für PCRE, aber ich kann nicht scheinen, um es zu POSIX konvertieren über.

(?m)profile=(\S+) 

I

[^=]*$ 

und

.*profile=(.*) 

versucht haben, kann aber nicht bekommen entweder bei nur product_api

+0

Versuchen Sie 'Profil = ([^ [: Leerzeichen:]] +)' wenn Sie wirklich eine POSIX ERE Regex brauchen. Bitte zeigen oder sagen Sie uns, wie und wo Sie diese Regex verwenden. –

+0

Wir verwenden dies auf einer Farm von Heavyforwarders für Splunk. Die Regex dient dazu, die Daten vor dem Einlesen in Splunk zu sortieren. Dies wird dazu beitragen, dass die Daten für einen schnelleren Zugriff sortiert sind und wir unterschiedliche Aufbewahrungszeiträume festlegen können. So wurden rsyslog verwendet. Das folgende Stück stammt aus der Datei 20-nmon-performance.conf. – Naveen

+0

$! Usr! Fullprofile = re_extract ($ msg, 'profile = ([^ [: space:]] +)', 0,0, 'kein Profil'); $! Usr! Profile = re_extract setzen ($! Usr! Fullprofile, '[^ =] * $', 0,0, 'no-profile'); ################################ # Logik zum Teilen aller App-Daten nach Umgebungstyp ##### ########################### $ Vorlage prodLogs, "/ vcaclog/PROD /% $! Usr! Profil% /% HOSTNAME% /%programname%.log“ $ template wenn $ msg enthält 'env = NR' dann { wenn $ programstarts 'ea_appserver' dann? prodLogs & stoppen \t wenn $ programstarts 'ea_loadbalancer' dann? prodLogs – Naveen

Antwort

1

POSIX ERE Inline regex Modifikatoren unterstützt nicht zu stoppen, und Kurzzeichen-Klassen werden nicht immer unterstützt. Beachten Sie, dass sogar in Ihrem (?m)profile=(\S+) PCRE-Regex der (?m) MULTILINE-Modifikator redudant ist, da es weder ^ noch $ gibt, um das Verhalten von. Was können Sie verwenden, ist eine POSIX-Zeichenklasse [:space:] (alle Leerzeichen entsprechen) in einem negierten Ausdruck in eckigen Klammern:

profile=([^[:space:]]+) 

Einzelheiten:

  • profile= - eine wörtliche Teilzeichenfolge
  • ([^[:space:]]+) - Gruppe 1 : ein oder mehrere Zeichen, die nicht mit der POSIX-Zeichenklasse [:space:] übereinstimmen.