2011-03-02 8 views
14

이 코드를 config/environment.rb에 추가하여 CRON_LOG라는 애플리케이션 용 사용자 정의 로거를 만들었습니다.로그 메시지 전에 현재 시간 추가

CRON_LOG = Logger.new("#{Rails.root}/log/cron.log") 
CRON_LOG.level = Logger::INFO 

그런 다음 로그에 기록하려면 다음과 같이하십시오.

CRON_LOG.info "something" 

잘 작동하지만 각 로그 메시지 앞에 현재 타임 스탬프를 추가하고 싶습니다. 물론 Time.now을 내 로그 메시지에 추가 할 수는 있지만 모든 로그 메시지에 기본값으로 추가하는 방법이 있는지 알고 싶습니다. 어떻게해야합니까?

고마워.

답변

8

사용자는 적당한 방법 (예를 들어, 이니셜 라이저 environment.rb 또는 아래에 추가)를 재정의 할 수

class Logger 
    def format_message(severity, timestamp, progname, msg) 
    "#{timestamp} (#{$$}) #{msg}\n" 
    end 
end 

[주의 : 이것은 다른 로거를 중단시킬 수; 안전 솔루션에 대한 스티븐의 답변을 참조 - JPH]

+0

완벽한합니다. 감사! – Brian

+2

문제가 해결되면 다른 사람들도 즉시이를 발견 할 수 있습니다. :-) –

+0

나는 덜 침략적인 방법으로 이것을 다루었습니다. 어쨌든 런타임시 다른 활성 로거의 동작을 수정하지 않으려면 메서드를 오버로드 할 계획 인 경우 인스턴스에'Logger'를 서브 클래스 화하거나 인스턴스에'format_message'를 다시 정의하는 것이 좋습니다. – stephencelis

35

시스템 로그 형식의 로거를 만드는 가장 쉬운 방법은 직접 포맷터 할당하는 것입니다 :

logger = Logger.new Rails.root.join('path', 'to', 'log') 
logger.formatter = Logger::Formatter.new 
logger.info 'Hello, world!' 
# Writes: 
# 
# I, [2011-06-02T20:02:34.579501 #15444] INFO -- : Hello, world!