sails.config.log
Sailsアプリのロガーの設定です。これらの設定は、アプリのコード内でsails.log.debug()
やsails.log.error()
のような関数を呼び出すとき、およびSailsが自動的にコンソールにメッセージをログ出力するときに適用されます。ここでのオプションは、慣例的にconfig/log.js設定ファイルで指定されます。
プロパティ | 型 | デフォルト | 詳細 |
---|---|---|---|
level | 'info' |
アプリのログに表示する詳細レベルを設定します。 | |
inspect | true |
falseに設定すると、キャプテンズログによるログ処理が無効になり、代わりに設定されたカスタムロガーにログが渡されます。 | |
custom | undefined |
カスタムロガーのインスタンス(Winstonなど)への参照を指定します。提供された場合、コンソールに直接ログ出力する代わりに、カスタムロガーによって公開された関数が呼び出され、Sailsからのログメッセージが渡されます。詳細については、captains-logを参照してください。 |
カスタムロガーを設定すると便利な場合があります。特に、規制遵守や組織の要件(たとえば、会社が他のアプリで特定のロガーを使用している場合など)に対応する場合です。Sailsのコンテキストでは、カスタムロガーを設定することで、フレームワークによって自動的に作成されたすべてのログメッセージをインターセプトすることもできます。これは、エラーや警告に関するメール通知を設定するのに便利です。
これらの種類の通知が必要な場合でも、カスタムロガーを使用する必要はありません!実際、エラーが発生したときに自動化されたSlack、SMS、またはメール通知などの機能を実装するには、通常、より簡単な方法があります。1つのアプローチは、アプリのデフォルトのサーバーエラー応答(
responses/serverError.js
)をカスタマイズすることです。もう1つの一般的なオプションは、Papertrailのような製品や、AppDynamicsやNewRelicのようなモニタリングサービスを使用することです。
以下は、コンソールトランスポートとファイルトランスポートの両方を定義する、カスタムロガーとしてWinstonを設定する例です。まず、プロジェクトの依存関係としてwinston
を追加します。
npm install winston
次に、config/log.js
の内容を次のように置き換えます。
// config/log.js
const { version } = require('../package');
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, colorize, label, printf, align } = format;
const { SPLAT } = require('triple-beam');
const { isObject } = require('lodash');
function formatObject(param) {
if (isObject(param)) {
return JSON.stringify(param);
}
return param;
}
// Ignore log messages if they have { private: true }
const all = format((info) => {
const splat = info[SPLAT] || [];
const message = formatObject(info.message);
const rest = splat.map(formatObject).join(' ');
info.message = `${message} ${rest}`;
return info;
});
const customLogger = createLogger({
format: combine(
all(),
label({ label: version }),
timestamp(),
colorize(),
align(),
printf(info => `${info.timestamp} [${info.label}] ${info.level}: ${formatObject(info.message)}`)
),
transports: [new transports.Console()]
});
module.exports.log = {
custom: customLogger,
inspect: false
// level: 'info'
};