관련지식
logger

리눅스에서 로그를 볼땐 대부분 tail을 이용하지만, 윈도우에선 기본으로 제공하는 명령어가 없죠. mTAIL은 윈도우에서 사용가능한 로그 뷰어입니다. 윈도우에서 사용 가능한 로그 뷰어는 여러 종류가 있는데 그중에서도 mTAIL을 선호하는 이유는 아래 두가지가 큽니다.

  1. 인코딩 지원이 좋다
  2. 로그에 컬러 지원이 가능하다

mTail 홈페이지 : http://ophilipp.free.fr/op_tail.htm

화면에서 조금 내려보면 다운로드 링크, 컬러링을 위한 샘플파일, 문서파일 링크가 있습니다. 무료 프로그램인데 지금까지도 유지보수를 하고 있네요. 최근 업데이트 날짜는 2019년 9월 9일 입니다.

mTail.exe 파일만 있으면 로그를 보는데 문제가 없지만 로그에 컬러를 적용하기 위해서는 mtail_cc.ini 파일이 실행파일과 같은 경로에 있어야 합니다.

mtail_cc.ini 파일 작성방법을 간단하게 알아보겠습니다. mtail_cc.ini 파일은 아래와 같은 구조로 만들어져 있습니다.

  1. [Sample0]
  2. Hint='Line hightlight'
  3. RuleName0=Error Messages
  4. RuleScope0=line
  5. RuleMode0=match
  6. SimpleMatch0x0='*err*'
  7. TextColor0=$8000
  8. BackColor0=$FFFFFF
  9. [Sample1]
  10. Hint='Word and line color coding'
  11. WordSeparator='.;,:!·"'^+-*/\ `[]()€{}?|%=<>'
  12. RuleName0=ERROR Messages Line in RED and stop processing rules
  13. RuleScope0=line
  14. RuleMode0=match
  15. RuleStopOnOk0=Y
  16. SimpleMatch0x0='*# *'
  17. TextColor0=$00
  18. BackColor0=$FF

[이름] 에는 해당 섹션에 대한 이름이 들어갑니다. 즉 위의 설정에선 Sample0과 Sample1 이란 섹션이 있는 것이죠. 섹션에는 컬러를 적용하고 싶은 룰을 지정할수 있습니다. 하나의 로그 파일에는 하나의 섹션만 적용 가능하므로 하나의 섹션에는 여러개의 룰을 만들수 있습니다. 위 샘플은 각 섹션별로 한개의 룰만 있기 때문에 임의의 샘플 로그 파일을 가지고 새로 룰을 만들어보겠습니다. 사용할 샘플 로그는 아래와 같습니다.

  1. 2020-01-10 07:58:58.063 - info: [127.0.0.1][filter.js][line:26] - /js/util.js?rev=16
  2. 2020-01-10 07:58:58.115 - info: [127.0.0.1][filter.js][line:26] - /lib/tabler/js/vendors/bootstrap.bundle.min.js.map
  3. 2020-01-10 07:58:59.777 - info: [127.0.0.1][filter.js][line:26] - /sw.js
  4. 2020-01-10 08:01:05.470 - info: [127.0.0.1][scheduler.js][line:93] - schedule joonggonara0 running
  5. 2020-01-10 08:01:07.540 - info: [127.0.0.1][joonggonara.js][line:39] - 중고나라 모니터링 시작
  6. 2020-01-10 08:01:10.593 - error: [127.0.0.1][push.js][line:46] - Error: Command failed: curl -X POST
  7. 2020-01-10 08:04:43.593 - info: [127.0.0.1][app.js][line:73] - serverIP : 127.0.0.1
  8. 2020-01-10 08:18:40.065 - debug: [127.0.0.1][edu.js][line:27] - china db loaded
  9. 2020-01-10 08:21:47.431 - debug: [127.0.0.1][DBHandler.js][line:33] - select * from schedule where read=0 order by idx asc

가장 먼저 섹션 이름은 Color1로 만들겠습니다. 그리고 단어를 구분하는 문자는 공백, 대괄호([, ])로 지정합니다.

  1. [Color1]
  2. WordSeparator=' []'

보통 에러 로그는 눈에 확 띄는게 좋을것입니다. 빨간색 배경을 넣어보겠습니다. 아래 룰은 error: 가 포함된 라인에 빨간색 배경을 넣게 됩니다.

  1. [Color1]
  2. WordSeparator=' []'
  3. RuleName0=Error color
  4. RuleScope0=line
  5. RuleMode0=match
  6. RegExpMatch0x0='[\w\W]+error\:[\w\W]+'
  7. BackColor0=$0000FF

로그중에서 DB 쿼리는 다른 로그보다 구분되면 좋겠습니다. [DBHandler.js] 가 포함된 로그에 대해선 파란색 글씨로 보이게 해보겠습니다.

  1. RuleName1=DB log
  2. RuleScope1=line
  3. RuleMode1=match
  4. RegExpMatch1x0='[\w\W]+\[DBHandler.js\][\w\W]+'
  5. TextColor1=$FF0000

두개의 룰을 비교하면 RuleName, RuleMode 등의 뒤의 숫자가 다르다는것을 볼수 있습니다. 각 룰마다 고유의 숫자를 가지고 있어야 하기 때문에 룰 갯수만큼 숫자가 증가되어야 합니다. 그리고 또 BackColor와 TextColor에 있는 색깔이 #000000 형태가 아니라 $000000으로 되어있습니다. 왜 이런 규칙이 되었는지 모르겠지만 #123456 값으로 적용하려면 $654321 로 작성해야합니다. 거꾸로 되어있죠. 따라서 이번엔 #123456 색깔이 적용된 룰을 만들어보겠습니다.

  1. RuleName2=keyword
  2. RuleMode2=match
  3. SimpleMatch2x0='filter.js'
  4. BackColor2=$654321

RuleScope 값은 디폴트가 word 속성이기 때문에 이번 룰에선 생략했습니다. 그리고 단순히 filter.js 단어에만 적용할것이기 때문에 SimpleMatch 를 적용했습니다. 년-월-일 값에도 같은 컬러를 적용해볼까요? 새로운 룰을 추가할 필요없이 매칭 규칙만 추가하면 됩니다.

  1. RuleName2=keyword
  2. RuleMode2=match
  3. SimpleMatch2x0='filter.js'
  4. SimpleMatch2x1='????-??-??'
  5. BackColor2=$654321

이외에도 다양한 방법으로 로그에 컬러를 적용할수가 있습니다. 공식 홈페이지에 있는 문서를 참고해서 원하는 스타일로 로그를 적용해보시기 바랍니다.

최종샘플

mtail_cc.ini)

  1. [Color1]
  2. WordSeparator=' []'
  3. RuleName0=Error color
  4. RuleScope0=line
  5. RuleMode0=match
  6. RegExpMatch0x0='[\w\W]+error\:[\w\W]+'
  7. BackColor0=$0000FF
  8. RuleName1=DB log
  9. RuleScope1=line
  10. RuleMode1=match
  11. RegExpMatch1x0='[\w\W]+\[DBHandler.js\][\w\W]+'
  12. TextColor1=$FF0000
  13. RuleName2=keyword
  14. RuleMode2=match
  15. SimpleMatch2x0='filter.js'
  16. BackColor2=$654321

샘플 로그

  1. 2020-01-10 07:58:58.063 - info: [127.0.0.1][filter.js][line:26] - /js/util.js?rev=16
  2. 2020-01-10 07:58:58.115 - info: [127.0.0.1][filter.js][line:26] - /lib/tabler/js/vendors/bootstrap.bundle.min.js.map
  3. 2020-01-10 07:58:59.777 - info: [127.0.0.1][filter.js][line:26] - /sw.js
  4. 2020-01-10 08:01:05.470 - info: [127.0.0.1][scheduler.js][line:93] - schedule joonggonara0 running
  5. 2020-01-10 08:01:07.540 - info: [127.0.0.1][joonggonara.js][line:39] - 중고나라 모니터링 시작
  6. 2020-01-10 08:01:10.593 - error: [127.0.0.1][push.js][line:46] - Error: Command failed: curl -X POST
  7. 2020-01-10 08:04:43.593 - info: [127.0.0.1][app.js][line:73] - serverIP : 127.0.0.1
  8. 2020-01-10 08:18:40.065 - debug: [127.0.0.1][edu.js][line:27] - china db loaded
  9. 2020-01-10 08:21:47.431 - debug: [127.0.0.1][DBHandler.js][line:33] - select * from schedule where read=0 order by idx asc