2013-01-17 24 views
24

Jak sformatować rejestrator ruby?Jak sformatować rejestrator ruby?

+1

opisać "niechlujny linii". Dane wyjściowe są praktycznie takie same, jak je wysyłasz. –

+1

Główny identyfikator statusu jest bardzo denerwujący: 'I, [2014-01-23T17: 41: 35.268796 # 8066] INFO -: event = updateSiteStats' – drewish

Odpowiedz

49
logger = Logger.new('nice.log') 

logger.formatter = proc do |severity, datetime, progname, msg| 
    "NICE: #{msg}\n" 
end 

logger.info("I like cheese.") 

# nice.log: 
NICE: I like cheese. 
25

Jeśli chcesz formatować tylko czas, można łatwo zrobić z datetime_format i standardowej format specification. Na przykład, jeśli zrobić:

# Set the logger: 
logger = Logger.new($stdout) 
logger.level = Logger::DEBUG 
logger.datetime_format = "%Y-%m-%d %H:%M:%S" 

logger.info("This is an info log...") 
logger.error("This is an error log...") 

Będziesz skończyć z dzienników takich jak:

I, [2015-01-20 14:02:29#17329] INFO -- myProg: This is an info log... 
E, [2015-01-20 14:02:29#17329] ERROR -- myProg: This is an error log... 

Jeśli natomiast chcesz, aby całkowicie dostosować swój dziennik, można użyć logger.formatter. Na przykład, jeśli zrobić:

# Set the logger: 
logger = Logger.new($stdout) 
logger.level = Logger::DEBUG 
logger.formatter = proc do |severity, datetime, progname, msg| 
    date_format = datetime.strftime("%Y-%m-%d %H:%M:%S") 
    if severity == "INFO" or severity == "WARN" 
     "[#{date_format}] #{severity} (#{progname}): #{msg}\n" 
    else   
     "[#{date_format}] #{severity} (#{progname}): #{msg}\n" 
    end 
end 

logger.info("This is an info log...") 
logger.error("This is an error log...") 

Będziesz skończyć z dzienników takich jak:

[2015-01-20 14:48:04] INFO (myProg): This is an info log... 
[2015-01-20 14:48:04] ERROR (myProg): This is an error log... 
+5

Dobre informacje, ale aby zachować spójne odstępy, po prostu użyj printf. Możesz ustawić określony odstęp między wierszami za pomocą liczby, takiej jak "sprintf"% 5.5s ", ważność" – nateware

+5

Lub po prostu użyć '# {severity.ljust (5)}' – Ixio