더북(TheBook)

12.2.1 fs 모듈을 이용한 파일 로그 만들기

Node.js에서는 파일 처리와 관련된 기능을 fs 모듈로 제공합니다. fs 모듈에서 많은 파일 처리 기능을 제공하지만, 쓰기용 스트림 생성 함수(createWriteStream)와 쓰기용 스트림을 이용한 파일 저장 기능(write)만 활용해 로그 파일을 저장하겠습니다.

자세한 파일 처리 내용은 Node.js 공식 매뉴얼에서 File System(https://nodejs.org/dist/latest-v6.x/docs/api/fs.html) 부분을 참고하세요.

코드 12-4 로그 파일 저장

예제 파일 : microservice_logs_file.js

‘use strict’;

const cluster = require(‘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”]);

    <span class="cd2"> <span class="c1">// ➋ 스트림 생성</span>
    <span class="k">this</span><span class="p">.</span><span class="nx">writestream</span> <span class="o">=</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">createWriteStream</span><span class="p">(</span><span class="s1">'./log.txt'</span><span class="p">,</span> <span class="p">{</span> <span class="nx">flags</span><span class="o">:</span> <span class="s1">'a'</span> <span class="p">});</span></span>
    <span class="k">this</span><span class="p">.</span><span class="nx">connectToDistributor</span><span class="p">(</span><span class="s2">"127.0.0.1"</span><span class="p">,</span> <span class="mi">9000</span><span class="p">,</span> <span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
        <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"Distributor Notification"</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
    <span class="p">});</span>
<span class="p">}</span>

<span class="nx">onRead</span><span class="p">(</span><span class="nx">socket</span><span class="p">,</span> <span class="nx">data</span><span class="p">)</span> <span class="p">{</span>
    <span class="kr">const</span> <span class="nx">sz</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">().</span><span class="nx">toLocaleString</span><span class="p">()</span> <span class="o">+</span> <span class="s1">'\t'</span> <span class="o">+</span> <span class="nx">socket</span><span class="p">.</span><span class="nx">remoteAddress</span> <span class="o">+</span> <span class="s1">'\t'</span> <span class="o">+</span>
               <span class="nx">socket</span><span class="p">.</span><span class="nx">remotePort</span> <span class="o">+</span> <span class="s1">'\t'</span> <span class="o">+</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'\n'</span><span class="p">;</span>
    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">sz</span><span class="p">);</span>
    <span class="cd2"><span class="k">this</span><span class="p">.</span><span class="nx">writestream</span><span class="p">.</span><span class="nx">write</span><span class="p">(</span><span class="nx">sz</span><span class="p">);</span> <span class="c1">// ➌ 로그 파일 저장</span>
<span class="p">}</span></span>

} ……

fs 모듈을 로드하고(), createWriteStream 함수를 이용해 log.txt 파일을 생성하고 append 모드로 스트림을 생성합니다(). 로그가 입력되면 스트림을 이용해 로그를 파일에 저장합니다().

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.