파이썬으로 아파치 로그를 syslog로 보내는 프로그램 개발하는 중입니다.
글쓴이: mips / 작성시간: 금, 2008/05/09 - 5:50오후
#!/usr/bin/perl use Sys::Syslog qw( :DEFAULT setlogsock ); use Sys::Hostname; setlogsock('unix'); openlog(hostname, 'cons', 'pid', 'local2'); while ($log = <STDIN>) { syslog('notice', $log); print $log; } closelog
위와 같이 펄로 되어 있는 코드를 아래와 같이 파이썬으로 바꾸려고 하는데요.
목적은 아파치 로그를 syslog로 보내서 저장하려고 하는데, 위의 펄 코드는
잘 되는데, 아래 코드는 아파치가 떠 있을 때 받은 메세지를 바로 뿌리지 않고 있다가
아파치를 재시작하면 그 때서야 syslog 파일에 출력이 됩니다.
아파치를 중지(apachectl stop) 했을 때는 메세지가 어디로 갔는지 사라져 버리고
반드시 재시작 했을 때에만 이전 메세지가 출력이 되네요.
#!/usr/bin/python import syslog import socket import os myhost = socket.gethostname() syslog.openlog(myhost, syslog.LOG_LOCAL2) f=os.fdopen(0) for line in f: syslog.syslog(syslog.LOG_WARNING, '%s' % line[:-1]) syslog.closelog() f.close()
Forums:
파이선은 잘 모르지만...
문에서 먼저 파일 전체를 읽어 들이는가 봅니다.
파일 전체를 읽어 들인다는 말은 EOF를 읽어 들였을 때 까지라는 말이니깐...
아파치가 EOF를 출력할 때 까지 대기하고 있겠네요.
명령줄에서 테스트해 보셔도 Ctrl-d를 입력하기 전까지는 시스로그에 출력되지 않을 겁니다.
댓글 달기