2017-01-06 1 views
0

리눅스에서 실행되는 python 토네이도 프로그램이 있습니다. 최근에 나는 버그를 발견했다. 일부 가져 오기 작업 레코드는 'dagger.log'라는 파일에 저장됩니다.파이썬 로깅 :

logging.handler.RotatingFileHandler로 인해 로그 파일의 길이가 거의 maxBytes 인 경우 기본 파일과 경로 이름이 같지만 확장명이 ".1", ".2 인 새 파일이 연속적으로 생성됩니다 "등이 첨부됩니다. 예를 들어, backupCount가 8이고 기본 파일 이름이 "app.log"인 경우 "dagger.log", "dagger.log.1", "dagger.log.2", ... through ... "단검 .log.8".

하지만 발견 log file on Linux, picture

dagger.log. [1-8] 및 13시 11분 월 4 일, dagger.log에서 생성 된dagger.log. [1-8] 1 월 4 일 거의 13:31에 마지막으로 수정되었습니다. 이상했다. dagger.log 파일이 최대 크기에 도달하지 않았으므로 dagger.log. [1-8]을 작성하지 않아야합니다. 무엇보다, 모든 로그 파일이 다릅니다. 그들에게는 전혀 같은 기록이 없습니다.

오랫동안 나를 혼란스럽게 만들었습니다. 나는 그것을 고칠 수 없습니다. 누군가 나를 도울 수 있습니까? 내 끔찍한 영어로 용서해주십시오. 나도 몰라 내 문제가 뭔지 이해할 수 있니?

+1

이다 (예를 들어, 매우 제한된 환경에서 실행)? 그렇지 않다면 stdout에 쓰기 만하면 systemd 나 upstart 또는 다른 것을 사용하여 서비스를 실행하고 로그 작성을 처리하게 할 수 있습니다. 또는, logrotate 설정 파일을 만들고 로그를 회전시킬 수 있습니다. – grepe

+0

조언 해 주셔서 감사합니다 ~ –

답변

0

tornado.process.fork_processes(8) 또는 tornado.httpserver.HTTPServer.start(8)과 같이 여러 프로세스를 실행하고 있습니까? 여러 프로세스를 사용하여 로깅하는 것은 까다로울 수 있습니다. 분기 된 프로세스는 동일한 로그 파일을 공유하기 시작하고 각 프로세스를 순환시킬 때가 독립적으로 회전합니다. 8 개의 새 파일

해결 방법은 자식 프로세스를 시작한 후에야 로깅을 구성하고 각 프로세스에 고유 한 로그 파일 이름을 부여하는 것입니다 (grepe 제안에 따르면 stdout/stderr에 로그를 남기고 외부 프로세스와 파일 처리 및 순환 처리). 외부 프로세스 관리자 및로드 밸런서를 사용하는 것이 좋지만 토네이도 응용 프로그램에서 하위 프로세스를 포크 화하려면 티 (HTTP 서버 초기화의 "advanced multi-process" 변형에서 시작)의 : 로그를 처리 할 필요가 이유가 자신을 파일이

sockets = tornado.netutil.bind_sockets(8888) 
task_id = tornado.process.fork_processes(0) 
configure_logging('dagger%d.log' % task_id) 
server = HTTPServer(app) 
server.add_sockets(sockets) 
IOLoop.current().start() 
+0

답변 해 주셔서 감사합니다. 나는 8 개의 항구에 듣는 프로그램을 달린다. 따라서 각 프로세스를 회전 할 시간이되면 독립적으로 회전하여 8 개의 새 파일을 만듭니다. 로그 파일을 직접 처리해야 할 수도 있습니다. 그리고 나에게 혼란 스러웠던 것은 5 일 전에 모든 로그가 하나의 로그에 기록되지만 이제는 8 개의 로그 파일에 로그가 기록됩니다. 일반적으로 하나의 파일에 기록해야합니다. 그것은 까다 롭습니다. 어쩌면 여러 프로세스와 관련이있을 수도 있습니다. –

+0

lol ~ 문제를 해결합니다. 서버를 다시 시작하면 모든 로그가 하나의 파일에 기록됩니다. –