- 개발환경
# 개발환경 os : windows10 Pro 64bit tool : visual studio code npm : v6.9.0 nodejs : v10.16.0 |
- 목적
: 테스트 및 디버깅, 통계 등의 사용을 위해 로그를 남기기 위함
* 소스 디렉토리
# 소스 디렉토리 [ROOT] ㄴ app.js ㄴ [config] ㄴ dev.js ㄴ prod.js ㄴ logger.js ㄴ [routes] ㄴ router1.js ㄴ router2.js |
0. 사전준비
https://bogyum-uncle.tistory.com/69
1. morgan 서드파티 모듈 설치
2.1. /appRoot/config/logger.js
const winston = require('winston');
require('winston-daily-rotate-file');
require('date-utils');
const logger = winston.createLogger({
level: 'info', // log level
format: winston.format.json(),
transports: [
new winston.transports.DailyRotateFile({
filename : 'log/system.log', // log 폴더에 system.log 이름으로 저장
zippedArchive: true, // 압축여부
//handleExceptions: true,
//json: true,
//maxsize: 5242880, //5MB
//maxFiles: 5,
//colorize: false,
format: winston.format.printf(
info => `${new Date().toFormat('YYYY-MM-DD HH24:MI:SS')} [${info.level.toUpperCase()}] - ${info.message}`)
}),
//콘솔 출력
new winston.transports.Console({
// level: 'debug',
// handleExceptions: true,
// json: false,
colorize: true,
format: winston.format.printf(
info => `${new Date().toFormat('YYYY-MM-DD HH24:MI:SS')} [${info.level.toUpperCase()}] - ${info.message}`)
})
],
colorize: true,
// exitOnError: false,
humanReadableUnhandledException: true,
});
//운영중이지 않을 경우 콘솔에 출력 추가
// if (process.env.NODE_ENV !== 'production') {
// new winston.transports.Console({
// format: winston.format.printf(
// info => `${new Date().toFormat('YYYY-MM-DD HH24:MI:SS')} [${info.level.toUpperCase()}] - ${info.message}`)
// })
// }
module.exports = logger;
module.exports.stream = {
write: function(message, encoding){
logger.info(message);
}
}
2.2. /appRoot/app.js
//Express를 변수에 담기
var express = require("express");
//Express 호출 후 새로운 Express 애플리케이션을 변수(app)에 넣음
var app = express();
var http = require("http");
var path = require("path");
var logger = require('./config/logger');
app.use(require("morgan")("combined", {"stream": logger.stream}));
//path.resoleve : os에 따라 /public 혹은 \public 처럼 분리자가 다를 수 있지만 이 부분을 처리해 준다.
//__dirname : 현재 위치를 가리키는 node 전역변수
var publicPath = path.resolve(__dirname, "public");
app.use(express.static(publicPath));
/**
* Config 설정파일
*/
// let config;
// if(!process.env.NODE_ENV == 'dev'){
// config = require('./config/dev');
// }else if(process.env.NODE_ENV == 'prod'){
// config = require('./config/prod');
// }else{
// config = require('./config/dev');
// }
//console.log(config.id);
/**
* Routing 경로 설정
*
* app.js에서 생성된 데이터를 사용하기 위해서 require에서 app이란 객체를 전달
*/
app.use('/r1', require('./routes/router1')(app));
app.use('/r2', require('./routes/router2')(app));
app.use(function(request, response){
//4XX : 클라이언트 오류
response.statusCode = 404;
response.end("404 Error!");
});
app.listen(3000, function(){
console.log("Server Running : 3000....!");
});
: morgan 모듈 추가 및 winston과 morgan 컴바인
3. 확인
'LANGUAGE > NODEJS' 카테고리의 다른 글
[NODEJS] Mysql 연동 2/ 세팅, 테이블 생성 (0) | 2019.08.30 |
---|---|
[NODEJS] 환경변수 관리(dotenv) (0) | 2019.08.28 |
[NODEJS] express, routing (0) | 2019.08.26 |
[NODEJS] express , 개발, 운영환경 구분 (NODE_ENV) (0) | 2019.08.26 |
[NODEJS] Logger (Winston) (0) | 2019.08.26 |