Node.js ログ ファイル出力
Node.jsでログをファイルに出力する
Node.jsでは、通常、デバッグやエラーメッセージをコンソールに出力するためにconsole.log()
などの関数が使用されます。しかし、ログをファイルに出力することで、より永続的で管理しやすい記録を残すことができます。
方法1: fs
モジュールを使用する
const fs = require('fs');
// ログファイルを作成または開く
const logFile = 'my-log.txt';
const stream = fs.createWriteStream(logFile, { flags: 'a' }); // 'a'は追記モード
// ログをファイルに出力する
stream.write('This is a log message\n');
stream.end();
end
メソッドでストリームを終了し、ファイルを閉じます。write
メソッドでログメッセージをストリームに書き込みます。createWriteStream
関数でログファイルを作成または開き、書き込みストリームを取得します。fs
モジュールはファイルシステム操作のためのものです。
方法2:サードパーティライブラリを使用する
多くのサードパーティライブラリがログ機能を提供しています。例えば、winston
ライブラリは、柔軟性が高く、さまざまなログフォーマットやトランスポート(出力方法)をサポートしています。
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: 'error.lo g', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
new winston.transports.Console({ format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
) })
]
});
// ログを記録する
logger.info('Info message');
logger.error('Error message');
format
オプションでログのフォーマットをカスタマイズできます。level
オプションでログのレベル(debug、info、warn、errorなど)を指定できます。winston.transports.Console
はコンソールに出力します。winston.transports.File
はファイルにログを出力します。
const fs = require('fs');
// ログファイルを作成または開く
const logFile = 'my-log.txt';
const stream = fs.createWriteStream(logFile, { flags: 'a' }); // 'a'は追記モード
// ログをファイルに出力する
stream.write('This is a log message\n');
stream.end();
解説
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: 'error.lo g', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
new winston.transports.Console({ format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
) })
]
});
// ログを記録する
logger.info('Info message');
logger.error('Error message');
logger.info
やlogger.error
などのメソッドを使用してログを記録します。transports
オプションでログの出力先を指定します。createLogger
関数でロガーを作成します。winston
ライブラリはログ機能を提供するサードパーティライブラリです。
pinoライブラリを使用する
pino
は高速で軽量なログライブラリです。柔軟性が高く、さまざまなログフォーマットやトランスポートをサポートしています。
const pino = require('pino');
const logger = pino({
transport: {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: true
}
}
});
// ログを記録する
logger.info('Info message');
logger.error('Error message');
log4jsライブラリを使用する
log4js
はJavaのログライブラリであるLog4jをNode.jsに移植したものです。柔軟性が高く、さまざまなログフォーマットやトランスポートをサポートしています。
const log4js = require('log4js');
log4js.configure({
appenders: {
file: { type: 'file', filename: 'my-log.txt' }
},
categories: {
default: { appenders: ['file'], level: 'info' }
}
});
const logger = log4js.getLogger();
// ログを記録する
logger.info('Info message');
logger.error('Error message');
bunyanライブラリを使用する
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'my-app',
streams: [
{
level: 'info',
stream: process.stdout
},
{
level: 'error',
stream: process.stderr
},
{
level: 'info',
type: 'rotating-file',
path: 'my-app.log',
period: '1d',
count: 3
}
]
});
// ログを記録する
logger.info('Info message');
logger.error('Error message');
node.js logging console.log