오류 메시지를 표시하는 모든 .log를 단일 로그로 컴파일합니다.

오류 메시지를 표시하는 모든 .log를 단일 로그로 컴파일합니다.

/var/opt/log_loc1, /var/opt/log_loc2, /var/opt/log_loc3의 다양한 cron 작업에서 생성된 많은 로그가 있습니다. 각 로그를 보는 대신 오류 메시지가 포함된 모든 로그로 새 로그 파일을 채우도록 cron 작업을 예약하는 방법이 있습니까?

기본적으로 "all_logs_%Y_%m_%d"라는 이름의 새 로그 파일을 모든 로그 이름과 오류로 채우고 싶습니다. 매일 새로운 all_logs_%Y_%m_%d가 있습니다.

예: 이것은 /var/opt/log_loc1에 있는 내 로그 파일 목록입니다.

  1. InsertSales_2019_08_19.log
  2. PurgeHistory_2019_08_19.log
  3. 11_2019_08_19.log 가져오기
  4. ImportSales_2019_08_19.log
  5. 22_2019_08_20.log 가져오기
  6. 33_2019_08_20.log 가져오기
  7. InsertSales_2019_08_20.log
  8. PurgeHistory_2019_08_20.log
  9. 11_2019_08_20.log 가져오기
  10. ImportSales_2019_08_20.log
  11. 22_2019_08_21.log 가져오기
  12. 33_2019_08_21.log 가져오기
  13. InsertSales_2019_08_21.log
  14. PurgeHistory_2019_08_21.log

*질문이 불완전했다면 사과드립니다.

답변1

어때요 find? , 제가 ​​생각할 수 있는 가장 쉬운 방법은 이것을 사용하는 것입니다. 어쩌면 약간 조잡할 수도 있지만 작업을 완료해야 합니다.

find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;

모든 로그 파일(모든 날짜의)만 필터링할지 아니면 오늘부터만 필터링할지 확실하지 않습니다. 날짜를 필터링해야 하는 경우 옵션을 사용하거나 -mtime필터링 옵션만 find"트릭"을 사용할 수 있습니다( -name예: 어제의). 로그

find /var/opt/ -type f -name "*_`date --date yesterday '+%Y_%m_%d'`.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;

이것이 도움이 될지 확실하지 않습니다... 불분명한 또 다른 점은 로그 파일에 어떤 종류의 구문이 있습니까? 알파벳순이나 숫자순으로 검색할 수 없기 때문에 find결국 지저분한 파일이 됩니다. 일반적으로(그리고 교리여야 함) 로그는 %Y%m%d_%H:%M 또는 이와 유사한 것으로 시작합니다. 이 경우 다음과 같이 sort출력 할 수 있습니다.find

find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} \; sort -no total.log

이 방법을 시도해 보았는데 /var/log효과가 있을 것 같지만 앞서 말했듯이 이는 조잡한 방법입니다.

도움이 되었기를 바랍니다.

find, 및 페이지에서 sort사용한 옵션에 대한 자세한 내용을 확인할 수 있습니다.grepman

관련 정보