착색 문제

착색 문제

문제 해결을 단순화하기 위해 wim, less 또는 기타 수단을 사용하여 대용량(~6000줄) 로그 파일을 표시하는 방식을 변경하고 싶습니다.

error로그의 특정 줄(예: ... )을 강조 표시하거나 패턴에 따라 다른 줄을 숨기고 싶습니다 .warninginfo

어떤 도구를 사용할 수 있나요? 쉘 스크립트만 필요한가요? 중요한 것은 프로세스 후에 검색 작업을 수행하기 위해 less, vim 등을 사용하여 출력을 읽을 수 있다는 것입니다!

편집: 로그의 작은 부분:

2016/10/25 12:19:24.403355 INFO <ServiceManager.cpp#2614 TID#3> Security object has NOT been parsed
2016/10/25 12:19:24.403369 INFO <ServiceManager.cpp#1263 TID#3> Service object sequence started
2016/10/25 12:19:24.403372 DBG <ServiceManager.cpp#1276 TID#3> preinvoke succeeded

답변1

awkValentin B.의 솔루션과 같은 것을 기반으로 한 쉘 스크립트를 권장합니다 .

$ cat colorize
awk '
function color(c,s) {
        printf("\033[%dm%s\033[0m\n",30+c,s)
}
/error/ {color(1,$0);next}
/success/ {color(2,$0);next}
/warning/ {color(3,$0);next}
/INFO/ {color(4,$0);next}
/DBG/ {color(5,$0);next}
{print}
' $1

컬러 출력을 대화식으로 보려면 less원시 모드를 사용합니다. 예를 들면 다음과 같습니다.

colorize mylog.txt | less -R

답변2

awk다른 답변에서 언급했듯이 도구는 확실히 가장 먼저 도달해야 할 것입니다.

하지만 장기적으로 사용할 수 있는 유일한 도구는 아닙니다.

AL 램버트logtool사후 처리 로그 파일용으로 특별히 설계되었으며, 정규식으로 가득 찬 파일을 13가지 색상 각각에 할당할 수 있는 복잡한(슬프게도 문서화가 부족함) 구성 시스템을 갖추고 있습니다.

cat*.log 로깅 도구 |

TAI64N 타임스탬프가 포함된 로그를 이해하는 기능이 특징입니다.

이렇게 하려면 다음을 추가하세요.

착색 문제

불행하게도 이러한 도구 중 일부는 매우 잘못된 음영 효과를 가지고 있습니다. terminfo에서 setaf/ etc를 사용하는 대신 제어 시퀀스를 하드와이어합니다 .setab

또한 셰이딩은 더 미묘한 이유로 까다로우며 이를 올바르게 처리하는 셰이딩 프로그램은 거의 없습니다. 완전히 정확하려면 셰이더가 자동 여백 및 DEC VT를 처리해야 합니다.개행 대기 중메커니즘, 저는 어떤 셰이더도 이런 일을 하는 것을 본 적이 없습니다. GNU에는 grep이 분야에서 상당히 유명한 색상 버그가 있지만 이는 단순한 문제가 아닙니다 grep.

추가 읽기

답변3

확인 후 터미널에서 직접 사용하여 컬러 텍스트를 출력할 수 있습니다 awk. 제공한 예제를 사용하면 displayLog.awk다음 코드를 포함하는 awk 스크립트 파일을 생성할 수 있습니다.

# output INFO lines in cyan
$3 == "INFO" {
    print "\033[36m"$0"\033[0m"
    next
}

# don't display DBG lines
$3 == "DBG" {
    next
}

# output WARNING lines in bright yellow
$3 == "WARNING" {
    print "\033[1;33m"$0"\033[0m"
    next
}

# output ERROR lines in bright red
$3 == "ERROR" {
    print "\033[1;31m"$0"\033[0m"
    next
}

# If you want to skip all other lines, comment next line
{print}

그런 다음 깨끗한 터미널 창을 열고 디스플레이가 제한되지 않았는지 확인하고(한 번에 6000줄을 모두 표시할 수 있음) 다음과 같이 사용합니다.

$ awk -f displayLog.awk log.txt

또는사용자처럼엘리야 그레이그의 솔루션에서 제안한 대로 원시 모드로 전송합니다 less.

$ awk -f displayLog.awk log.txt | less -R

이 정도면 충분합니다! 내 답변의 예제 코드를 기반으로 색상과 표시할 행을 조정할 수 있습니다 awk. 색상 코딩에 대한 추가 정보여기.

편집하다

전체 줄이 아닌 단일 단어에만 색상을 지정하려는 경우(예: ERROR가 빨간색으로만 표시되도록 하려면) 다음을 수행하세요.

$3 == "ERROR" {
    $3 = "\033[1;31m"$3"\033[0m"
    print
    next
}

답변4

패턴(예: 오류, 경고, 정보...)을 기반으로 로그의 특정 줄을 강조 표시하려면 다음 명령을 사용하세요.

grep -rn "pattern" <logfile>

이 명령은 위에서 설명한 패턴으로 로그 파일의 전체 줄을 모두 표시합니다.

관련 정보