Instrumentation
Enstrümantasyon, izleme ve günlük tutma araçlarını uygulamanıza entegre etmek için kod kullanma sürecidir. Bu, uygulamanızın performansını ve davranışını izlemenize ve üretimdeki sorunları ayıklamanıza olanak tanır.
Next.js, projenizin kök dizinindeki (veya kullanıyorsanız src
klasörünün içindeki) bir instrumentation.ts|js
dosyasından dışa aktarılabilen bir register
işlevi sağlar. Next.js daha sonra yeni bir Next.js sunucu örneği önyüklendiğinde register
adresini çağıracaktır.
Bildiğim iyi oldu
- Bu özellik deneyseldir. Kullanmak için
experimental.instrumentationHook = true;
adresininext.config.js
adresinizde tanımlayarak açıkça tercih etmeniz gerekir.instrumentation
dosyası,app
veyapages
dizininin içinde değil, projenizin kök dizininde olmalıdır. Eğersrc
klasörünü kullanıyorsanız, dosyayıpages
veapp
ile birliktesrc
içine yerleştirin.- Bir sonek eklemek için
pageExtensions
yapılandırma seçeneğini kullanırsanız,instrumentation
dosya adını da eşleşecek şekilde güncellemeniz gerekecektir.- Kullanabileceğiniz temel bir with-opentelemetry örneği oluşturduk.
register
işleviniz dağıtıldığında, her soğuk önyüklemede çağrılacaktır (ancak her ortamda tam olarak bir kez).
Bazen, neden olacağı yan etkiler nedeniyle kodunuzda bir dosyayı içe aktarmak yararlı olabilir. Örneğin, bir dizi global değişkeni tanımlayan bir dosyayı içe aktarabilir, ancak içe aktarılan dosyayı kodunuzda asla açıkça kullanmayabilirsiniz. Yine de paketin bildirdiği global değişkenlere erişiminiz olacaktır.
Aşağıdaki örnekte gösterildiği gibi, register
işlevinizde kullanmak isteyebileceğiniz instrumentation.ts
adresinde yan etkileri olan dosyaları içe aktarabilirsiniz:
import { init } from 'package-init'
export function register() {
init()
}
Ancak, yan etkileri olan dosyaları içe aktarmak için bunun yerine register
işlevinizin içinden import
adresini kullanmanızı öneririz. Aşağıdaki örnek, register
işlevi içinde import
'un temel bir kullanımını göstermektedir:
export async function register() {
await import('package-with-side-effect')
}
Bunu yaparak, tüm yan etkilerinizi kodunuzda tek bir yerde toplayabilir ve dosyaların içe aktarılmasından kaynaklanan istenmeyen sonuçlardan kaçınabilirsiniz.
Tüm ortamlarda register
diyoruz, bu nedenle hem edge
hem de nodejs
adreslerini desteklemeyen herhangi bir kodu koşullu olarak içe aktarmak gerekir. Geçerli ortamı almak için NEXT_RUNTIME
ortam değişkenini kullanabilirsiniz. Ortama özgü bir kodu içe aktarmak şu şekilde görünecektir:
export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
await import('./instrumentation-node')
}
if (process.env.NEXT_RUNTIME === 'edge') {
await import('./instrumentation-edge')
}
}