일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Algorithm
- Exercism
- JavaScript
- join()
- 장고 프로젝트 순서
- mongodb
- MYSQL
- Blog
- 자바스크립트
- MyPick31
- Django Blog
- 북마크만들기
- til
- 예술영화추천
- 알고리즘
- 장고 프로젝트
- python
- 북마크앱
- 장고 개발 순서
- Node.js
- 장고
- 타사인증
- 파이썬 웹프로그래밍 장고
- 개발
- Bookmark
- ART_Cinema
- Django
- 독립영화플랫폼
- 프로젝트
- passport.js
- Today
- Total
Juni_Dev_log
(node.js) [Part.4] 노드의 기본 기능 알아보기 - 로그 파일 남기기 본문
console 객체의 log() 또는 error() 메소드 등을 호출하면 로그를 출력할 수 있다.
그런데 프로그램의 크기가 커질수록 로그의 양도 많아지고 로그를 보관했다가 나중에 확인해야하는 경우도 생긴다.
따라서 어떻게 로그를 남기고 보관할 것인지가 중요해진다. 로그를 보관하려면 화면에만 출력하는 것만으로는 부족하다.
이 때문에 다양한 방식으로 로그를 남길 수 있도록 외부 모듈을 사용한다.
여기에서는 로그 모듈 중에서 winston 모듈로 로그를 남기는 방법에 대해서 알아본다.
로그를 남기려면 설정이 필요하다.
이렇게 설정한 코드는 한번 만들어두면 그대로 복사한 후 일부 설정만 바꾸어도 다른 프로그램에서 사용할 수 있다.
그렇기 때문에 처음 코드를 만들 때 그 코드의 사용법을 잘 이해하는 것이 중요하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
var winston = require('winston'); // 로그 처리 모듈
var winstonDaily = require('winston-daily-rotate-file'); // 로그 일별 처리 모듈
var moment = require('moment'); // 시간 처리 모듈
function timeStampFormat(){
return moment().fotmat('YYYY-MM-DD HH:mm:ss.SSS ZZ');
// ex) '2020-12-06 13:20:34.500 +0900'
}
var logger = winston.createLogger({
transports : [
new (winstonDaily)({
name : 'info-file',
filename : './log/server',
datePattern : 'YYYY-MM-DD',
colorize : false,
maxsize : 50000000,
maxFiles : 1000,
level : 'info',
showLevel : true,
json : false,
timestamp : timeStampFormat
}),
new (winston.transports.Console)({
name : 'debug-console',
colorize : true,
level : 'debug',
showLevel : true,
json : false,
timestamp : timeStampFormat
})
],
exceptionHandlers : [
new (winstonDaily)({
name : 'exception-file',
filename : './log/exception',
datePattern : 'YYYY-MM-DD',
colorize : false,
maxsize : 50000000,
maxFiles : 1000,
level : 'error',
showLevel : true,
json : false,
timestamp : timeStampFormat
}),
new (winston.transports.Console)({
name : 'exception-console',
colorize : true,
level : 'debug',
showLevel : true,
json : false,
timestamp : timeStampFormat
})
]
});
|
cs |
코드의 양이 많아 보이지만 실무에서 사용할 수 있는 로그 설정을 만들기 위해 코드가 필요하다.
winston 모듈로 만드는 로거(Logger, 로그를 출력하는 객체를 말할 때 사용하는 용어)는 transports 라는 속성값으로 여러 개의 설정 정보를 전달할 수 있다.
이름이 info-file 인 설정 정보는 매일 새로운 파일에 로그를 기록하도록 설정하고 info 수준의 로그만 기록하도록 설정하였다. 로그 파일의 크기가 50MB 를 넘어가면 자동으로 새로운 파일로 생성되며 이 때 자동으로 분리되어 생성되는 파일의 개수는 최대 1000개까지 가능하다.
이런 정보들은 name, level, maxsize, maxFiles 등의 속성으로 설정한다.
콘솔 창에 출력되는 로그는 debug 수준까지 출력되도록 설정하고 컬러도 적용했다.
로그 수준(Log Level)에 대해 아는가?
로그 수준이란 어떤 정보까지 출력할 것인지 결정하는 것을 말한다. 예를 들어, 오류만 보여줄 것인지 아니면 사소한 정보까지 모두 보여 줄 것인지를 로그 수준으로 결정한다.
winston 모듈에서 사용하는 로그 수준은 다음처럼 단계별로 구성되며, 하위 수준은 상위 수준을 모두 포함하여 출력한다.
debug: 0 > info: 1 > notice: 2 > warning: 3 > error: 4 > crit: 5 > alert: 6 > emerg: 7
프로그램 별로 로그 파일의 이름을 다르게 기록해야한다.
그러나 앞에서 살펴 본 코드를 복사하여 다른 프로그램에서 사용하고 싶다면 파일 이름이나 설정부분을 약간씩 수정하면서 사용해야한다.
ch04_test15.js 파일은 winston 모듈 외에 winston-daily-rotate-file 모듈과 시간을 다룰 수 있는 moment 모듈도 함께 사용한다.
따라서 파일을 실행하기 전에 먼저 다음과 같이 명령 프롬프트에서 모듈을 설치해야한다.
npm install winston --save
npm install winston-daily-rotate-file--save
npm install moment --save
로그를 설정하는 코드 아래에는 output.txt 파일을 복사하면서 로그를 남기는 코드가 들어있다.
따라서 파일 탐색기를 열고 로그 파일이 저장될 log 폴더를 만든 후 ch04-test15.js 파일을 실행하면 다음과 같이 로그 파일이 만들어지는 것을 볼 수 있다.
winston 모듈은 로그를 파일로 저장하면서 동시에 화면에 출력되도록 설정할 수 잇다.
로그를 파일이나 화면에 출력하고 싶다면 logger 객체에 들어있는 debug(), info(), error() 같은 메소드를 호출하면 된다.
logger.debug() 메소드를 호출하면서 글자를 넣으면 다음과 같이 콘솔에 글자가 출력된다.
지금까지 노드의 기본 모듈 몇 가지, 이벤트와 파일을 다루는 방법, 로그를 남기는 방법에 대해서 알아보앗다.
노드가 다른 일반적인 언어에서 제공하는 기본 기능을 똑같이 사용할 수 있으면서 비동기 프로그래밍 방식으로 코드를 입력한다는 것을 살펴보았다. 그러나 아직까지는 노드로 서버를 만들 때 다른 언어에 비해 편리하다고 느낄 만한 내용은 아니다.
다음 장에서는 서버를 하나씩 만들어 갈 것이다.
'Theorem (정리) > node.js' 카테고리의 다른 글
(node.js) [Part.5] 웹 서버 만들기 - 간단한 웹 서버 만들기 (0) | 2020.12.07 |
---|---|
(node.js) Do it! 도전문제(1), (2) (0) | 2020.12.07 |
(node.js) [Part.4] 노드의 기본 기능 알아보기 - 파일 다루기 (0) | 2020.12.06 |
(node.js) [Part.4] 노드의 기본 기능 알아보기 - 이벤트 이해하기 (0) | 2020.12.03 |
(node.js) [Part.4] 노드의 기본 기능 알아보기 - 주소 문자열과 요청 파라미터 다루기 (0) | 2020.12.03 |