Node.js 앱에 대한 로깅
19306 단어 webdevnodebackendjavascript
소개
이 기사에서는 Node.js 애플리케이션의 로그를 Winston 라이브러리를 사용하여 구문 분석 가능하게 저장하는 방법을 배웁니다. 로깅이 무엇이고 왜 중요한지 살펴보겠습니다.
목차
로깅이란 무엇입니까?
로깅은 시스템 분석을 목적으로 애플리케이션 이벤트 및 데이터를 로그 파일 또는 기타 소스에 기록하는 프로세스입니다.
로그는 개발자가 오류를 찾고 버그의 원인을 추적하여 수정하는 데 도움이 됩니다. Node.js에서는 애플리케이션 로그를 구조화하는 것이 중요합니다. 개발 단계에 있을 때
console.log
를 사용하여 문제를 찾고 필요한 정보를 얻을 수 있습니다.그러나 일단 애플리케이션이 생산되면 더 이상
console.log
를 사용할 수 없습니다.Node.js 애플리케이션에서 winston 사용
node.js 애플리케이션이 있다고 가정합니다. 이제 프로젝트에 winston & winston-transport를 설치하려면 다음 명령을 실행하세요.
npm install winston
npm install winston-transport
이제 우리의 목표는 응용 프로그램의 모든
console
메시지를 winston 로거로 교체하는 것입니다. 따라서 예를 들어 node.js 애플리케이션에 이러한 세 가지 이벤트 로그가 있는 경우 winston 라이브러리를 사용하여 구문 분석 가능하게 저장하려는 경우입니다.connsole.warn('Got mutiple elements with same id');
console.error('Login Failed. Invalid ID');
console.info('Events posted successfully.');
Node.js 앱에서 Winston 구성
winston을 구성하고 구문 분석 가능한 로그를 보낼 루트 디렉터리에 'logger' 폴더를 만듭니다.
이제
logger/index.js
에 다음 코드를 추가하십시오.const winston = require("winston");
const { combine, timestamp, label, printf } = winston.format;
const Transport = require("winston-transport");
var axios = require("axios");
const myFormat = printf(({ level, message, label, timestamp }) => {
return JSON.stringify({
timestamp: timestamp,
level: level,
message: message,
});
});
class CustomTransport extends Transport {
constructor(opts) {
super(opts);
}
log(info, callback) {
console.info(info);
var data = JSON.stringify([info]);
var config = {
method: "post",
url: `https://demo.parseable.io/api/v1/logstream/${streamName}`,
headers: {
"X-P-META-Tag": "Owner",
"X-P-META-Tag": "Host",
"X-P-META-Tag": "Host.owner",
Authorization: `Basic ${key}`,
"Content-Type": "application/json",
},
data: data,
};
axios(config)
.then(function (response) {
console.log(response.data);
})
.catch(function (error) {
console.log(error);
});
callback();
}
}
const devLogger = () => {
const transport = new CustomTransport({});
return winston.createLogger({
level: "debug",
format: combine(label(), timestamp(), myFormat),
transports: [transport],
});
};
let logger = null;
if (process.env.NODE_ENV !== "production") {
logger = devLogger()
}
module.exports = logger;
여기서 우리는 node.js 애플리케이션에서 winston을 구성하고 로그를 구문 분석 가능하도록 보냅니다.
더 나은 이해를 위해 이 코드를 부분적으로 논의해 봅시다.
Initializing winston logger instance
const devLogger = () => { const transport = new CustomTransport({}); return winston.createLogger({ level: "debug", format: combine(label(), timestamp(), myFormat), transports: [transport], }); };
위의 스니펫에는 Winston 로거 인스턴스의 초기화가 포함되어 있습니다. 여기에서 npm 로그 수준 표준을 사용하여 이 특정 로거 인스턴스에 대한 로그 수준, 로그가 저장되는 형식 및
that specifies where the logs data will go. In our case we will send it to the parseable. > **Setting custom format of the log data** > >> ```js const myFormat = printf(({ level, message, label, timestamp }) => { return JSON.stringify({ timestamp: timestamp, level: level, message: message, }); });
위의 스니펫은 저장될 로그 데이터의 형식을 지정합니다.
Sending the log data to parseable
class CustomTransport extends Transport { constructor(opts) { super(opts); } log(info, callback) { console.info(info); var data = JSON.stringify([info]); var config = { method: "post", url: `https://demo.parseable.io/api/v1/logstream/${streamName}`, headers: { "X-P-META-Tag": "Owner", "X-P-META-Tag": "Host", "X-P-META-Tag": "Host.owner", Authorization: `Basic ${key}`, "Content-Type": "application/json", }, data: data, }; axios(config) .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); }); callback(); } }
위의 스니펫은 로그 데이터를 구문 분석 가능 항목으로 보내는 역할을 합니다. 여기streamName
는 구문 분석 가능에서 생성한 로그 스트림입니다.key
는 구문 분석 가능 항목에 액세스하기 위한 인증 키입니다.
calling the logger function
let logger = null; if (process.env.NODE_ENV !== "production") { logger = devLogger() }
개발 단계에서 로그를 구문 분석 가능하도록 저장하고 싶지 않을 수 있습니다. 그런 다음 콘솔에서 로그를 확인하여 테스트하고 프로덕션 모드에서 구문 분석 가능하도록 보낼 수 있습니다. 위의 스니펫은 요구 사항에 따라 로거 기능을 호출합니다. 이 조건부 호출을 원하지 않는 경우 함수를 직접 호출할 수도 있습니다.
그런 다음 응용 프로그램에서logger
대신console
를 사용할 수 있습니다.
const logger = require('./logger') logger.warn('Got mutiple elements with same id') logger.error('Login Failed. Invalid ID') logger.info('Events posted successfully.')
결론
만세!!🥳🥳🥳
node.js 애플리케이션과 parseable을 성공적으로 통합했습니다. 이제 애플리케이션을 실행할 수 있으며logger
로 대체한 모든 이벤트가 구문 분석 가능하도록 게시되고 이전에 생성한logstream
를 체크인할 수 있습니다.
Reference
이 문제에 관하여(Node.js 앱에 대한 로깅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/parseable/logging-for-your-nodejs-app-28jd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)