この記事では、ミニ プログラムのログ システムについて説明し、ミニ プログラム ログ システムの使用方法、ミニ プログラム ログ システムの構築方法を紹介します。
通常、ログ システムは開発の重要な部分です。
しかし、さまざまな理由により、フロントエンド開発でログの印刷やレポート システムを使用することは一般的ではありません。
しかし、特定のケースでは、ログ システムが驚異的に機能することがよくあります。
たとえば、チャット システムで次の問題が発生しました。
- 音聲通話中にユーザーに音が聞こえない
- インスタント メッセージングでは、ユーザーのフィードバックが一部のシナリオ、メッセージを送信できません
- インスタント メッセージングで、A が B のメッセージに返信するときに、ダイアログ ボックスが表示されないことがあります。
- インスタント メッセージングで、A が 2 つのメッセージを B に 1 回で送信した後、行、B は 2 番目のメッセージを受信できません。 ヒント
- インスタント メッセージングでは、音聲メッセージを送信すると、ユーザーは音聲メッセージが送信されたように見えますが、実際には録音がまだ続いています。この時、ユーザーはネットワークが止まっているのではないかと思い、最終的に自分や他の人の會話の音聲が録音されていることに気づきました(
)が、上記のエラーはバックグラウンドインターフェースには反映されませんでした。一部のユーザーの攜帯電話モデルに問題があるため、問題を特定するのは困難です。
ここに log
があれば、問題のあるコードをすぐに見つけることができます。
コードの問題ではない場合は、システムの問題ではないことをユーザーに自信を持って答えることができます。
ミニ プログラム ログ システムの使用方法
ミニ プログラム側には、2 つのミニ プログラム ログ インターフェイスが用意されています。
- LogManager ( 通常のログ )
- RealtimeLogManager ( リアルタイム ログ )
公式は、両者の具體的な違いについては紹介していませんでした。これは、Realtime のリアルタイム性を強調しているだけです。
私の意見では、これらの最大の違いは次のとおりです。
-
LogManager
はユーザーに安心感を與えます。LogManager
は問題があるからです。ユーザーによって手動で報告されます。 -
RealtimeLogManager
は開発者にとってよりフレンドリーで、ユーザーが知らないうちに問題情報を収集し、ユーザーが気づかないうちに問題を修正できます。
LogManager
アプレットによって提供される Log
ログ インターフェイス (wx.getLogManager を通じて) ( )
インスタンスを取得します。
注:
- ログ コンテンツは最大 5M まで保存できます。5M を超えると、古いログ コンテンツは削除されます。
-
ミニ プログラムの場合、ユーザーは
button
コンポーネントのopen-type="フィードバック"
を使用して、印刷されたログをアップロードできます。 -
ミニ ゲーム の場合、ユーザーは
wx.createFeedbackButton
を使用して、印刷されたログをアップロードするボタンを作成できます。 - 開発者は、ミニ プログラム管理バックエンドの左側のメニュー フィードバック管理 ページから、関連する印刷ログを表示できます。
LogManager インスタンスの作成
ログ インスタンスは、wx.getLogManager()
を通じて取得できます。
パラメーターを括弧 { level: 0 | 1 }
で渡すことで、wx## の下の関數である
Page のライフサイクル関數を記述するかどうかを決定できます。 # 名前空間ログ。
- 0: 書きます
- 1: 書かない
https://github.com/Kujiale-Mobile/Painter
LogManager インスタンスを使用します #const logger = wx.getLogManager({ level: 0 })
logger.log({str: 'hello world'}, 'basic log', 100, [1, 2, 3])
logger.info({str: 'hello world'}, 'info log', 100, [1, 2, 3])
logger.debug({str: 'hello world'}, 'debug log', 100, [1, 2, 3])
logger.warn({str: 'hello world'}, 'warn log', 100, [1, 2, 3])
ユーザー フィードバックは、LogManager によって記録されたログをアップロードします。ログが記録された後、ユーザーは
profile にログオンできます。ミニ プログラムのページで、フィードバックと苦情
をクリックし、機能異常をクリックしてログをアップロードします。
開発者はユーザーのフィードバックを処理し、ユーザーとコミュニケーションを行います開発者はミニ プログラムのバックグラウンドで
管理できる ->ユーザーフィードバック -> 機能異常 ユーザーフィードバック情報を表示します。 開発者は、 Function ->
Customer Service でカスタマー サービス WeChat をバインドできます。バインド後、48 時間 以內に WeChat を通じてフィードバック ユーザーと通信できます。 注: コミュニケーションにユーザーからのフィードバックが必要な場合は、「開発者が 48 時間以內にカスタマー サービス メッセージを通じて私に連絡できるようにする」をチェックしてください。
RealtimeLogManager
アプレットによって提供される リアルタイム ログ
ログ インターフェイス ( を通じて) wx.getRealtimeLogManager () インスタンスを取得します。 ###知らせ:###<ul><li><code>wx.getRealtimeLogManager()
基礎庫 2.7.1 開始支持
5kb
為了定位問題方便,日志是按頁面劃分的,某一個頁面,在onShow到onHide(切換到其它頁面、右上角圓點退到后臺)之間打的日志,會聚合成一條日志上報,并且在小程序管理后臺上可以根據頁面路徑搜索出該條日志
創(chuàng)建 RealtimeLogManager 實例
你可以通過 wx.getRealtimeLogManager()
獲取實時日志實例。
const logger = wx.getRealtimeLogManager()
使用 RealtimeLogManager 實例
const logger = wx.getRealtimeLogManager() logger.debug({str: 'hello world'}, 'debug log', 100, [1, 2, 3]) logger.info({str: 'hello world'}, 'info log', 100, [1, 2, 3]) logger.error({str: 'hello world'}, 'error log', 100, [1, 2, 3]) logger.warn({str: 'hello world'}, 'warn log', 100, [1, 2, 3])
查看實時日志
與普通日志不同的是,實時日志不再需要用戶反饋,可以直接通過以下方式查看實例。
登錄小程序后臺
通過路徑 開發(fā) -> 開發(fā)管理 -> 運維中心 -> 實時日志 查看實時日志
如何搭建小程序 Log 日志系統
上面我們知道了小程序的 Log
日志怎么使用,我們當然可以不進行封裝直接使用。
但是我們直接使用起來會感覺到十分的別扭,因為這不符合我們程序員單點調用的習慣。
那么接下來讓我們對這套 Log 系統進行初步的封裝以及全局的方法的日志注入。
后續(xù)我會在 github 開放源碼,并打包至 npm ,需要的開發(fā)者可自行 install 調用。
封裝小程序 Log 方法
封裝 Log 方法前,我們需要整理該方法需要考慮什么內容:
- 打印格式:統一打印格式有助于我們更快的定位問題
- 版本號:方便我們清晰的知道當前用戶使用的小程序版本,避免出現舊版本問題在新代碼中找不到問題
- 兼容性:我們需要考慮用戶小程序版本不足以支持
getLogManager
、getRealtimeLogManager
的情況 - 類型:我們需要兼容
debug
、log
、error
類型的log日志
版本問題
我們需要一個常量用以定義版本號,以便于我們定位出問題的代碼版本。
如果遇到版本問題,我們可以更好的引導用戶
const VERSION = "1.0.0" const logger = wx.getLogManager({ level: 0 }) logger.log(VERSION, info)
打印格式
我們可以通過 [version] file | content
的統一格式來更快的定位內容。
const VERSION = "1.0.0" const logger = wx.getLogManager({ level: 0 }) logger.log(`[${VERSION}] ${file} | `, ...args)
兼容性
我們需要考慮用戶小程序版本不足以支持 getLogManager
、 getRealtimeLogManager
的情況
const VERSION = "0.0.18"; const canIUseLogManage = wx.canIUse("getLogManager"); const logger = canIUseLogManage ? wx.getLogManager({ level: 0 }) : null; const realtimeLogger = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null; export function RUN(file, ...args) { console.log(`[${VERSION}]`, file, " | ", ...args); if (canIUseLogManage) { logger.log(`[${VERSION}]`, file, " | ", ...args); } realtimeLogger && realtimeLogger.info(`[${VERSION}]`, file, " | ", ...args); }
類型
我們需要兼容 debug
、 log
、 error
類型的 log日志
export function RUN(file, ...args) { ... } export function DEBUG(file, ...args) { ... } export function ERROR(file, ...args) { ... } export function getLogger(fileName) { return { DEBUG: function (...args) { DEBUG(fileName, ...args) }, RUN: function (...args) { RUN(fileName, ...args) }, ERROR: function (...args) { ERROR(fileName, ...args) } } }
完整代碼
以上都做到了,就完成了一套 Log
系統的基本封裝。
const VERSION = "0.0.18"; const canIUseLogManage = wx.canIUse("getLogManager"); const logger = canIUseLogManage ? wx.getLogManager({ level: 0 }) : null; const realtimeLogger = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null; export function DEBUG(file, ...args) { console.debug(`[${VERSION}] ${file} | `, ...args); if (canIUseLogManage) { logger.debug(`[${VERSION}]`, file, " | ", ...args); } realtimeLogger && realtimeLogger.info(`[${VERSION}]`, file, " | ", ...args); } export function RUN(file, ...args) { console.log(`[${VERSION}]`, file, " | ", ...args); if (canIUseLogManage) { logger.log(`[${VERSION}]`, file, " | ", ...args); } realtimeLogger && realtimeLogger.info(`[${VERSION}]`, file, " | ", ...args); } export function ERROR(file, ...args) { console.error(`[${VERSION}]`, file, " | ", ...args); if (canIUseLogManage) { logger.error(`[${VERSION}]`, file, " | ", ...args); } realtimeLogger && realtimeLogger.error(`[${VERSION}]`, file, " | ", ...args); } export function getLogger(fileName) { return { DEBUG: function (...args) { DEBUG(fileName, ...args) }, RUN: function (...args) { RUN(fileName, ...args) }, ERROR: function (...args) { ERROR(fileName, ...args) } } }
全局注入 Log
通過該章節(jié)的名稱,我們就可以知道全局注入。
全局注入的意思就是,不通過手動調用的形式,在方法寫完后自動注入 log
,你只需要在更細節(jié)的地方考慮打印 log
即可。
為什么要全局注入
雖然我們實現了全局 log
的封裝,但是很多情況下,一些新同學沒有好的打 log
的習慣,尤其是前端同學(我也一樣)。
所以我們需要做一個全局注入,以方便我們的代碼書寫,也避免掉手動打 log
會出現遺漏的問題。
如何進行全局注入
小程序提供了 behaviors
參數,用以讓多個頁面擁有相同的數據字段和方法。
需要注意的是,
page
級別的behaviors
在 2.9.2 之后開始支持
我們可以通過封裝一個通用的 behaviors
,然后在需要 log
的頁面進行引入即可。
import * as Log from "./log-test"; export default Behavior({ definitionFilter(defFields) { console.log(defFields); Object.keys(defFields.methods || {}).forEach(methodName => { const originMethod = defFields.methods[methodName]; defFields.methods[methodName] = function (ev, ...args) { if (ev && ev.target && ev.currentTarget && ev.currentTarget.dataset) { Log.RUN(defFields.data.PAGE_NAME, `${methodName} invoke, event dataset = `, ev.currentTarget.dataset, "params = ", ...args); } else { Log.RUN(defFields.data.PAGE_NAME, `${methodName} invoke, params = `, ev, ...args); } originMethod.call(this, ev, ...args) } }) } })
總結
連著開發(fā)帶整理,林林總總的也有了 2000+
字,耗費了三天的時間,整體感覺還是比較值得的,希望可以帶給大家一些幫助。
也希望大家更重視前端的 log
一點。這基于我自身的感覺,尤其是移動端用戶。
在很多時候由于 手機型號 、 弱網環(huán)境 等導致的問題。
在沒有 log
時,找不到問題的著力點,導致問題難以被及時解決。
后續(xù)我會在
github
開放源碼,并打包至npm
,開發(fā)者后續(xù)可自行install
調用。
后續(xù) 源碼地址 及 npm安裝方法 將會在該頁面更新。
開放時間基于大家需求而定。
【相關學習推薦:小程序開發(fā)教程】
以上がミニ プログラムのログ システムについて説明し、その構築方法と使用方法を見てみましょう。の詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











モバイル インターネット技術とスマートフォンの普及により、WeChat は人々の生活に欠かせないアプリケーションになりました。 WeChat ミニ プログラムを使用すると、アプリケーションをダウンロードしてインストールすることなく、ミニ プログラムを直接使用して、いくつかの簡単なニーズを解決できます。この記事では、Python を使用して WeChat アプレットを開発する方法を紹介します。 1. 準備 Python を使用して WeChat アプレットを開発する前に、関連する Python ライブラリをインストールする必要があります。ここでは、wxpy と itchat の 2 つのライブラリを使用することをお勧めします。 wxpy は WeChat マシンです

WeChat ミニ プログラムでのカードめくり効果の実裝 WeChat ミニ プログラムでは、カードめくり効果の実裝は、ユーザー エクスペリエンスとインターフェイス インタラクションの魅力を向上させることができる一般的なアニメーション効果です。以下では、WeChat アプレットでカードめくりの特殊効果を実裝する方法と、関連するコード例を詳しく紹介します。まず、ミニ プログラムのページ レイアウト ファイルに 2 つのカード要素を定義する必要があります。1 つは前面のコンテンツを表示するため、もう 1 つは背面のコンテンツを表示するためです。具體的なサンプル コードは次のとおりです: <!--index.wxml- ->&l

10月31日の當サイトのニュースによると、今年5月27日、アント?グループは「漢字拾いプロジェクト」の立ち上げを発表し、最近新たな進展を迎えた:アリペイが「漢字拾い-珍しい文字」ミニプログラムを開始協會からコレクションを収集する レア文字は、レア文字ライブラリを補完し、アリペイでのレア文字入力方法の改善に役立つように、レア文字に異なる入力エクスペリエンスを提供します?,F在、ユーザーは「漢字ピックアップ」「珍文字」などのキーワードで検索することで「珍文字」アプレットに入ることができる。ミニプログラムでは、ユーザーがシステムで認識?入力されなかった珍しい文字の畫像を送信し、確認後、Alipay のエンジニアがフォントライブラリに追加エントリを作成します。當サイトでは、発音が不明瞭な珍しい単語を対象とした最新の単語分割入力方法をミニプログラムで體験できることに注目しました。ユーザー解體

ミニプログラムはreactを利用することができます 使い方: 1. 「react-reconciler」に基づいてレンダラーを実裝し、DSLを生成します; 2. DSLを解析してレンダリングするためのミニプログラムコンポーネントを作成します; 3. npmをインストールし、開発者ビルドを実行しますツール內の npm; 4. パッケージを獨自のページに導入し、API を使用して開発を完了します。

uniapp がミニ プログラムと H5 の間で迅速な変換を実現するには、具體的なコード例が必要ですが、近年、モバイル インターネットの発展とスマートフォンの普及に伴い、ミニ プログラムと H5 は不可欠なアプリケーション形式となっています。クロスプラットフォーム開発フレームワークとして、uniapp は一連のコードに基づいて小規(guī)模プログラムと H5 間の変換を迅速に実現し、開発効率を大幅に向上させます。この記事では、uniapp がミニ プログラムと H5 の間で迅速な変換を実現する方法と、具體的なコード例を紹介します。 1. uniapp uniaの紹介

この記事では、WeChat ミニ プログラムに関するいくつかの関連事項を紹介します。主に、ミニ プログラムでパブリック アカウント テンプレート メッセージを使用する方法を紹介します。一緒に見てみましょう。皆さんのお役に立てれば幸いです。

実裝アイデア: チャット ルームのさまざまな機能を処理するために、スレッドのサーバー側を確立します。x02 クライアントの確立はサーバーよりもはるかに簡単です。クライアントの機能はメッセージの送受信と、特定の文字を特定の規(guī)則に従って入力するため、クライアント側では、メッセージ受信専用とメッセージ送信専用の 2 つのスレッドを使用するだけで、さまざまな機能を使用できます。使用しないでください。

PHP およびミニ プログラムの地理位置測位と地図表示 地理位置測位と地図表示は、現代のテクノロジーにおいて必要な機能の 1 つになっています。モバイルデバイスの普及に伴い、測位と地図表示に対する人々の需要も高まっています。開発プロセスでは、PHP とアプレットの 2 つのテクノロジーが一般的に選択されます。この記事では、PHP およびミニ プログラムでの地理的位置の測位と地図表示の実裝方法を紹介し、対応するコード例を添付します。 1. PHP での地理位置情報 PHP では、サードパーティの地理位置情報を使用できます。
