تقرير تشخيصي
[مستقر: 2 - مستقر]
مستقر: 2 استقرار: 2 - مستقر
[السجل]
الإصدار | التغييرات |
---|---|
v23.3.0 | تمت إضافة خيار --report-exclude-env لاستبعاد متغيرات البيئة من إنشاء التقرير. |
v22.0.0, v20.13.0 | تمت إضافة خيار --report-exclude-network لاستبعاد عمليات الشبكات التي قد تبطئ إنشاء التقرير في بعض الحالات. |
يقدم موجزًا تشخيصيًا بتنسيق JSON، ويتم كتابته في ملف.
يهدف التقرير إلى الاستخدام في التطوير والاختبار والإنتاج، لالتقاط وحفظ المعلومات لتحديد المشكلات. يتضمن مسارات المكدس الخاصة بلغة جافا سكريبت والمسارات الأصلية، وإحصائيات الكومة، ومعلومات النظام الأساسي، واستخدام الموارد، إلخ. مع تمكين خيار التقرير، يمكن تشغيل تقارير التشخيص عند الاستثناءات غير المعالجة، والأخطاء الفادحة، وإشارات المستخدم، بالإضافة إلى التشغيل برمجياً من خلال مكالمات واجهة برمجة التطبيقات.
يرد أدناه مثال كامل لتقرير تم إنشاؤه عند حدوث استثناء غير معالج كمرجع.
{
"header": {
"reportVersion": 5,
"event": "exception",
"trigger": "Exception",
"filename": "report.20181221.005011.8974.0.001.json",
"dumpEventTime": "2018-12-21T00:50:11Z",
"dumpEventTimeStamp": "1545371411331",
"processId": 8974,
"cwd": "/home/nodeuser/project/node",
"commandLine": [
"/home/nodeuser/project/node/out/Release/node",
"--report-uncaught-exception",
"/home/nodeuser/project/node/test/report/test-exception.js",
"child"
],
"nodejsVersion": "v12.0.0-pre",
"glibcVersionRuntime": "2.17",
"glibcVersionCompiler": "2.17",
"wordSize": "64 bit",
"arch": "x64",
"platform": "linux",
"componentVersions": {
"node": "12.0.0-pre",
"v8": "7.1.302.28-node.5",
"uv": "1.24.1",
"zlib": "1.2.11",
"ares": "1.15.0",
"modules": "68",
"nghttp2": "1.34.0",
"napi": "3",
"llhttp": "1.0.1",
"openssl": "1.1.0j"
},
"release": {
"name": "node"
},
"osName": "Linux",
"osRelease": "3.10.0-862.el7.x86_64",
"osVersion": "#1 SMP Wed Mar 21 18:14:51 EDT 2018",
"osMachine": "x86_64",
"cpus": [
{
"model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
"speed": 2700,
"user": 88902660,
"nice": 0,
"sys": 50902570,
"idle": 241732220,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
"speed": 2700,
"user": 88902660,
"nice": 0,
"sys": 50902570,
"idle": 241732220,
"irq": 0
}
],
"networkInterfaces": [
{
"name": "en0",
"internal": false,
"mac": "13:10:de:ad:be:ef",
"address": "10.0.0.37",
"netmask": "255.255.255.0",
"family": "IPv4"
}
],
"host": "test_machine"
},
"javascriptStack": {
"message": "Error: *** test-exception.js: throwing uncaught Error",
"stack": [
"at myException (/home/nodeuser/project/node/test/report/test-exception.js:9:11)",
"at Object.<anonymous> (/home/nodeuser/project/node/test/report/test-exception.js:12:3)",
"at Module._compile (internal/modules/cjs/loader.js:718:30)",
"at Object.Module._extensions..js (internal/modules/cjs/loader.js:729:10)",
"at Module.load (internal/modules/cjs/loader.js:617:32)",
"at tryModuleLoad (internal/modules/cjs/loader.js:560:12)",
"at Function.Module._load (internal/modules/cjs/loader.js:552:3)",
"at Function.Module.runMain (internal/modules/cjs/loader.js:771:12)",
"at executeUserCode (internal/bootstrap/node.js:332:15)"
]
},
"nativeStack": [
{
"pc": "0x000055b57f07a9ef",
"symbol": "report::GetNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, v8::Local<v8::String>, std::ostream&) [./node]"
},
{
"pc": "0x000055b57f07cf03",
"symbol": "report::GetReport(v8::FunctionCallbackInfo<v8::Value> const&) [./node]"
},
{
"pc": "0x000055b57f1bccfd",
"symbol": " [./node]"
},
{
"pc": "0x000055b57f1be048",
"symbol": "v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [./node]"
},
{
"pc": "0x000055b57feeda0e",
"symbol": " [./node]"
}
],
"javascriptHeap": {
"totalMemory": 5660672,
"executableMemory": 524288,
"totalCommittedMemory": 5488640,
"availableMemory": 4341379928,
"totalGlobalHandlesMemory": 8192,
"usedGlobalHandlesMemory": 3136,
"usedMemory": 4816432,
"memoryLimit": 4345298944,
"mallocedMemory": 254128,
"externalMemory": 315644,
"peakMallocedMemory": 98752,
"nativeContextCount": 1,
"detachedContextCount": 0,
"doesZapGarbage": 0,
"heapSpaces": {
"read_only_space": {
"memorySize": 524288,
"committedMemory": 39208,
"capacity": 515584,
"used": 30504,
"available": 485080
},
"new_space": {
"memorySize": 2097152,
"committedMemory": 2019312,
"capacity": 1031168,
"used": 985496,
"available": 45672
},
"old_space": {
"memorySize": 2273280,
"committedMemory": 1769008,
"capacity": 1974640,
"used": 1725488,
"available": 249152
},
"code_space": {
"memorySize": 696320,
"committedMemory": 184896,
"capacity": 152128,
"used": 152128,
"available": 0
},
"map_space": {
"memorySize": 536576,
"committedMemory": 344928,
"capacity": 327520,
"used": 327520,
"available": 0
},
"large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 1520590336,
"used": 0,
"available": 1520590336
},
"new_large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 0,
"used": 0,
"available": 0
}
}
},
"resourceUsage": {
"rss": "35766272",
"free_memory": "1598337024",
"total_memory": "17179869184",
"available_memory": "1598337024",
"maxRss": "36624662528",
"constrained_memory": "36624662528",
"userCpuSeconds": 0.040072,
"kernelCpuSeconds": 0.016029,
"cpuConsumptionPercent": 5.6101,
"userCpuConsumptionPercent": 4.0072,
"kernelCpuConsumptionPercent": 1.6029,
"pageFaults": {
"IORequired": 0,
"IONotRequired": 4610
},
"fsActivity": {
"reads": 0,
"writes": 0
}
},
"uvthreadResourceUsage": {
"userCpuSeconds": 0.039843,
"kernelCpuSeconds": 0.015937,
"cpuConsumptionPercent": 5.578,
"userCpuConsumptionPercent": 3.9843,
"kernelCpuConsumptionPercent": 1.5937,
"fsActivity": {
"reads": 0,
"writes": 0
}
},
"libuv": [
{
"type": "async",
"is_active": true,
"is_referenced": false,
"address": "0x0000000102910900",
"details": ""
},
{
"type": "timer",
"is_active": false,
"is_referenced": false,
"address": "0x00007fff5fbfeab0",
"repeat": 0,
"firesInMsFromNow": 94403548320796,
"expired": true
},
{
"type": "check",
"is_active": true,
"is_referenced": false,
"address": "0x00007fff5fbfeb48"
},
{
"type": "idle",
"is_active": false,
"is_referenced": true,
"address": "0x00007fff5fbfebc0"
},
{
"type": "prepare",
"is_active": false,
"is_referenced": false,
"address": "0x00007fff5fbfec38"
},
{
"type": "check",
"is_active": false,
"is_referenced": false,
"address": "0x00007fff5fbfecb0"
},
{
"type": "async",
"is_active": true,
"is_referenced": false,
"address": "0x000000010188f2e0"
},
{
"type": "tty",
"is_active": false,
"is_referenced": true,
"address": "0x000055b581db0e18",
"width": 204,
"height": 55,
"fd": 17,
"writeQueueSize": 0,
"readable": true,
"writable": true
},
{
"type": "signal",
"is_active": true,
"is_referenced": false,
"address": "0x000055b581d80010",
"signum": 28,
"signal": "SIGWINCH"
},
{
"type": "tty",
"is_active": true,
"is_referenced": true,
"address": "0x000055b581df59f8",
"width": 204,
"height": 55,
"fd": 19,
"writeQueueSize": 0,
"readable": true,
"writable": true
},
{
"type": "loop",
"is_active": true,
"address": "0x000055fc7b2cb180",
"loopIdleTimeSeconds": 22644.8
},
{
"type": "tcp",
"is_active": true,
"is_referenced": true,
"address": "0x000055e70fcb85d8",
"localEndpoint": {
"host": "localhost",
"ip4": "127.0.0.1",
"port": 48986
},
"remoteEndpoint": {
"host": "localhost",
"ip4": "127.0.0.1",
"port": 38573
},
"sendBufferSize": 2626560,
"recvBufferSize": 131072,
"fd": 24,
"writeQueueSize": 0,
"readable": true,
"writable": true
}
],
"workers": [],
"environmentVariables": {
"REMOTEHOST": "REMOVED",
"MANPATH": "/opt/rh/devtoolset-3/root/usr/share/man:",
"XDG_SESSION_ID": "66126",
"HOSTNAME": "test_machine",
"HOST": "test_machine",
"TERM": "xterm-256color",
"SHELL": "/bin/csh",
"SSH_CLIENT": "REMOVED",
"PERL5LIB": "/opt/rh/devtoolset-3/root//usr/lib64/perl5/vendor_perl:/opt/rh/devtoolset-3/root/usr/lib/perl5:/opt/rh/devtoolset-3/root//usr/share/perl5/vendor_perl",
"OLDPWD": "/home/nodeuser/project/node/src",
"JAVACONFDIRS": "/opt/rh/devtoolset-3/root/etc/java:/etc/java",
"SSH_TTY": "/dev/pts/0",
"PCP_DIR": "/opt/rh/devtoolset-3/root",
"GROUP": "normaluser",
"USER": "nodeuser",
"LD_LIBRARY_PATH": "/opt/rh/devtoolset-3/root/usr/lib64:/opt/rh/devtoolset-3/root/usr/lib",
"HOSTTYPE": "x86_64-linux",
"XDG_CONFIG_DIRS": "/opt/rh/devtoolset-3/root/etc/xdg:/etc/xdg",
"MAIL": "/var/spool/mail/nodeuser",
"PATH": "/home/nodeuser/project/node:/opt/rh/devtoolset-3/root/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin",
"PWD": "/home/nodeuser/project/node",
"LANG": "en_US.UTF-8",
"PS1": "\\u@\\h : \\[\\e[31m\\]\\w\\[\\e[m\\] > ",
"SHLVL": "2",
"HOME": "/home/nodeuser",
"OSTYPE": "linux",
"VENDOR": "unknown",
"PYTHONPATH": "/opt/rh/devtoolset-3/root/usr/lib64/python2.7/site-packages:/opt/rh/devtoolset-3/root/usr/lib/python2.7/site-packages",
"MACHTYPE": "x86_64",
"LOGNAME": "nodeuser",
"XDG_DATA_DIRS": "/opt/rh/devtoolset-3/root/usr/share:/usr/local/share:/usr/share",
"LESSOPEN": "||/usr/bin/lesspipe.sh %s",
"INFOPATH": "/opt/rh/devtoolset-3/root/usr/share/info",
"XDG_RUNTIME_DIR": "/run/user/50141",
"_": "./node"
},
"userLimits": {
"core_file_size_blocks": {
"soft": "",
"hard": "unlimited"
},
"data_seg_size_bytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"file_size_blocks": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_locked_memory_bytes": {
"soft": "unlimited",
"hard": 65536
},
"max_memory_size_bytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"open_files": {
"soft": "unlimited",
"hard": 4096
},
"stack_size_bytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"cpu_time_seconds": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_user_processes": {
"soft": "unlimited",
"hard": 4127290
},
"virtual_memory_bytes": {
"soft": "unlimited",
"hard": "unlimited"
}
},
"sharedObjects": [
"/lib64/libdl.so.2",
"/lib64/librt.so.1",
"/lib64/libstdc++.so.6",
"/lib64/libm.so.6",
"/lib64/libgcc_s.so.1",
"/lib64/libpthread.so.0",
"/lib64/libc.so.6",
"/lib64/ld-linux-x86-64.so.2"
]
}
الاستخدام
node --report-uncaught-exception --report-on-signal \
--report-on-fatalerror app.js
--report-uncaught-exception
يُمكّن إنشاء تقرير عن الاستثناءات غير المُعالجة. مفيد عند فحص مُكدس جافا سكريبت بالاقتران مع مُكدس النظام وبيانات بيئة التشغيل الأخرى.--report-on-signal
يُمكّن إنشاء تقرير عند استلام الإشارة المُحددة (أو المُعرفة مسبقًا) إلى عملية Node.js قيد التشغيل. (انظر أدناه حول كيفية تعديل الإشارة التي تُنشّط التقرير). الإشارة الافتراضية هيSIGUSR2
. مفيد عندما تكون هناك حاجة إلى تشغيل تقرير من برنامج آخر. قد يستفيد مراقبو التطبيقات من هذه الميزة لجمع التقارير على فترات منتظمة ورسم مجموعة غنية من بيانات وقت التشغيل الداخلية لعروضهم.
لا يُدعم إنشاء تقارير قائمة على الإشارات في Windows.
في الظروف العادية، ليست هناك حاجة لتعديل إشارة تشغيل التقرير. ومع ذلك، إذا تم استخدام SIGUSR2
بالفعل لأغراض أخرى، فإن هذه العلامة تساعد على تغيير الإشارة لإنشاء التقرير والحفاظ على المعنى الأصلي لـ SIGUSR2
للأغراض المذكورة.
--report-on-fatalerror
يُمكّن تشغيل التقرير عند حدوث أخطاء قاتلة (أخطاء داخلية داخل وقت تشغيل Node.js، مثل نفاد الذاكرة) تؤدي إلى إنهاء التطبيق. مفيد لفحص عناصر بيانات التشخيص المختلفة مثل الكومة، والمكدس، وحالة حلقة الأحداث، واستهلاك الموارد، إلخ، للتفكير في الخطأ القاتل.--report-compact
كتابة التقارير بتنسيق مُدمج، JSON أحادي السطر، أسهل في استهلاكه بواسطة أنظمة معالجة السجلات من التنسيق متعدد الأسطر الافتراضي المُصمم للاستهلاك البشري.--report-directory
الموقع الذي سيتم إنشاء التقرير فيه.--report-filename
اسم الملف الذي سيتم كتابة التقرير إليه.--report-signal
يُعيّن أو يُعيد تعيين الإشارة لإنشاء التقرير (غير مدعوم على Windows). الإشارة الافتراضية هيSIGUSR2
.--report-exclude-network
استبعادheader.networkInterfaces
وتعطيل استعلامات DNS العكسية فيlibuv.*.(remote|local)Endpoint.host
من تقرير التشخيص. بشكل افتراضي، لا يتم تعيين هذا ويتم تضمين واجهات الشبكة.--report-exclude-env
استبعادenvironmentVariables
من تقرير التشخيص. بشكل افتراضي، لا يتم تعيين هذا ويتم تضمين متغيرات البيئة.
يمكن أيضًا تشغيل تقرير عبر مكالمة API من تطبيق جافا سكريبت:
process.report.writeReport()
تتضمن هذه الدالة وسيطة إضافية اختيارية filename
، وهو اسم الملف الذي سيتم كتابة التقرير فيه.
process.report.writeReport('./foo.json')
تتضمن هذه الدالة وسيطة إضافية اختيارية err
وهي كائن Error
سيتم استخدامه كسياق لمكدس جافا سكريبت المطبوع في التقرير. عند استخدام التقرير للتعامل مع الأخطاء في مُعالِج استدعاء أو استثناء، يسمح هذا للتقرير بتضمين موقع الخطأ الأصلي بالإضافة إلى المكان الذي تم معالجته فيه.
try {
process.chdir('/non-existent-path')
} catch (err) {
process.report.writeReport(err)
}
// أي رمز آخر
إذا تم تمرير كل من اسم الملف وكائن الخطأ إلى writeReport()
، فيجب أن يكون كائن الخطأ هو المعلمة الثانية.
try {
process.chdir('/non-existent-path')
} catch (err) {
process.report.writeReport(filename, err)
}
// أي رمز آخر
يمكن إرجاع محتوى تقرير التشخيص ككائن جافا سكريبت عبر مكالمة API من تطبيق جافا سكريبت:
const report = process.report.getReport()
console.log(typeof report === 'object') // true
// مشابه لمخرجات process.report.writeReport()
console.log(JSON.stringify(report, null, 2))
تتضمن هذه الدالة وسيطة إضافية اختيارية err
، وهي كائن Error
سيتم استخدامه كسياق لمكدس جافا سكريبت المطبوع في التقرير.
const report = process.report.getReport(new Error('custom error'))
console.log(typeof report === 'object') // true
تُعدّ إصدارات API مفيدة عند فحص حالة وقت التشغيل من داخل التطبيق، على أمل ضبط استهلاك الموارد، وتوازن التحميل، والمراقبة، إلخ.
يتكون محتوى التقرير من قسم رأس يحتوي على نوع الحدث، والتاريخ، والوقت، و PID، وإصدار Node.js، وأقسام تحتوي على تتبعات مكدس جافا سكريبت والنظام، وقسم يحتوي على معلومات كومة V8، وقسم يحتوي على معلومات مُعالجة libuv
، وقسم معلومات النظام الأساسي الذي يُظهر استخدام وحدة المعالجة المركزية والذاكرة وحدود النظام. يمكن تشغيل تقرير مثال باستخدام Node.js REPL:
$ node
> process.report.writeReport();
Writing Node.js report to file: report.20181126.091102.8480.0.001.json
Node.js report completed
>
عند كتابة تقرير، يتم إصدار رسائل البدء والنهاية إلى stderr ويتم إرجاع اسم ملف التقرير إلى المُستدعي. يتضمن اسم الملف الافتراضي التاريخ، والوقت، و PID، ورقم تسلسل. يساعد رقم التسلسل في ربط تفريغ التقرير بحالة وقت التشغيل إذا تم إنشاؤه عدة مرات لنفس عملية Node.js.
إصدار التقرير
يحتوي تقرير التشخيص على رقم إصدار مكون من رقم واحد مرتبط به (report.header.reportVersion
)، يمثل بشكل فريد تنسيق التقرير. يتم زيادة رقم الإصدار عند إضافة مفتاح جديد أو إزالته، أو تغيير نوع بيانات قيمة. تُعد تعريفات إصدار التقرير ثابتة عبر إصدارات LTS.
سجل الإصدارات
الإصدار 5
[السجل]
الإصدار | التغييرات |
---|---|
v23.5.0 | تصحيح أخطاء إملائية في وحدات حد الذاكرة. |
استبدل المفاتيح data_seg_size_kbytes
, max_memory_size_kbytes
, و virtual_memory_kbytes
بـ data_seg_size_bytes
, max_memory_size_bytes
, و virtual_memory_bytes
على التوالي في قسم userLimits
، حيث تُعطى هذه القيم بالبايت.
{
"userLimits": {
// تخطي بعض المفاتيح ...
"data_seg_size_bytes": {
// استبدال data_seg_size_kbytes
"soft": "unlimited",
"hard": "unlimited"
},
// ...
"max_memory_size_bytes": {
// استبدال max_memory_size_kbytes
"soft": "unlimited",
"hard": "unlimited"
},
// ...
"virtual_memory_bytes": {
// استبدال virtual_memory_kbytes
"soft": "unlimited",
"hard": "unlimited"
}
}
}
الإصدار 4
[السجل]
الإصدار | التغييرات |
---|---|
v23.3.0 | تمت إضافة خيار --report-exclude-env لاستبعاد متغيرات البيئة من إنشاء التقرير. |
تمت إضافة الحقول الجديدة ipv4
و ipv6
إلى نقاط نهاية مُعالجات libuv من نوع tcp
و udp
. أمثلة:
{
"libuv": [
{
"type": "tcp",
"is_active": true,
"is_referenced": true,
"address": "0x000055e70fcb85d8",
"localEndpoint": {
"host": "localhost",
"ip4": "127.0.0.1", // مفتاح جديد
"port": 48986
},
"remoteEndpoint": {
"host": "localhost",
"ip4": "127.0.0.1", // مفتاح جديد
"port": 38573
},
"sendBufferSize": 2626560,
"recvBufferSize": 131072,
"fd": 24,
"writeQueueSize": 0,
"readable": true,
"writable": true
},
{
"type": "tcp",
"is_active": true,
"is_referenced": true,
"address": "0x000055e70fcd68c8",
"localEndpoint": {
"host": "ip6-localhost",
"ip6": "::1", // مفتاح جديد
"port": 52266
},
"remoteEndpoint": {
"host": "ip6-localhost",
"ip6": "::1", // مفتاح جديد
"port": 38573
},
"sendBufferSize": 2626560,
"recvBufferSize": 131072,
"fd": 25,
"writeQueueSize": 0,
"readable": false,
"writable": false
}
]
}
الإصدار 3
[السجل]
الإصدار | التغييرات |
---|---|
v19.1.0، v18.13.0 | إضافة مزيد من معلومات الذاكرة. |
تمت إضافة مفاتيح استخدام الذاكرة التالية إلى قسم resourceUsage
.
{
"resourceUsage": {
"rss": "35766272",
"free_memory": "1598337024",
"total_memory": "17179869184",
"available_memory": "1598337024",
"constrained_memory": "36624662528"
}
}
الإصدار 2
[السجل]
الإصدار | التغييرات |
---|---|
v13.9.0، v12.16.2 | تم تضمين العمال الآن في التقرير. |
تمت إضافة دعم Worker
. يرجى الرجوع إلى قسم التفاعل مع العمال لمزيد من التفاصيل.
الإصدار 1
هذا هو الإصدار الأول من تقرير التشخيص.
التكوين
يتوفر تكوين وقت التشغيل الإضافي لإنشاء التقرير عبر الخصائص التالية لـ process.report
:
reportOnFatalError
يقوم بتشغيل الإبلاغ عن التشخيص في حالة الأخطاء القاتلة عندما تكون قيمته true
. القيمة الافتراضية هي false
.
reportOnSignal
يقوم بتشغيل الإبلاغ عن التشخيص عند حدوث إشارة عندما تكون قيمته true
. هذا غير مدعوم على Windows. القيمة الافتراضية هي false
.
reportOnUncaughtException
يقوم بتشغيل الإبلاغ عن التشخيص في حالة الاستثناء غير المعالج عندما تكون قيمته true
. القيمة الافتراضية هي false
.
signal
يحدد معرف إشارة POSIX التي سيتم استخدامها لاعتراض المُحفزات الخارجية لإنشاء التقرير. القيمة الافتراضية هي 'SIGUSR2'
.
filename
يحدد اسم ملف الإخراج في نظام الملفات. هناك معنى خاص مرتبط بـ stdout
و stderr
. سيؤدي استخدام هذه القيم إلى كتابة التقرير في تيارات الإخراج القياسية المرتبطة. في الحالات التي يتم فيها استخدام التيارات القياسية، يتم تجاهل القيمة الموجودة في directory
. لا يتم دعم عناوين URL. القيمة الافتراضية هي اسم ملف مركب يحتوي على طابع زمني و PID ورقم تسلسل.
directory
يحدد دليل نظام الملفات حيث سيتم كتابة التقرير. لا يتم دعم عناوين URL. القيمة الافتراضية هي دليل العمل الحالي لعملية Node.js.
excludeNetwork
يستثني header.networkInterfaces
من تقرير التشخيص.
// تشغيل التقرير فقط في حالة الاستثناءات غير المعالجة.
process.report.reportOnFatalError = false
process.report.reportOnSignal = false
process.report.reportOnUncaughtException = true
// تشغيل التقرير لكل من الأخطاء الداخلية والإشارة الخارجية.
process.report.reportOnFatalError = true
process.report.reportOnSignal = true
process.report.reportOnUncaughtException = false
// تغيير الإشارة الافتراضية إلى 'SIGQUIT' وتمكينها.
process.report.reportOnFatalError = false
process.report.reportOnUncaughtException = false
process.report.reportOnSignal = true
process.report.signal = 'SIGQUIT'
// تعطيل الإبلاغ عن واجهات الشبكة
process.report.excludeNetwork = true
يتوفر التكوين عند تهيئة الوحدة أيضًا عبر متغيرات البيئة:
NODE_OPTIONS="--report-uncaught-exception \
--report-on-fatalerror --report-on-signal \
--report-signal=SIGUSR2 --report-filename=./report.json \
--report-directory=/home/nodeuser"
يمكن العثور على وثائق واجهة برمجة التطبيقات المحددة ضمن قسم وثائق واجهة برمجة تطبيقات العملية
.
التفاعل مع العمال
[السجل]
الإصدار | التغييرات |
---|---|
v13.9.0، v12.16.2 | تم تضمين العمال الآن في التقرير. |
يمكن لخيوط Worker
إنشاء تقارير بنفس الطريقة التي يقوم بها الخيط الرئيسي.
ستتضمن التقارير معلومات حول أي عمال هم أبناء للخيط الحالي كجزء من قسم workers
، حيث يقوم كل عامل بتوليد تقرير بتنسيق التقرير القياسي.
سينتظر الخيط الذي يقوم بتوليد التقرير حتى تنتهي تقارير خيوط العمال. ومع ذلك، فإن زمن الوصول لهذا الأمر سيكون منخفضًا عادةً، نظرًا لأن كلا من تشغيل جافا سكريبت وحلقة الأحداث يتم مقاطعتهما لإنشاء التقرير.