Node.js+Winston ライブラリがシンプルなロギング関数を構築する方法の簡単な分析

青灯夜游
リリース: 2021-10-20 10:01:21
転載
1697 人が閲覧しました

この記事では、Winston ライブラリを使用して Node.js で単純なログ機能を構築する方法を紹介します。皆さんのお役に立てれば幸いです。

Node.js+Winston ライブラリがシンプルなロギング関数を構築する方法の簡単な分析

Winston は、強力で柔軟な Node.js オープン ソース ログ ライブラリの 1 つです。理論的には、Winston はあらゆる情報を記録できるロガーです。これはカスタマイズが簡単な非常に直感的なツールです。その背後にあるロジックは、コードを数行変更することで調整できます。これにより、データベースやファイルなどの永続的なストレージの場所へのログ記録がシンプルかつ簡単になります。 [推奨学習: "nodejs チュートリアル "]

Winston 次の機能を提供します:

  • ロギングの集中制御とtime: 1 か所のコードを次のように変更します。
  • ログの送信先を制御する: ログを複数の宛先に同期的に保存します (Elasticsearch、MongoDB、Postgres など)。
  • カスタマイズされたログ形式: タイムスタンプ、カラー ログ レベル、JSON 形式などのプレフィックス付き。

winston practice

演習コードは、ログ機能をプロジェクト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

Node.js+Winston ライブラリがシンプルなロギング関数を構築する方法の簡単な分析

ログ レベルを変更し、logger を変更し、console.error モードで winston のみを使用します:

Node.js+Winston ライブラリがシンプルなロギング関数を構築する方法の簡単な分析

データベース接続エラー メッセージを記録します。上記の情報はデモンストレーションのみを目的としています。

複数のトランスポート

winston 複数の transport を設定できるようにします。winstonLogger.jscreateLogger# を変更します ##関数は次のとおりです。

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 の内容は上記と同じです。 複数のロガー

winston

複数の ロガー を設定できるようにします。実際のプロジェクトでは、モジュールごとにロガーを作成できますlogger 、次のコードはユーザー ロガーとログイン検証レコーダーを作成します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">const { createLogger, format, transports } = require(&quot;winston&quot;); const customFormat = format.combine( format.timestamp({ format: &quot;MMM-DD-YYYY HH:mm:ss&quot; }), format.align(), format.printf((i) =&gt; `${i.level}: ${[i.timestamp]}: ${i.message}`) ); const globalLogger = createLogger({ format: customFormat, transports: [ new transports.File({ filename: &quot;logs/info.log&quot;, level: &quot;info&quot;, format: format.combine( format.printf((i) =&gt; i.level === &quot;info&quot; ? `${i.level}: ${i.timestamp} ${i.message}` : &quot;&quot; ) ), }), new transports.File({ filename: &quot;logs/error.log&quot;, level: &quot;error&quot;, }), ], }); const authLogger = createLogger({ transports: [ new transports.File({ filename: &quot;logs/authLog.log&quot;, format: customFormat, }), ], }); module.exports = { globalLogger: globalLogger, authLogger: authLogger, };</pre><div class="contentsignin">ログイン後にコピー</div></div>変更されたコードは、グローバル ロガー

globalLogger

と認証ロガーauthLoggerを作成します。修正 logger.js: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">const { globalLogger } = require(&quot;./winstonLogger&quot;); globalLogger.error(message);</pre><div class="contentsignin">ログイン後にコピー</div></div>日次ローリング ログ ファイル

先ほど紹介したベスト プラクティスで述べたように、特定の条件に従ってログ ファイルを分割します。通常は日付とサイズに従って、ログを保存する日数を設定します。これらの要件を実現するには、

Winston

関連の依存関係ライブラリをインストールする必要があります。

インストールが完了したら、次のコードを使用して

winstonLogger.js

ファイルを更新します。

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,
};
ログイン後にコピー
プロジェクトを実行すると、ログ ファイルが表示されます。

Node.js+Winston ライブラリがシンプルなロギング関数を構築する方法の簡単な分析現時点では、

Winston

の基本的な使用ガイドが紹介されており、基本的に日常のプロジェクトのニーズを満たすことができます。

プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !

以上がNode.js+Winston ライブラリがシンプルなロギング関数を構築する方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート