nxlog – multiline – char conversion

Nous avons une application qui génère un log par client dans un répertoire défini… Bien sur, l’application peut écrire des logs multi-lignes (java)
et pour finir… Le fichier est en utf-16… Bien sur, l’application tarde à retirer les verrous sur ces fichiers. Lors de la mise en place de ce système, il y avait en moyenne 3500 fichiers de logs par serveurs…

Nous avons choisi de lire le fichier toutes les minutes, et de ne pas relire depuis la fin en cas de problème de lecture. Il est impossible de faire une conversion utf16 => utf8 dans le block im_file (crash du service), tant mieux, la conversion étant à faire au plus tot, donc dans la déclaration multiline. Et enfin, nous purgeons quotidiennement les logs.

<Extension fileop>
Module xm_fileop

<Schedule>
When @daily
Exec file_remove("PathToLogs\\*");
</Schedule>
</Extension>

<Extension charconv>
    Module      xm_charconv
    AutodetectCharsets ucs-2le, ascii, utf-7, utf-8, utf-16, utf-32, iso8859-2, windows-1252, ucs2
</Extension>

<Extension Logs>
    Module	xm_multiline
    HeaderLine /^Start/
    Exec $raw_event = convert($raw_event,"utf-16","utf-8");
</Extension>

<Input MyApp>
	Module im_file
	File "PathToLogs\\*"
	SavePos TRUE
	ReadFromLast FALSE
	CloseWhenIdle TRUE
	PollInterval 60
	InputType Logs
	Exec if $raw_event !~ /^L/  drop(); \
		$ClientNAme = replace(file_basename(file_name()),'.LOG','');

</Input>

<Output out>
    Module      om_udp
    Host        graylog
    Port        12201
    OutputType	GELF
</Output>

<Route 1>
    Path        myApp => out
</Route>