Kann ich den Log-Header für Ruby Logger deaktivieren?

8

Ich stoße gerade auf ein Problem.

Wie Sie vielleicht wissen, fügt der Ruby-Logger am Anfang jeder neu erstellten Logdatei einen Logging-Header hinzu.

%Vor%

Ich protokolliere CSV-Dateien, um sie später in ein Warehouse zu importieren. Normalerweise überspringe ich die erste Zeile mit der Kopfzeile. Es scheint, als ob ein Fehler im Logger vorhanden ist, da manchmal der Logging-Header mehr als einmal mitten in einer Log-Datei erscheint.

Also habe ich beschlossen, diesen Header einfach wegzulassen. Zu meiner Überraschung fand ich bei der Erstellung eines Loggers keinerlei Argumentation. Ich dachte an so etwas:

%Vor%

Aber es ist einfach nicht da. Ich habe in den Ruby-Core-Quellen gesucht und überraschenderweise gibt es wirklich nichts, was den Logger daran hindern könnte, den Log-Header hinzuzufügen:

%Vor%

Hat jemand eine Idee, was ich tun könnte, um den Log-Header zu verhindern? Ich benutze Ruby 1.8.7 302 mit Rails 2.3.5 hier. Das Ignorieren der Kommentare auf der Warehouse-Seite ist nicht möglich, da ich dort keine Kontrolle über den Code habe, und es scheint zu riskant zu sein, es einfach zu ignorieren, wenn etwas mit einer Protokollierungslinie schief geht.

Kennt jemand einen Logger, der dies erlaubt? Denkst du, es wäre eine gute Idee, einfach zu einer Datei zu schreiben und zu schreiben?

Vielen Dank im Voraus, Tommy

    
Thomas Fankhauser 04.11.2010, 11:51
quelle

3 Antworten

7

Idealerweise sollte die Methode add_log_header in der Logger-Instanz überschrieben werden, aber da add_log_header beim Initialisieren aufgerufen wird, sind Sie zu spät, wenn Sie sie in die Hände bekommen. Nun, Sie könnten einfach die Methode add_log_header für die Klasse überschreiben.

%Vor%

Aber wenn Ihre App danach mehr Instanzen von Logger benötigt, verhalten sie sich genauso: kein Header. Um dies zu verhindern:

%Vor%     
steenslag 04.11.2010, 21:42
quelle
2

Hier ist eine Lösung, die das Subclassing von Logger beinhaltet. Wir müssen mit initialize und super hinterhältig sein, damit es nicht zu früh ein Standard Logger::LogDevice erstellt.

%Vor%     
devpuppy 17.04.2015 01:08
quelle
2

Als Alternative zum Patchen der Logger-Klasse lassen Sie die Protokolldatei nicht einfach durch Berühren im Vorhinein erstellen:

%Vor%

Im einfachen Ruby müssen Sie require 'fileutils' von stdlib offensichtlich.

Bearbeiten: Dies funktioniert nicht, wenn Sie die integrierte Logrotation verwenden oder die Datei gelöscht wird, da es keinen rotierenden Hook gibt und der Header dann erneut geschrieben wird.

    
TheDeadSerious 20.10.2015 15:30
quelle

Tags und Links