일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Spring
- laravel
- 요리
- linux
- ReactJS
- jsp
- ubuntu
- Spring Batch
- Spring Boot
- java
- Gradle
- it
- AWS
- jenkins
- db
- Design Patterns
- springboot
- MySQL
- JVM
- Git
- devops
- redis
- 맛집
- tool
- Oracle
- elasticsearch
- Web Server
- javascript
- IntelliJ
- php
Archives
- Today
- Total
아무거나
log4js-node 로그 라이브러리 적용 본문
반응형
기본구성 또는 커스텀 라이브러리 구성중 선택하여 사용하면 된다.
- log4js-node 로그 라이브러리 적용
- 기본구성
- 설치
// https://github.com/log4js-node/log4js-node $ npm install log4js
- 샘플
const log4js = require("log4js"); const logger = log4js.getLogger(); log4js.configure({ appenders: { test: { type: "file", filename: "test.log" } }, categories: { default: { appenders: ["test"], level: "info" } }, }); app.get(`/test`, async (req, res) => { try { throw new Error(); } catch(error) { logger.error("Error:", error); } res.json({ success: true }); });
- 설치
- Custom Layout 구성
// ================================= lo4js Start const log4js = require("log4js"); const util = require("util"); // init // 색상 const getColor = (level) => { switch (level) { case "TRACE": return "\x1b[35m"; // Magenta case "DEBUG": return "\x1b[36m"; // Cyan case " INFO": return "\x1b[32m"; // Green case "ERROR": return "\x1b[31m"; // Red default: return "\x1b[0m"; // Reset } }; // 콘솔용 레이아웃 log4js.addLayout("customLayout", function (config) { return function (logEvent) { const logTime = logEvent.startTime.toISOString(); const level = logEvent.level.levelStr const levelColor = getColor(level); const threadId = logEvent.pid const functionName = logEvent.functionName; const logMessages = logEvent.data.map((data) => { if (typeof data === "object") { return util.inspect(data); } return data; }); return `${levelColor}${logTime} ${level} [Thread-${threadId}] [Request: uri= payload=] [${threadId}] [SERVICE_NAME=, TRACE_ID=, CLIENT_IP=, CLIENT_ID=, TOKEN=] ${functionName} - ${logMessages}`; }; }); // 파일용 레이아웃 (파일에 levelColor 사용시 깨진 문자가 출력되는 경우가 있어서 따로 레이아웃 구성) log4js.addLayout("customLayoutNoANSI", function (config) { return function (logEvent) { const logTime = logEvent.startTime.toISOString(); const level = logEvent.level.levelStr const threadId = logEvent.pid const functionName = logEvent.functionName; const logMessages = logEvent.data.map((data) => { if (typeof data === "object") { return util.inspect(data); } return data; }); return `${logTime} ${level} [Thread-${threadId}] [Request: uri= payload=] [${threadId}] [SERVICE_NAME=, TRACE_ID=, CLIENT_IP=, CLIENT_ID=, TOKEN=] ${functionName} - ${logMessages}`; }; }); log4js.configure({ appenders: { out: { type: "stdout", layout: { type: "customLayout" }, }, app: { type: "file", filename: "app_log/big-bro-daemon.log", maxLogSize: 512 /* byte */, backups: 3, layout: { type: "customLayoutNoANSI" }, }, /* Exception 처리가 필요한 경우 exceptions: { type: "file", filename: "app_log/big-bro-daemon.log", }, */ }, categories: { default: { appenders: ["out", "app"], level: "trace", enableCallStack: true, }, // trace 레벨 이상 기록(모두) // exceptions: { appenders: ["exceptions"], level: "error" }, // 예외 로그는 따로 처리 } }); // ================================= lo4js End const logger = log4js.getLogger(); module.exports = logger; app.get(`/test`, async (req, res) => { // 로그 출력: 2024-01-17T09:49:32.985Z INFO [Thread-44358] [Request: uri= payload=] [44358] [SERVICE_NAME=, TRACE_ID=, CLIENT_IP=, CLIENT_ID=, TOKEN=] - ============================== [TEST]111 logger.info("============================== [TEST]"); res.json({ success: true }); });
- 기본구성
반응형
'Javascript & HTML & CSS > NodeJS' 카테고리의 다른 글
NodeJS 를 사용하여 S3 에 File upload (파일 업로드) 기능 구현 (2) | 2022.12.03 |
---|---|
node-schedule 을 활용한 스케쥴러 구현 (0) | 2022.12.02 |
[NodeJS] CSV File 을 JSON 으로 변환 (CSV to JSON) (0) | 2022.12.02 |
Comments