강의를 보다가 알게된 패키지인 morgan 이 있다.
https://www.npmjs.com/package/morgan
morgan
HTTP request logger middleware for node.js
node js 미들웨어로, http request에 대한 log를 반환해준다.
내가 처음으로 정독하게 될 영광의 첫 document로 선정되었다.
Dexter의 이름을 땄는데, 너가 끝까지 보지 않을 프로그램이다? 유머같은데 ... Dexter
주인공 이름이 morgan 이다.
맞다. 작년에 한 프로젝트 중 최신 인기 영화나 티피프로그램을 보여주는 사이트를 만들었는데 거기서 한동안 상위권에 있던 드라마인것 같다. 새 시즌이 나왔었나 보다.
왜 끝까지 보지 않을거라고 말한지는 모르겠다. 시즌이 많아서 그런가?
다음 명령어로 설치한 뒤
다음과 같이 불러온다.
주어진 포맷과 옵션을 이용하여 모건(미들웨어 함수)를 만들 수 있다. 포맷 인자는 미리 정해진 이름(밑에나올거임)의 문자열이거나 format string 문자열이거나 log entry를 생성할 함수이다.
인자로 밑에 나오는 문자열 중에서 적거나 format string으로 적거나 log entry를 생성하는 함수... 는 잘 모르겠다.
format은 넣어줘야하고, options은 말 그대로 옵션이니까 안넣어도 실행된다.
위의 두 줄은 format에 밑에 나올 "dev" 를 주어서 리턴되는 로그 값이고 아래 다시 format값을 지우고 실행해봤는데 format없이 사용하는 것은 권장되지 않는다고 뜨면서 아래와 같은 이상한 형식으로 log가 반환되었다.
predefined format string
미리 정의된 형식으로 포맷을 설정하는 방법이다. 아까는 'dev'로 설정한 결과를 보았었다
Using format string of predefined tokens.
미리 정의된 토큰을 이용하여서 format string을 만들어서 format을 설정하는 방법이다.
tokens가 위와 같은 :method, :url, :status, :res[content-length] -, :response-time ms 인 것 같다. 이것도 아래에 사용할 수 있는 것이 정의되어 있을 것 같다.
자기 마음대로 설정할 수 있다는 점에서 전의 방법과는 차별성이 있는 것 같다.
Using a custom format function
음 .. 2번째 방법처럼 토큰을 이용해서 커스텀으로 설정한 형식을 함수(앞서 나온 function that will produce a log entry 인 것 같다)로 만들고, 그 함수를 morgan 함수에 format인자로 주는 것 같다. 그 아래에는 이 함수에 대한 설명인 것 같다.
format function은 3개의 매개변수(tokens, req, res)와 함께 호출될것이다.
tokens : an object with all defined tokens
req : HTTP request
res : HTTP response
function은 log line의 문자열을 반환하거나 undefined 또는 null 을 반환한다. (skip하는 경우)
난 첫번째 방법만 쓸 것 같다. (자주 쓰는 포맷이니까 미리 정해놨겠지?)
다음 속성들을 속성 객체로 받는다.
새로운 토큰을 만드는 방법을 예로써 알려주고 있다.
그 후로는 미리 정의된 토큰들과 설명이 나온다.
토큰을 ... 뭐 .. 사용하는 방법같다.
예시다. 다른 문서에서도 제일 자주 보게 될 섹션인것 같다.
express 에서 출력하는 방법
vanilla-js 에서 출력하는 방법
파일에 저장하는 법
아까 나왔던 stream 옵션이 여기서 사용되는 것 같다.
access.log 파일이 생기고 log들이 생겼다.
다음은 폴더에 매일 다른 파일로 logging을 하는 방법인것 같다.
이번엔 로그폴더가 생기고 거기에 파일이 생겼다. rotating-file-stream module을 설치하고 해야했다.
모건은 여러번 쓸수 있다 ! 조합해서 쓰는 방법.
skip 옵션을 사용해서 한번, stream으로 한번.. 이런 방식으로 조합해서 쓰는 예시이다.
custom token을 사용한 예시이다. 예시를 보니까 좋네 !?
npm에 node-uuid 는 안나와서 비슷해보이는 short-uuid 모듈을 사용해서 해봤다. 위처럼 결과가 나왔다.
마지막으로 라이센스와 키워드가 나오고 문서가 끝났다.