더북(TheBook)

지금은 단순히 매번 로그가 입력될 때마다 같은 파일에 저장하도록 구현했지만 날짜별, 시간별로 다른 파일에 저장하거나 일정한 간격으로 로그를 모아서 파일에 저장하는 것이 더욱 효율적입니다. 각자의 시스템에 맞는 로그 저장 방식을 설계하세요.

전체 코드는 다음과 같습니다.

코드 12-5 파일 저장 로그 관리 마이크로서비스 전체 코드

예제 파일 : microservice_logs_file.js

'use strict';

const cluster = require('cluster');  // cluster 모듈 로드
const fs = require('fs');            // fs 모듈 로드

class logs extends require('./server.js') {
    constructor() {
        super("logs"
            , process.argv[2] ? Number(process.argv[2]) : 9040 , ["POST/logs"] );

        // writestream 생성
        this.writestream = fs.createWriteStream('./log.txt', { flags: 'a' });
        this.connectToDistributor("127.0.0.1", 9000, (data) => {
            console.log("Distributor Notification", data);
        });
    }

    onRead(socket, data) {
        const sz = new Date().toLocaleString() + '\t' + socket.remoteAddress + '\t' +
                   socket.remotePort + '\t' + JSON.stringify(data) + '\n';
        console.log(sz);
        this.writestream.write(sz);  // 로그 파일 저장
    }
}

if (cluster.isMaster) {  // 자식 프로세스 실행
    cluster.fork();

    // Exit 이벤트가 발생하면 새로운 자식 프로세스 실행
    cluster.on('exit', (worker, code, signal) => {
        console.log(`worker ${worker.process.pid} died`);
        cluster.fork();
    });
} else {
    new logs();
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.