この記事では、Winston ライブラリを使用して Node.js で単純なログ機能を構築する方法を紹介します。皆さんのお役に立てれば幸いです。
Winston は、強力で柔軟な Node.js
オープン ソース ログ ライブラリの 1 つです。理論的には、Winston はあらゆる情報を記録できるロガーです。これはカスタマイズが簡単な非常に直感的なツールです。その背後にあるロジックは、コードを数行変更することで調整できます。これにより、データベースやファイルなどの永続的なストレージの場所へのログ記録がシンプルかつ簡単になります。 [推奨学習: "nodejs チュートリアル "]
Winston 次の機能を提供します:
演習コードは、ログ機能をプロジェクトpretender-serviceに追加し、依存関係をインストールします:
npm install winston --save
次のステップは、logger
を初期化することです。プロジェクトにはすでに logger.js
ファイルがあるため、ここに別の winstonLogger.js
を作成します。コードは次のとおりです。
const { createLogger, format, transports } = require("winston"); module.exports = createLogger({ transports: [ new transports.File({ filename: "logs/server.log", level: "info", format: format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf( (info) => `${info.level}: ${[info.timestamp]}: ${info.message}` ) ), }), ], });
合格 winston
ライブラリの createLogger
関数を呼び出して、ロガーを初期化します。 transports
オブジェクトでは、ログをファイルに保存するためのファイル名を指定できます。デフォルトでは、ログはフォーマットされておらず、ログ メッセージとレベルの 2 つのパラメータを持つ JSON 文字列として出力されます。
次に、前の logger
を変更し、winston
ロガーを追加します。具体的な変更方法については、コードを参照してください。使用方法は次のとおりです:
const winlogger = require("./winstonLogger"); winlogger.info("日志内容");
プログラムの実行後、対応するログ ファイルがルート ディレクトリに生成されます logs/server.log
ログ レベルを変更し、logger
を変更し、console.error
モードで winston
のみを使用します:
データベース接続エラー メッセージを記録します。上記の情報はデモンストレーションのみを目的としています。
winston
複数の transport
を設定できるようにします。winstonLogger.js
の createLogger# を変更します ##関数は次のとおりです。
const { createLogger, format, transports } = require("winston"); module.exports = createLogger({ format: format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`) ), transports: [ new transports.File({ filename: "logs/info.log", level: "info", format: format.combine( format.printf((i) => i.level === "info" ? `${i.level}: ${i.timestamp} ${i.message}` : "" ) ), }), new transports.File({ filename: "logs/error.log", level: "error", }), ], });
logger# にあるため、error.log
および info.log
ファイルが表示されます。 ##info
は に設定されていないため、info.log
の内容は空で、error.log
の内容は上記と同じです。 複数のロガー
複数の ロガー
を設定できるようにします。実際のプロジェクトでは、モジュールごとにロガーを作成できますlogger
、次のコードはユーザー ロガーとログイン検証レコーダーを作成します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">const { createLogger, format, transports } = require("winston");
const customFormat = format.combine(
format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }),
format.align(),
format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`)
);
const globalLogger = createLogger({
format: customFormat,
transports: [
new transports.File({
filename: "logs/info.log",
level: "info",
format: format.combine(
format.printf((i) =>
i.level === "info"
? `${i.level}: ${i.timestamp} ${i.message}`
: ""
)
),
}),
new transports.File({
filename: "logs/error.log",
level: "error",
}),
],
});
const authLogger = createLogger({
transports: [
new transports.File({
filename: "logs/authLog.log",
format: customFormat,
}),
],
});
module.exports = {
globalLogger: globalLogger,
authLogger: authLogger,
};</pre><div class="contentsignin">ログイン後にコピー</div></div>
変更されたコードは、グローバル ロガー
と認証ロガーauthLogger
を作成します。修正 logger.js
: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">const { globalLogger } = require("./winstonLogger");
globalLogger.error(message);</pre><div class="contentsignin">ログイン後にコピー</div></div>
日次ローリング ログ ファイル
関連の依存関係ライブラリをインストールする必要があります。 npm install winston-daily-rotate-file --save
ファイルを更新します。 現時点では、 の基本的な使用ガイドが紹介されており、基本的に日常のプロジェクトのニーズを満たすことができます。 プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 ! 以上がNode.js+Winston ライブラリがシンプルなロギング関数を構築する方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。const { createLogger, format, transports } = require("winston");
require("winston-daily-rotate-file");
const customFormat = format.combine(
format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }),
format.align(),
format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`)
);
const defaultOptions = {
format: customFormat,
datePattern: "YYYY-MM-DD",
zippedArchive: true,
maxSize: "20m",
maxFiles: "14d",
};
const globalLogger = createLogger({
format: customFormat,
transports: [
new transports.DailyRotateFile({
filename: "logs/info-%DATE%.log",
level: "info",
...defaultOptions,
}),
new transports.DailyRotateFile({
filename: "logs/error-%DATE%.log",
level: "error",
...defaultOptions,
}),
],
});
const authLogger = createLogger({
transports: [
new transports.DailyRotateFile({
filename: "logs/authLog-%DATE%.log",
...defaultOptions,
}),
],
});
module.exports = {
globalLogger: globalLogger,
authLogger: authLogger,
};