내 응용 프로그램이 로그를 저장하는 파일 (application.log)이 있습니다. 때로 예외가 생겼으므로 에만 예외 ()를 다른 파일 (exception.log)에 저장하고 싶습니다.grep multiline stack trace? 결함이있는 스레드가 내 솔루션으로 작성되었습니다.
kill $(ps -ef | grep tail | awk '{print $2}')
tail -f /path/to/my/application.log | pcregrep -M 'Exception[^\[]+' | while read line
do
(echo "$line" >> /path/to/my/exception.log)
done &
:
[2017-28-09 10:00:10,000] Text of Exception number 1
at bla bla bla
at bla bla bla
at bla bla bla
at bla bla bla
내가 같은 방법으로 시도 : 보관해야 exception.log하는 등 siutation에서
[2017-28-09 10:00:00,000] Text of log number 1
[2017-28-09 10:00:05,000] Text of log number 2
[2017-28-09 10:00:10,000] Text of Exception number 1
at bla bla bla
at bla bla bla
at bla bla bla
at bla bla bla
[2017-28-09 10:00:15,000] Text of log number 4
: 로그의 각 줄은 같은 형식으로 날짜부터 시작 이 솔루션은 성공적으로 작업을 수행 할뿐만 아니라 많은 스레드를 생성했으며 시스템의 전체 스레드 수가 크게 증가했습니다. 그 때문에 다른 솔루션을 사용하거나 "문제가없는 문제"를 해결해야합니다.
혹시, 예외 추적 스택을 다른 파일로 잘라내거나 제거하지 못하도록 grep 또는 copy 만 할 수 있습니까?
은 'tail -f /path/to/my/application.log |를 수행합니까? awk '/\[.*\]/{d=0; if ($ 0 ~ "Exception") d = 1} d '>>/path/to/my/exception.log'가 도움이됩니까? – CWLiu
이것은 정확히 내가 물어 본 것입니다! 고마워 :-) –
@CWLiu Hmmm ... 이제 마지막 줄도 잡았다는 것을 알았습니다 ("[2017-28-09 10 : 00 : 15,000] 로그 번호 4의 텍스트"를 의미 함). 이 코드를 변경하여 다음 코드가 아니라 Exception과 함께 줄만 쓰는 방법은 무엇입니까? –