프로그래밍/General
[CloudFlare] Workers Log 편하게 보는 법
Lou Park
2023. 2. 2. 23:56
wrangler tail
Worker에 찍은 console.log
들을 편하게 보고싶은데, CF에서 제공하는 Real-time Logs는 내가 원하는 정보보다 방대하다. 아래는 그 로그의 예시인데, "logs" 부분에 당시 내가 찍은 console.log
가 있다면 담기는 식이다. 실패한 요청만 필터링을 거는 등 스마트하게 로그를 보고싶다면 wrangler tail
명령어를 이용하면된다.
{
"outcome": "ok",
"scriptName": "entrypoint",
"exceptions": [],
"logs": [], // ****** 바로 여기 !! *********
"eventTimestamp": 1675348988505,
"event": {
"request": {
"url": "https://...",
"method": "GET",
"headers": {
"accept-encoding": "gzip",
"cf-connecting-ip": "",
"cf-ipcountry": "KR",
"cf-ray": "",
"cf-visitor": "{\"scheme\":\"https\"}",
"connection": "Keep-Alive",
"host": "",
"user-agent": "",
"x-forwarded-proto": "https",
"x-real-ip": ""
},
"cf": {
...
}
},
"response": {
"status": 200
}
},
"id": 1
}
내 Worker는 에러가 날 경우 아래와 같은 응답을 하고, console에 해당 에러를 찍어준다.
{ error: 'system error' }
이런 로그들만 모아서 보고싶다면 다음과 같이 입력해주면된다.
wrangler tail YOUR_WORKER_NAME --search error --format json | jq --stream 'fromstream(1|truncate_stream(inputs | select(.[0][0] == "logs")))'
--search
옵션은 console.log의 내용에서 문자열에 해당하는 로그들만 필터링하여 보여준다.
추가적으로 --format
옵션도 주었는데, 기본값은 pretty
이다. pretty
로 설정할 경우 자세한 내용이 나오지 않고 METHOD, 응답값, URL 정도만 나오므로 json
값으로 설정해주었다.
다음은 jq
를 활용한다.
jq는 Commandline JSON Processor로, JSON 입력을 처리해주는 기능을 제공한다. stream 처리를 하려하기에 약간 복잡하지만, "logs"만 뽑아오는 부분이라고 이해하면된다.
응용으로, 서버에서 logrotate
와 함께 백그라운드로 내내 돌려주면 나중에 문제가 생겼을때 로그를 바로 찾아볼 수 있다.