【徹底解説】Node.jsでJSONをログ出力!console.logだけじゃない、3つの方法とサンプルコード
Node.jsでJSONオブジェクトの内容をログに記録する方法
console.logを使う
最も簡単な方法は、console.log
を使ってJSONオブジェクトを直接出力することです。
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
console.log(obj);
このコードを実行すると、以下の出力がコンソールに表示されます。
{ name: 'Taro', age: 30, city: 'Tokyo' }
しかし、console.log
で直接出力すると、JSONオブジェクトの構造が分かりにくくなってしまいます。そこで、以下のオプションを使用すると、見やすく整形して出力することができます。
-
util.inspectを使う
util
モジュールには、オブジェクトを検査して文字列に変換するinspect
関数があります。この関数を使うと、JSONオブジェクトの構造を保ちつつ、インデントや改行を挿入して出力することができます。const obj = { name: 'Taro', age: 30, city: 'Tokyo' }; const util = require('util'); console.log(util.inspect(obj));
{ "name": "Taro", "age": 30, "city": "Tokyo" }
ロギングライブラリを使う
より高度なログ出力を行いたい場合は、ロギングライブラリを使うと便利です。ロギングライブラリには、ログレベルの設定や、ログファイルへの出力など、様々な機能が備わっています。
代表的なロギングライブラリとして、以下のようなものがあります。
これらのライブラリは、それぞれ異なる特徴を持っているので、用途に合わせて使い分けることができます。
Node.jsでJSONオブジェクトの内容をログに記録するには、主に以下の方法があります。
それぞれの方法には、メリットとデメリットがあるので、状況に合わせて使い分けることが重要です。
console.logを使う
1 基本的な出力
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
console.log(obj);
{ name: 'Taro', age: 30, city: 'Tokyo' }
2 util.inspectを使う
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
const util = require('util');
console.log(util.inspect(obj));
{
"name": "Taro",
"age": 30,
"city": "Tokyo"
}
3 JSON.stringifyを使う
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
console.log(JSON.stringify(obj, null, 2));
{
"name": "Taro",
"age": 30,
"city": "Tokyo"
}
ロギングライブラリを使う
1 Winstonを使う
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
transports: [
new winston.transports.Console()
]
});
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
logger.info(obj);
[Info] { name: 'Taro', age: 30, city: 'Tokyo' }
2 Bunyanを使う
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'my-app'
});
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
logger.info(obj);
{"name":"my-app","level":30,"msg":{"name":"Taro","age":30,"city":"Tokyo"}}
3 Pinoを使う
const pino = require('pino');
const logger = pino();
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
logger.info(obj);
{"level":30,"msg":{"name":"Taro","age":30,"city":"Tokyo"}}
説明
上記のコード例では、それぞれの方法の基本的な使い方を示しています。ロギングライブラリの使い方については、各ライブラリのドキュメントを参照してください。
補足
- ログレベルの設定や、フォーマットのカスタマイズなど、より高度なログ出力を実現するには、各ライブラリの機能を活用することができます。
- ロギングライブラリを使用する場合は、ライブラリのインストールが必要になります。
npm install
コマンドを使ってインストールすることができます。
Node.jsでJSONオブジェクトをログに記録するその他の方法
ファイルへの出力
ログファイルを生成して、JSONオブジェクトの内容をファイルに記録することができます。これにより、過去のログを簡単に参照することができます。
const fs = require('fs');
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
const logFile = 'app.log';
fs.appendFile(logFile, JSON.stringify(obj) + '\n', (err) => {
if (err) {
console.error(err);
return;
}
console.log('ログをファイルに記録しました');
});
HTTPリクエストのペイロードとして送信
JSONオブジェクトをHTTPリクエストのペイロードとして送信することで、ログサーバーなどに記録することができます。
const http = require('http');
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
const options = {
hostname: 'localhost',
port: 3000,
path: '/logs',
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
};
const req = http.request(options, (res) => {
if (res.statusCode !== 200) {
console.error('ログの送信に失敗しました:', res.statusCode);
return;
}
console.log('ログを送信しました');
});
req.on('error', (err) => {
console.error('ログの送信に失敗しました:', err);
});
req.write(JSON.stringify(obj));
req.end();
カスタムロガーを実装
独自のロガーを実装することで、より柔軟なログ出力を実現することができます。
class MyLogger {
constructor(options) {
this.options = options;
}
log(level, message) {
const logMessage = `[${level}] ${message}`;
if (this.options.console) {
console.log(logMessage);
}
if (this.options.file) {
fs.appendFile(this.options.file, logMessage + '\n', (err) => {
if (err) {
console.error(err);
return;
}
});
}
}
}
const logger = new MyLogger({
console: true,
file: 'app.log'
});
const obj = {
name: 'Taro',
age: 30,
city: 'Tokyo'
};
logger.info(obj);
注意事項
上記の方法を使用する場合は、以下の点に注意する必要があります。
- ファイルへの出力やHTTPリクエストの送信を行う場合は、セキュリティ対策を適切に行う必要があります。
- カスタムロガーを実装する場合は、ロジックが複雑になりやすいため、十分なテストを行う必要があります。
Node.jsでJSONオブジェクトをログに記録するには、様々な方法があります。それぞれの方法には、メリットとデメリットがあるので、状況に合わせて使い分けることが重要です。
json node.js