この記事では、Koa ログ ミドルウェアのパッケージ化と開発方法について紹介します。これには一定の参考価値があります。必要な友人は参考にしていただければ幸いです。役に立つでしょう。
サーバーアプリケーションではログの記録は必須であり、プロジェクトプログラムが毎日何をしているのか、いつエラーが発生したか、どのようなエラーが発生したかなどを記録し、将来の利便性を高めるために使用する必要があります。サーバーの実行ステータスをリアルタイムで確認し、問題のシナリオを復元します。
ログの機能
サーバー プログラムの実行ステータスを記録し、開発者がエラーを迅速に捕捉し、障害を特定して解決できるようにします。
ログミドルウェア開発ツール log4js
node には組み込みのログモジュールがないため、サードパーティのモジュールを使用する必要があります。モジュールの使用: log4js インストール: npm i log4js - Slogsjs 公式ドキュメント
ログ分類:
アクセス ログ: プロジェクトへのクライアントのアクセス (主に http リクエスト) を記録します。 Web サイトのパフォーマンスとユーザー エクスペリエンスの改善と向上に役立てるために使用されます; アプリケーション ログ: プロジェクトの実行ステータスのクエリとバグの特定 (デバッグ、情報を含む) を容易にするために、異常な状況を含むプロジェクト マークと記録場所によって出力されるログ、警告やエラーなどのレベル)。
#ログ レベルログ レベルが設定されている場合、設定されたログ レベルよりも高いレベルのログ情報のみを記録できます。ログ レベル図export default (ctx, message, commonInfo) => { const { method, // 请求方法 url, // 请求链接 host, // 发送请求的客户端的host headers // 请求中的headers } = ctx.request; const client = { method, url, host, message, referer: headers['referer'], // 请求的源地址 userAgent: headers['user-agent'] // 客户端信息 设备及浏览器信息 } return JSON.stringify(Object.assign(commonInfo, client)); }
- ユニバーサル取得設定された log4js オブジェクトを設定します (logger.js)
-
const getLog = ({env, appLogLevel, dir}, name) => { //log4js基本说明配置项,可自定义设置键名,用于categories.appenders自定义选取 let appenders = { // 自定义配置项1 cheese: { type: 'dateFile', //输出日志类型 filename: `${dir}/task`, //输出日志路径 pattern: '-yyyy-MM-dd.log', //日志文件后缀名(task-2019-03-08.log) alwaysIncludePattern: true } } // 如果为开发环境配置在控制台上打印信息 if (env === "dev" || env === "local" || env === "development") { // 自定义配置项2 appenders.out = { type: "stdout" } } // log4js配置 let config = { appenders, //作为getLogger方法获取log对象的键名,default为默认使用 categories: { default: { appenders: Object.keys(appenders), // 取appenders中的说有配置项 level: appLogLevel } } } log4js.configure(config) //使用配置项 return log4js.getLogger(name)// 这个cheese参数值先会在categories中找,找不到就会默认使用default对应的appenders,信息会输出到yyyyMMdd-out.log }
- ログ ログ ミドルウェア開発 ( logger.js)
-
export default (options) => { const contextLogger = {}; //后期赋值给ctx.log const { env, appLogLevel, dir, serverIp, projectName } = Object.assign({}, baseInfo, options || {}); // 取出通用配置(项目名,服务器请求IP) const commonInfo = { projectName, serverIp }; const logger = getLog({env, appLogLevel, dir},'cheese'); return async (ctx, next) => { const start = Date.now(); //日志记录开始时间 // 将日志类型赋值ctx.log,后期中间件特殊位置需要记录日志,可直接使用ctx.log.error(err)记录不同类型日志 methods.forEach((method, i) => { contextLogger[method] = (message) => { logger[method](logInfo(ctx, message, commonInfo)) } }) ctx.log = contextLogger; // 执行中间件 await next() // 结束时间 const responseTime = Date.now() - start; // 将执行时间记录logger.info logger.info(logInfo(ctx, { responseTime: `响应时间为${responseTime/1000}s` }, commonInfo) ) } }
- ミドルウェアの使用法 (app.js)
-
import Log from '../log/logger'; ... app.use(Log({ env: app.env, // koa 提供的环境变量 projectName: 'back-API', appLogLevel: 'debug', dir: 'logs', serverIp: ip.address() }))
- その他の特別な場所ではログの使用法が必要です
-
ctx.log.error(err.stack); //记录错误日志 ctx.log.info(err.stack); // 记录信息日志 ctx.log.warn(err.stack); // 记录警告日志 ...
- スクリーンショットの実行
log4js は基本的な構成とプロセス分析を使用します
設定項目を設定します,
#// 配置项形式 { appenders:{ [自定义key]:{} }, categories:{ } } // 配置 config: { appenders:{ // 每一个属性可以看作为一个配置模块 out: { type: 'dateFile', //输出日志类型 filename: `log/task`, //输出日志路径 pattern: '-yyyy-MM-dd.log', //日志文件后缀名(task-2019-03-08.log) ...//具体配置看官网 }, error: { type: 'dateFile', filename: 'log/error', pattern: '-yyyy-MM-dd.log'', "alwaysIncludePattern": true }, stdout: { type: 'stdout' }, //在控制台上打印信息 }, // 通过categories来取出给log4js按需配置,返回配置后的log4js对象,每个属性配置相当于一个不同的log4js配置对象入口;default为默认入口(getLogger()找不到入口时默认使用default) categories:{ // 配置默认入口,使用appenders中的'stdout','out'配置模块,记录trace以上等级日志 default: { appenders: ['stdout','out'], level: 'trace' }, // 配置error门入口,使用appenders中的'stdout','err'配置模块,记录error以上等级日志 error : {appenders: ['err'], level: 'error'} } }
- let logger_out = log4js.getLogger('app');
- log4js.getLogger('app') を使用して、特定の log4js オブジェクト プロセスを検索します。まず、app パラメーター値に基づいてカテゴリで検索します。 、 app がないことがわかり、デフォルトで設定にデフォルトに対応するアペンダが使用されます。つまり、情報は log/task-yyyy-mm-dd.log ファイルに出力され、コンソールへの出力
Use let logger_out = log4js.getLogger('error');
error パラメータ値に基づいてカテゴリを検索し、エラー設定がないことを確認します。エラーに対応するアペンダが設定に使用されます。つまり、情報は log/error-yyyy- mm-dd.log ファイルに出力されます。エラー設定項目アペンダでは stdout モジュールが使用されないため、コンソールに情報は出力されません
ログをデータベースに保存する必要があるかどうかは後で検討します ログ記録を永久に保存することは不可能であることを考慮して、ログの永続化を実行します1 か月前や 1 週間前のログを保存する必要はないかもしれませんが、期限切れのログファイルを定期的に自動的に削除する設定を開発する必要があります(データベースのログレコードを取得)
以上がKoaログミドルウェアのカプセル化と開発方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい
