Übersicht
Mehrfache Ausgabe | ∅ |
Mehrfache Ausgabe mit unterschiedlichem Level | ∅ |
Eigene Level möglich | ∅ |
Abfrage auf Level möglich? | √ |
Format definierbar | √ |
Tracing möglich? | ? |
Verhalten bei Logfiles | overwrite, append |
URL des Rubyforge-Projekts | Standard |
Ausgabeziele:
- STDOUT
- STDERR
- File
Vorhandene Level:
- fatal
- error
- warn
- info
- debug
Weitere Möglichkeiten:
- tägliches/wöchentliches/monatliches logfile
- Neues Logfile nach erreichen einer Dateigröße
Coding-Beispiele
Beispiel 1: Logger auf STDOUT
require 'logger' log = Logger.new(STDOUT) log.level = Logger::WARN log.progname = 'Test for Logger' log.debug("just a debug message") log.info("important information") log.warn("you better be prepared") log.error("now you are in trouble") log.fatal("this is the end...") log.close
Ausgabe des Loggers
W, [2008-04-05T22:38:43.937000 #5888] WARN -- Test for Logger: you better be prepared E, [2008-04-05T22:38:43.937000 #5888] ERROR -- Test for Logger: now you are in trouble F, [2008-04-05T22:38:43.937000 #5888] FATAL -- Test for Logger: this is the end...
Beispiel 2: Logger in Datei
require 'logger' log = Logger.new('test2_logger.log') log.level = Logger::INFO log.progname = 'Test for Logger' log.debug("just a debug message") log.info("important information") log.warn("you better be prepared") log.error("now you are in trouble") log.fatal("this is the end...") log.close
Ausgabe des Loggers log_warn (File)
# Logfile created on Sat Apr 05 22:40:44 +0200 2008 by / I, [2008-04-05T22:40:55.906000 #5404] INFO -- Test for Logger: important information W, [2008-04-05T22:40:55.906000 #5404] WARN -- Test for Logger: you better be prepared E, [2008-04-05T22:40:55.906000 #5404] ERROR -- Test for Logger: now you are in trouble F, [2008-04-05T22:40:55.906000 #5404] FATAL -- Test for Logger: this is the end... I, [2008-04-05T22:42:11.296000 #1364] INFO -- Test for Logger: important information W, [2008-04-05T22:42:11.296000 #1364] WARN -- Test for Logger: you better be prepared E, [2008-04-05T22:42:11.296000 #1364] ERROR -- Test for Logger: now you are in trouble F, [2008-04-05T22:42:11.296000 #1364] FATAL -- Test for Logger: this is the end... I, [2008-04-05T22:42:49.046000 #4244] INFO -- Test for Logger: important information W, [2008-04-05T22:42:49.046000 #4244] WARN -- Test for Logger: you better be prepared E, [2008-04-05T22:42:49.046000 #4244] ERROR -- Test for Logger: now you are in trouble F, [2008-04-05T22:42:49.046000 #4244] FATAL -- Test for Logger: this is the end... I, [2008-04-07T12:59:57.372000 #2736] INFO -- Test for Logger: important information W, [2008-04-07T12:59:57.388000 #2736] WARN -- Test for Logger: you better be prepared E, [2008-04-07T12:59:57.388000 #2736] ERROR -- Test for Logger: now you are in trouble F, [2008-04-07T12:59:57.388000 #2736] FATAL -- Test for Logger: this is the end... I, [2008-04-07T13:00:06.310000 #5968] INFO -- Test for Logger: important information W, [2008-04-07T13:00:06.310000 #5968] WARN -- Test for Logger: you better be prepared E, [2008-04-07T13:00:06.310000 #5968] ERROR -- Test for Logger: now you are in trouble F, [2008-04-07T13:00:06.310000 #5968] FATAL -- Test for Logger: this is the end... I, [2008-04-07T13:01:36.391000 #5056] INFO -- Test for Logger: important information W, [2008-04-07T13:01:36.391000 #5056] WARN -- Test for Logger: you better be prepared E, [2008-04-07T13:01:36.391000 #5056] ERROR -- Test for Logger: now you are in trouble F, [2008-04-07T13:01:36.391000 #5056] FATAL -- Test for Logger: this is the end...
Beispiel 3: Logger mit levelprüfung
require 'logger' log = Logger.new('test2_logger.log') log.level = Logger::INFO log.progname = 'Test for Logger' log.debug("just a debug message") if log.debug? log.info("important information") if log.info? log.warn("you better be prepared") if log.warn? log.error("now you are in trouble") if log.error? log.fatal("this is the end...") if log.fatal? log.close
Die Ausgabe des Loggers erfordert evtl. viel Aufwand (=Rechenzeit). Man denke blos an komplexe Strukturen, die im Logger protokolliert werden sollen.
Zur Einsparung von Laufzeit bietet es sich an, den Logger nur dann zu rufen, wenn das entsprechende Level überhauot verwendet wird.
Weitere Möglichkeiten
- Ausgabeformat kann definiert werden.