跳至內容

檢測

檢測是指使用程式碼將監控和日誌記錄工具整合到您的應用程式中的過程。這讓您可以追蹤應用程式的效能和行為,並在生產環境中除錯問題。

慣例

要設定檢測,請在專案的根目錄(或在使用 src 資料夾時,在其中)建立 instrumentation.ts|js 檔案。

然後,在檔案中匯出一個 register 函式。這個函式將在初始化新的 Next.js 伺服器執行個體時被呼叫一次

例如,要將 Next.js 與 OpenTelemetry@vercel/otel 搭配使用

instrumentation.ts
import { registerOTel } from '@vercel/otel'
 
export function register() {
  registerOTel('next-app')
}

請參閱 Next.js 搭配 OpenTelemetry 範例 以取得完整的實作。

注意事項:

  • instrumentation 檔案應置於專案的根目錄,而不是 apppages 目錄內。如果您使用 src 資料夾,則將檔案放置在 src 內,與 pagesapp 並列。
  • 如果您使用 pageExtensions 設定選項 來新增後綴,您也需要更新 instrumentation 檔案名稱以符合。

範例

導入具有副作用的檔案

有時,因為導入檔案會產生副作用,因此在程式碼中導入檔案可能很有用。例如,您可能會導入一個定義一組全域變數的檔案,但從不在程式碼中明確使用導入的檔案。您仍然可以存取套件已宣告的全域變數。

我們建議在 register 函式中使用 JavaScript 的 import 語法導入檔案。以下範例示範了在 register 函式中 import 的基本用法。

instrumentation.ts
export async function register() {
  await import('package-with-side-effect')
}

注意事項

我們建議從 register 函式內導入檔案,而不是在檔案頂部導入。透過這樣做,您可以將所有副作用集中在程式碼的一個位置,並避免在檔案頂部全域導入所造成的任何非預期後果。

導入執行階段特定程式碼 Edge 或 Node.js)的程式碼。您可以使用 NEXT_RUNTIME 環境變數來取得目前的執行環境。

instrumentation.ts
export async function register() {
  if (process.env.NEXT_RUNTIME === 'nodejs') {
    await import('./instrumentation-node')
  }
 
  if (process.env.NEXT_RUNTIME === 'edge') {
    await import('./instrumentation-edge')
  }
}