log4rlog4r est une bibliothèque de gestion de logs pour ruby (à la log4j, etc). Son utilisation est beaucoup plus souple que celle de logger qui ne permet pas, par exemple, de (re)définir simplement le format des logs, seul le format de date étant paramétrable. La configuration de log4r, à l'instar de celle de log4j, peut être effectuée via un fichier XML. Ce qui a l'avantage considérable d'externaliser la configuration des logs par rapport au code ruby proprement dis. Voyons un petit exemple : #!/usr/bin/ruby require 'log4r' require 'log4r/configurator' include Log4r class MyFormatter < BasicFormatter @@basicformat = "%s:%s %*s %s" def format(event) if (ENV.has_key?('REMOTE_USER')) user = ENV['REMOTE_USER'] else user = "anonymous" end if (ENV.has_key?('REMOTE_ADDR')) address = ENV['REMOTE_ADDR'] else address = 'unknow' end buff = sprintf(@@basicformat, user, address, MaxLevelLength, LNAMES[event.level], event.name) buff += (event.tracer.nil? ? "" : "(#{event.tracer[0]})") + ": " buff += format_object(event.data) + "\n" buff end end Configurator.load_xml_file('./log4r.xml') logger = Logger['logger'] logger.level = Logger::WARN logger.debug { "debug message" } logger.info { "info message" } logger.warn { "warn message" } logger.error { "error message" } logger.fatal { "fatal error" } La classe MyFormatter (qui hérite de BasicFormatter) permet de définir mon propre format de logs. Dans cet exemple, le script étant voué à une utilisation en CGI authentifié, cela me permet de rajouter le nom d'utilisateur ainsi que son IP à chaque fichier de log. <log4r_config> <pre_config> <global level="DEBUG" /> <parameter name="webservices_log" value="webservices.log" /> </pre_config> <outputter type="FileOutputter" name="radius"> <filename>#{webservices_log}</filename> <trunc>false</trunc> <formatter type="MyFormatter" /> </outputter> <logger name="logger" level="DEBUG" outputters="radius" /> </log4r_config> |
Welcome to Bruno Bonfils's (aka asyd homepage).
Discussion