2012-02-28 2 views
0

증가하는 로그 파일을 모니터링하고 구문 분석하는 데 tail -F log | python parse.py을 사용하고 있지만 로그 파일에서 불완전한 줄을 읽음으로써 발생할 수있는 구문 분석 오류가 발생합니다.`tail '이 불완전한 라인을 방출하는 것이 가능한가?

tail이 불완전한 라인을 방출 할 수 있습니까? 파서에서

, 나는 다음과 같은 코드 행을 읽고있다 :

import csv 
import sys 

reader = csv.reader(sys.stdin) 
for row in reader 
    # process 

답변

0

꼬리 '해석 할 선'을 방출 할 수있는 가능성이 있습니다 -하지만 잘못된 라인이 파일에 기록하는 경우에만./

  • 의 syslog-ng에이 중간에 죽으면 시스템 로그/로그/var에에

    • 당신의 꼬리 -f : 인수의 원형 비트의 종류, 그러나 여기가 일어날 수있는 방법의 예 블록 스패닝 쓰기 (섹터는 512 바이트이고 파일 시스템 블록 크기는 가장 크며 아마도 4096보다 크지 않을 것입니다.) 그래서 syslog는 9k의 데이터를 버퍼링하여 쓰기 만하면 4k 바이트 페이지를 통과하고 그 전에 다음 4k + 1k syslog가 죽을 수도 있습니다. 적어도 ext2에서는 fsck. ext3 이후에도 부분 쓰기로 끝날 것입니다 ... heh. 하지만, 나는 희망하지 않습니다 ..하지만 누가 당신이 쓰는 데이터가 항상 올바른거야? 예상 한 개행을 포함하지 않는 치명적이지 않은 문자열 형식 오류가 발생할 수 있습니다.

    • 다음 줄 바꿈이 없거나 (\ 0), 다음에 syslog가 시작되고 추가되기 시작하면 끝 부분에 추가됩니다. '유효한'레코드의 개념이없는 파일. 따라서 첫 번째 새 레코드는 쓰레기가되지만 다음 레코드는 괜찮습니다.

    이 운동하기 쉬운 .. 리눅스의 꼬리는 기본적으로 inotify를 사용하기 때문에

    echo FOO >>SOMEFILE 
    echo BAR >>SOMEFILE 
    printf NO_NEWLINE >>SOMEFILE 
    echo I_WILL_HAVE_THE_LAST_LINE_PREFIXED_TO_ME_CAUSING_NERD_RAGE >>SOMEFILE 
    

    가, 어떤이

    다른 창에서 창

    tail -f SOMEFILE

    하나에서 read는 줄 바꿈없이 마지막 줄을 얻고 th까지 기다린다. e 다음 줄 바꿈은 '최신 줄'로 간주되는 시작 부분에 NO_NEWLINE을 붙이는 것에 따라옵니다.

    만약 당신이 리눅스를 사용한다면 - inotify를 사용하고 싶다면 OSX 나 BSD를 사용한다면 'knotty'를 사용하고 입력 파이프로 'tail'을 사용하지 말라. 너 자신의 파일을 보아라.

    'resync on truncate'를 사용하면 테일이 이상한 일을 할 수도 있습니다. 즉, 파일이 제로가되고 읽기 도중에 다시 시작되면 '꼬리'이후에 읽은 데이터가 이상하게 나타날 수 있습니다. 새 파일 대신 현재 열려있는 파일 핸들을 닫습니다.

  • +0

    가능하지만 매우 드뭅니다. 나는 질문자의 파이썬 스크립트가 버그가 많은 확률이 훨씬 높다고 추측합니다. – Perry

    +0

    @ Perry, 질문을 업데이트하고 로그를 읽는 데 사용한 코드를 추가했습니다. – satoru

    +0

    로그의 행이 쉼표로 구분 된 값입니까? – Perry

    0

    나에게 질문을 변경 했으므로 새로운 답변을드립니다! : p

    reader = csv.reader(sys.stdin) 
    for row in reader: 
        try: 
         validate_row_data_somehow(row) 
         do_things_with_valid_row(row) 
        except: 
         print "failed to process row", `row` 
    
    +1

    다른 답변이 필요한 질문을 변경하면 일반적으로 질문에 대한 하향식이 발생합니다. – jordanm

    +0

    오늘 기분이 좋았습니다. – synthesizerpatel

    관련 문제