터미널 출력을 색칠하는 도구를 만들어 보았습니다.

소개



요 전날 여기 의 기사를 보고 매우 편리할 것 같았기 때문에, 여러가지 기능 추가해 툴로 해 보았습니다.

사용법



이런 식으로 파이프로 연결하여 사용합니다.
$ tail -f hoge.log | pipecolor

파일 지정으로 cat 상당한 동작을 합니다.
$ pipecolor hoge.log

또한 Linux 한정이지만 PID 지정으로 실행중인 프로세스에서 출력을 가져올 수도 있습니다.
$ pipecolor -p 10000

또, 출력이 단말인가 파일인가는 판정하고 있으므로, 디폴트에서는 파일에의 리디렉션시에는 색칠하지 않습니다.
$ tail -f hoge.log | pipecolor > no_color.log # no_color.logは色付けなし
$ tail -f hoge.log | pipecolor --mode always > color.log # color.logは色付けあり

동작 데모는 이런 느낌입니다.
(INFO 행을 녹색, ERROR 행을 빨간색으로 색칠해 보았습니다)



설치



릴리즈
Rust로 쓰여 있으므로 환경 구축이 끝난 분은 이하에서도 OK입니다.
$ cargo install pipecolor

설정



색상 설정 파일을 준비합니다. 기본적으로 ~/.pipecolor.toml를 읽습니다.
또, --config 옵션으로 패스 지정도 가능합니다.

간단한 설정


[[lines]]
    pat   = "ERROR.*"
    colors = ["Red"]
    tokens = []
pat 에 매치 시키는 정규 표현을, colors 에 색을 지정합니다.
이 경우 정규 표현에 매치한 부분 전체가 Red 가 됩니다.

그룹핑으로 색으로 구분


[[lines]]
    pat   = "(ERROR).*"
    colors = ["Red", "LightRed"]
    tokens = []

정규 표현에서는 그룹핑 지정을 할 수 있어, 각 그룹의 색은 colors 의 2 번째째 이후에 씁니다.
(첫 번째 색상은 어떤 그룹도 아닌 부분입니다)
이 경우 ERRORLightRed이고 .* 부분이 Red입니다.

여러 색 설정


[[lines]]
    pat   = "(ERROR).*"
    colors = ["Red", "LightRed"]
    tokens = []
[[lines]]
    pat   = "(INFO).*"
    colors = ["Green", "LightGreen"]
    tokens = []
lines 는 복수 설정할 수 있습니다. 이 설정은 위의 동작 데모에서 사용한 "ERROR가 빨간색, INFO가 녹색"입니다.

특정 문자열 하이라이트



일치하는 행 중 특정 문자열만 강조 표시할 수도 있습니다.
[[lines]]
    pat  = "^(.*?) .*? .*? \\[(.*?)\\] \".*?\" .*? .*? \".*?\" \"(.*?)\""
    colors = ["White", "LightGreen", "LightBlue", "Green"]
    [[lines.tokens]]
        pat   = "GET"
        colors = ["LightCyan"]
    [[lines.tokens]]
        pat   = "POST"
        colors = ["LightYellow"]
    [[lines.tokens]]
        pat   = "HEAD"
        colors = ["LightMagenta"]       

이것은 Apache 로그를 가정한 설정입니다. GET/POST/HEAD 에 대해서 각각 색칠하고 있습니다.



색상 지정



사용할 수있는 색상은 현재 이하입니다.


Usable color




블랙
블루
Cyan
Default
그린

LightBlack
LightBlue
LightCyan
LightGreen
LightMagenta

LightRed
LightWhite
LightYellow
Magenta
레드

화이트
Yellow

좋은 웹페이지 즐겨찾기