C'est toujours bien l'égo boost, surtout quand ça laisse des traces sur
l'interweb.

Alex

Le 7 février 2017 à 12:53, Yannick Cadin <yann...@diablotin.fr> a écrit :

> Bon comme je constate que mon problème n'émeut personne, j'apporte
> moi-même la réponse :
>
> Il y avait 2 soucis combinés (sans rapport direct l'un avec l'autre).
>
> En premier, c'est posix par défaut jusqu'à la version 3.5 incluse de
> syslog-ng, pcre par défaut à partir de la version 3.6.
>
> Ensuite et surtout, le motif (en premier paramètre de subst) doit
> impérativement être délimité par des apostrophes sans quoi les \ ne
> serviront qu'à banaliser le caractère qui les suit immédiatement et ne
> seront pas interprétés comme faisant partie de symboles PCRE.
>
> OU ALORS, si l'on veut délimiter le motif avec des guillemets il faut
> alors doubler chaque \.
>
> Exemple concret de ce que je voulais réaliser (et qui désormais
> fonctionne) :
>
> rewrite remove_timestamp_in_docker_events {
>     subst('(docker/\w+\[\d+]:) \d{4}-\d\d-\d\d \d\d:\d\d:\d\d,\d+', "$1",
> value("MESSAGE") type("pcre"));
> };
>
>
> S'il était avéré qu'une expression rationnelle POSIX soit plus rapide à
> traiter alors on peut opter pour l'une des variantes ci-dessous :
>
> subst('(docker/[^[]+\[[0-9]+]:) [0-9]{4}-[0-9]{2}-[0-9]{2}
> [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]+', "$1", value("MESSAGE") type("posix"));
>
> subst('(docker/[[:alnum:]]+\[[0-9]+]:) [0-9]{4}-[0-9]{2}-[0-9]{2}
> [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]+', "$1", value("MESSAGE") type("posix"));
>
>
> Merci à moi (on n'est jamais aussi bien servi que par soi-même, surtout en
> guise d'auto-congratulations ;)
>
> Yannick
>
>
>
> Le 2017-02-06 22:12, Yannick Cadin a écrit :
>
>> Bonsoir,
>>
>> On reste dans le traitement des logs.
>>
>> J'appelle une commande subst dans un fichier syslog-ng.conf  (sur
>> Ubuntu 16.10 à jour)
>>
>> Si le motif recherché est un littéral, ça marche très bien.
>> Si le motif recherché est une expression rationnelle au format POSIX,
>> ça marche très bien.
>> Si le motif recherché contient ne serait-ce qu'un symbole PCRE
>> (exemple \d ou \w) alors il N'y a PLUS AUCUNE correspondance trouvée.
>>
>> Y compris si j'ajoute explicitement type("pcre"). Bien que ce soit
>> théoriquement superflu puisque c'est le "moteur" d'expressions
>> rationnelles que syslog-ng prétend employer par défaut.
>>
>> J'ai, par acquis de conscience, lancer une commande ldd sur le binaire
>> syslog-ng qui m'a bien confirmé que le programme était lié avec la
>> librairie partagée libpcre.
>>
>> Quasi impossible de trouver le moindre exemple d'emploi d'expressions
>> PCRE dans une config syslog-ng (soit je cherche mal, soit personne
>> n'emploie les expressions PCRE dans syslog-ng).
>>
>> Auriez-vous une piste à me suggérer ? (Vous pouvez vous épargner la
>> solution consistant à se contenter des expressions POSIX, c'est ce que
>> j'adopterai en dernier recours.)
>>
>> D'avance merci pour votre aide,
>>
>> Yannick
>>
>> _______________________________________________
>> Liste de diffusion du FRsAG
>> http://www.frsag.org/
>>
> _______________________________________________
> Liste de diffusion du FRsAG
> http://www.frsag.org/
>



-- 
Alexandre
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/

Répondre à