@be-link/cls-logger 1.0.1-beta.2 → 1.0.1-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/errorMonitor.d.ts.map +1 -1
- package/dist/index.esm.js +78 -8
- package/dist/index.js +78 -8
- package/dist/index.umd.js +78 -8
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorMonitor.d.ts","sourceRoot":"","sources":["../src/errorMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG/D,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"errorMonitor.d.ts","sourceRoot":"","sources":["../src/errorMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG/D,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AA4QzD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAE,OAAO,GAAG,mBAAmB,GAAG,SAAc,GAAG,IAAI,CAqBhH"}
|
package/dist/index.esm.js
CHANGED
|
@@ -536,6 +536,8 @@ function installRequestMonitor(report, opts = {}) {
|
|
|
536
536
|
}
|
|
537
537
|
|
|
538
538
|
const DEFAULT_MAX_TEXT = 4000;
|
|
539
|
+
const DEFAULT_DEDUPE_WINDOW_MS = 3000;
|
|
540
|
+
const DEFAULT_DEDUPE_MAX_KEYS = 200;
|
|
539
541
|
function truncate$2(s, maxLen) {
|
|
540
542
|
if (!s)
|
|
541
543
|
return s;
|
|
@@ -569,6 +571,54 @@ function normalizeErrorLike(err, maxTextLength) {
|
|
|
569
571
|
const message = truncate$2(stringifyLogValue(err), maxTextLength);
|
|
570
572
|
return { message, name: '', stack: '' };
|
|
571
573
|
}
|
|
574
|
+
function createDedupeGuard(options) {
|
|
575
|
+
const cache = new Map(); // key -> lastReportAt
|
|
576
|
+
const maxKeys = Math.max(0, options.dedupeMaxKeys);
|
|
577
|
+
const windowMs = Math.max(0, options.dedupeWindowMs);
|
|
578
|
+
function touch(key, now) {
|
|
579
|
+
// refresh insertion order
|
|
580
|
+
if (cache.has(key))
|
|
581
|
+
cache.delete(key);
|
|
582
|
+
cache.set(key, now);
|
|
583
|
+
if (maxKeys > 0) {
|
|
584
|
+
while (cache.size > maxKeys) {
|
|
585
|
+
const first = cache.keys().next().value;
|
|
586
|
+
if (!first)
|
|
587
|
+
break;
|
|
588
|
+
cache.delete(first);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
return (key) => {
|
|
593
|
+
if (!key)
|
|
594
|
+
return true;
|
|
595
|
+
if (windowMs <= 0 || maxKeys === 0)
|
|
596
|
+
return true;
|
|
597
|
+
const now = Date.now();
|
|
598
|
+
const last = cache.get(key);
|
|
599
|
+
if (typeof last === 'number' && now - last < windowMs)
|
|
600
|
+
return false;
|
|
601
|
+
touch(key, now);
|
|
602
|
+
return true;
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
function buildErrorKey(type, payload) {
|
|
606
|
+
// 使用最核心、最稳定的字段构造签名,避免把瞬态字段(如 time)带入导致失效
|
|
607
|
+
const parts = [
|
|
608
|
+
type,
|
|
609
|
+
String(payload.source ?? ''),
|
|
610
|
+
String(payload.pagePath ?? ''),
|
|
611
|
+
String(payload.message ?? ''),
|
|
612
|
+
String(payload.errorName ?? ''),
|
|
613
|
+
String(payload.stack ?? ''),
|
|
614
|
+
String(payload.filename ?? ''),
|
|
615
|
+
String(payload.lineno ?? ''),
|
|
616
|
+
String(payload.colno ?? ''),
|
|
617
|
+
String(payload.tagName ?? ''),
|
|
618
|
+
String(payload.resourceUrl ?? ''),
|
|
619
|
+
];
|
|
620
|
+
return parts.join('|');
|
|
621
|
+
}
|
|
572
622
|
function installBrowserErrorMonitor(report, options) {
|
|
573
623
|
if (typeof window === 'undefined')
|
|
574
624
|
return;
|
|
@@ -576,6 +626,7 @@ function installBrowserErrorMonitor(report, options) {
|
|
|
576
626
|
if (w.__beLinkClsLoggerErrorInstalled__)
|
|
577
627
|
return;
|
|
578
628
|
w.__beLinkClsLoggerErrorInstalled__ = true;
|
|
629
|
+
const shouldReport = createDedupeGuard(options);
|
|
579
630
|
window.addEventListener('error', (event) => {
|
|
580
631
|
try {
|
|
581
632
|
if (!sampleHit$1(options.sampleRate))
|
|
@@ -598,6 +649,8 @@ function installBrowserErrorMonitor(report, options) {
|
|
|
598
649
|
if (e.stack)
|
|
599
650
|
payload.stack = e.stack;
|
|
600
651
|
}
|
|
652
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
653
|
+
return;
|
|
601
654
|
report(options.reportType, payload);
|
|
602
655
|
return;
|
|
603
656
|
}
|
|
@@ -609,6 +662,8 @@ function installBrowserErrorMonitor(report, options) {
|
|
|
609
662
|
payload.source = 'resource.error';
|
|
610
663
|
payload.tagName = tagName;
|
|
611
664
|
payload.resourceUrl = truncate$2(url, 2000);
|
|
665
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
666
|
+
return;
|
|
612
667
|
report(options.reportType, payload);
|
|
613
668
|
}
|
|
614
669
|
}
|
|
@@ -629,6 +684,8 @@ function installBrowserErrorMonitor(report, options) {
|
|
|
629
684
|
errorName: e.name,
|
|
630
685
|
stack: e.stack,
|
|
631
686
|
};
|
|
687
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
688
|
+
return;
|
|
632
689
|
report(options.reportType, payload);
|
|
633
690
|
}
|
|
634
691
|
catch {
|
|
@@ -641,6 +698,7 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
641
698
|
if (g.__beLinkClsLoggerMpErrorInstalled__)
|
|
642
699
|
return;
|
|
643
700
|
g.__beLinkClsLoggerMpErrorInstalled__ = true;
|
|
701
|
+
const shouldReport = createDedupeGuard(options);
|
|
644
702
|
const wxAny = globalThis.wx;
|
|
645
703
|
// wx.* 事件(兼容在 App 已经创建后的场景)
|
|
646
704
|
try {
|
|
@@ -649,10 +707,13 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
649
707
|
try {
|
|
650
708
|
if (!sampleHit$1(options.sampleRate))
|
|
651
709
|
return;
|
|
652
|
-
|
|
710
|
+
const payload = {
|
|
653
711
|
source: 'wx.onError',
|
|
654
712
|
message: truncate$2(String(msg ?? ''), options.maxTextLength),
|
|
655
|
-
}
|
|
713
|
+
};
|
|
714
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
715
|
+
return;
|
|
716
|
+
report(options.reportType, payload);
|
|
656
717
|
}
|
|
657
718
|
catch {
|
|
658
719
|
// ignore
|
|
@@ -670,12 +731,15 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
670
731
|
if (!sampleHit$1(options.sampleRate))
|
|
671
732
|
return;
|
|
672
733
|
const e = normalizeErrorLike(res?.reason, options.maxTextLength);
|
|
673
|
-
|
|
734
|
+
const payload = {
|
|
674
735
|
source: 'wx.onUnhandledRejection',
|
|
675
736
|
message: e.message,
|
|
676
737
|
errorName: e.name,
|
|
677
738
|
stack: e.stack,
|
|
678
|
-
}
|
|
739
|
+
};
|
|
740
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
741
|
+
return;
|
|
742
|
+
report(options.reportType, payload);
|
|
679
743
|
}
|
|
680
744
|
catch {
|
|
681
745
|
// ignore
|
|
@@ -697,10 +761,12 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
697
761
|
next.onError = function (...args) {
|
|
698
762
|
try {
|
|
699
763
|
if (sampleHit$1(options.sampleRate)) {
|
|
700
|
-
|
|
764
|
+
const payload = {
|
|
701
765
|
source: 'App.onError',
|
|
702
766
|
message: truncate$2(String(args?.[0] ?? ''), options.maxTextLength),
|
|
703
|
-
}
|
|
767
|
+
};
|
|
768
|
+
if (shouldReport(buildErrorKey(options.reportType, payload)))
|
|
769
|
+
report(options.reportType, payload);
|
|
704
770
|
}
|
|
705
771
|
}
|
|
706
772
|
catch {
|
|
@@ -716,12 +782,14 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
716
782
|
if (sampleHit$1(options.sampleRate)) {
|
|
717
783
|
const reason = args?.[0]?.reason ?? args?.[0];
|
|
718
784
|
const e = normalizeErrorLike(reason, options.maxTextLength);
|
|
719
|
-
|
|
785
|
+
const payload = {
|
|
720
786
|
source: 'App.onUnhandledRejection',
|
|
721
787
|
message: e.message,
|
|
722
788
|
errorName: e.name,
|
|
723
789
|
stack: e.stack,
|
|
724
|
-
}
|
|
790
|
+
};
|
|
791
|
+
if (shouldReport(buildErrorKey(options.reportType, payload)))
|
|
792
|
+
report(options.reportType, payload);
|
|
725
793
|
}
|
|
726
794
|
}
|
|
727
795
|
catch {
|
|
@@ -750,6 +818,8 @@ function installErrorMonitor(report, opts = {}) {
|
|
|
750
818
|
sampleRate: raw.sampleRate ?? 1,
|
|
751
819
|
captureResourceError: raw.captureResourceError ?? true,
|
|
752
820
|
maxTextLength: raw.maxTextLength ?? DEFAULT_MAX_TEXT,
|
|
821
|
+
dedupeWindowMs: raw.dedupeWindowMs ?? DEFAULT_DEDUPE_WINDOW_MS,
|
|
822
|
+
dedupeMaxKeys: raw.dedupeMaxKeys ?? DEFAULT_DEDUPE_MAX_KEYS,
|
|
753
823
|
};
|
|
754
824
|
if (isMiniProgramEnv()) {
|
|
755
825
|
installMiniProgramErrorMonitor(report, options);
|
package/dist/index.js
CHANGED
|
@@ -540,6 +540,8 @@ function installRequestMonitor(report, opts = {}) {
|
|
|
540
540
|
}
|
|
541
541
|
|
|
542
542
|
const DEFAULT_MAX_TEXT = 4000;
|
|
543
|
+
const DEFAULT_DEDUPE_WINDOW_MS = 3000;
|
|
544
|
+
const DEFAULT_DEDUPE_MAX_KEYS = 200;
|
|
543
545
|
function truncate$2(s, maxLen) {
|
|
544
546
|
if (!s)
|
|
545
547
|
return s;
|
|
@@ -573,6 +575,54 @@ function normalizeErrorLike(err, maxTextLength) {
|
|
|
573
575
|
const message = truncate$2(stringifyLogValue(err), maxTextLength);
|
|
574
576
|
return { message, name: '', stack: '' };
|
|
575
577
|
}
|
|
578
|
+
function createDedupeGuard(options) {
|
|
579
|
+
const cache = new Map(); // key -> lastReportAt
|
|
580
|
+
const maxKeys = Math.max(0, options.dedupeMaxKeys);
|
|
581
|
+
const windowMs = Math.max(0, options.dedupeWindowMs);
|
|
582
|
+
function touch(key, now) {
|
|
583
|
+
// refresh insertion order
|
|
584
|
+
if (cache.has(key))
|
|
585
|
+
cache.delete(key);
|
|
586
|
+
cache.set(key, now);
|
|
587
|
+
if (maxKeys > 0) {
|
|
588
|
+
while (cache.size > maxKeys) {
|
|
589
|
+
const first = cache.keys().next().value;
|
|
590
|
+
if (!first)
|
|
591
|
+
break;
|
|
592
|
+
cache.delete(first);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
return (key) => {
|
|
597
|
+
if (!key)
|
|
598
|
+
return true;
|
|
599
|
+
if (windowMs <= 0 || maxKeys === 0)
|
|
600
|
+
return true;
|
|
601
|
+
const now = Date.now();
|
|
602
|
+
const last = cache.get(key);
|
|
603
|
+
if (typeof last === 'number' && now - last < windowMs)
|
|
604
|
+
return false;
|
|
605
|
+
touch(key, now);
|
|
606
|
+
return true;
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
function buildErrorKey(type, payload) {
|
|
610
|
+
// 使用最核心、最稳定的字段构造签名,避免把瞬态字段(如 time)带入导致失效
|
|
611
|
+
const parts = [
|
|
612
|
+
type,
|
|
613
|
+
String(payload.source ?? ''),
|
|
614
|
+
String(payload.pagePath ?? ''),
|
|
615
|
+
String(payload.message ?? ''),
|
|
616
|
+
String(payload.errorName ?? ''),
|
|
617
|
+
String(payload.stack ?? ''),
|
|
618
|
+
String(payload.filename ?? ''),
|
|
619
|
+
String(payload.lineno ?? ''),
|
|
620
|
+
String(payload.colno ?? ''),
|
|
621
|
+
String(payload.tagName ?? ''),
|
|
622
|
+
String(payload.resourceUrl ?? ''),
|
|
623
|
+
];
|
|
624
|
+
return parts.join('|');
|
|
625
|
+
}
|
|
576
626
|
function installBrowserErrorMonitor(report, options) {
|
|
577
627
|
if (typeof window === 'undefined')
|
|
578
628
|
return;
|
|
@@ -580,6 +630,7 @@ function installBrowserErrorMonitor(report, options) {
|
|
|
580
630
|
if (w.__beLinkClsLoggerErrorInstalled__)
|
|
581
631
|
return;
|
|
582
632
|
w.__beLinkClsLoggerErrorInstalled__ = true;
|
|
633
|
+
const shouldReport = createDedupeGuard(options);
|
|
583
634
|
window.addEventListener('error', (event) => {
|
|
584
635
|
try {
|
|
585
636
|
if (!sampleHit$1(options.sampleRate))
|
|
@@ -602,6 +653,8 @@ function installBrowserErrorMonitor(report, options) {
|
|
|
602
653
|
if (e.stack)
|
|
603
654
|
payload.stack = e.stack;
|
|
604
655
|
}
|
|
656
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
657
|
+
return;
|
|
605
658
|
report(options.reportType, payload);
|
|
606
659
|
return;
|
|
607
660
|
}
|
|
@@ -613,6 +666,8 @@ function installBrowserErrorMonitor(report, options) {
|
|
|
613
666
|
payload.source = 'resource.error';
|
|
614
667
|
payload.tagName = tagName;
|
|
615
668
|
payload.resourceUrl = truncate$2(url, 2000);
|
|
669
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
670
|
+
return;
|
|
616
671
|
report(options.reportType, payload);
|
|
617
672
|
}
|
|
618
673
|
}
|
|
@@ -633,6 +688,8 @@ function installBrowserErrorMonitor(report, options) {
|
|
|
633
688
|
errorName: e.name,
|
|
634
689
|
stack: e.stack,
|
|
635
690
|
};
|
|
691
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
692
|
+
return;
|
|
636
693
|
report(options.reportType, payload);
|
|
637
694
|
}
|
|
638
695
|
catch {
|
|
@@ -645,6 +702,7 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
645
702
|
if (g.__beLinkClsLoggerMpErrorInstalled__)
|
|
646
703
|
return;
|
|
647
704
|
g.__beLinkClsLoggerMpErrorInstalled__ = true;
|
|
705
|
+
const shouldReport = createDedupeGuard(options);
|
|
648
706
|
const wxAny = globalThis.wx;
|
|
649
707
|
// wx.* 事件(兼容在 App 已经创建后的场景)
|
|
650
708
|
try {
|
|
@@ -653,10 +711,13 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
653
711
|
try {
|
|
654
712
|
if (!sampleHit$1(options.sampleRate))
|
|
655
713
|
return;
|
|
656
|
-
|
|
714
|
+
const payload = {
|
|
657
715
|
source: 'wx.onError',
|
|
658
716
|
message: truncate$2(String(msg ?? ''), options.maxTextLength),
|
|
659
|
-
}
|
|
717
|
+
};
|
|
718
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
719
|
+
return;
|
|
720
|
+
report(options.reportType, payload);
|
|
660
721
|
}
|
|
661
722
|
catch {
|
|
662
723
|
// ignore
|
|
@@ -674,12 +735,15 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
674
735
|
if (!sampleHit$1(options.sampleRate))
|
|
675
736
|
return;
|
|
676
737
|
const e = normalizeErrorLike(res?.reason, options.maxTextLength);
|
|
677
|
-
|
|
738
|
+
const payload = {
|
|
678
739
|
source: 'wx.onUnhandledRejection',
|
|
679
740
|
message: e.message,
|
|
680
741
|
errorName: e.name,
|
|
681
742
|
stack: e.stack,
|
|
682
|
-
}
|
|
743
|
+
};
|
|
744
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
745
|
+
return;
|
|
746
|
+
report(options.reportType, payload);
|
|
683
747
|
}
|
|
684
748
|
catch {
|
|
685
749
|
// ignore
|
|
@@ -701,10 +765,12 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
701
765
|
next.onError = function (...args) {
|
|
702
766
|
try {
|
|
703
767
|
if (sampleHit$1(options.sampleRate)) {
|
|
704
|
-
|
|
768
|
+
const payload = {
|
|
705
769
|
source: 'App.onError',
|
|
706
770
|
message: truncate$2(String(args?.[0] ?? ''), options.maxTextLength),
|
|
707
|
-
}
|
|
771
|
+
};
|
|
772
|
+
if (shouldReport(buildErrorKey(options.reportType, payload)))
|
|
773
|
+
report(options.reportType, payload);
|
|
708
774
|
}
|
|
709
775
|
}
|
|
710
776
|
catch {
|
|
@@ -720,12 +786,14 @@ function installMiniProgramErrorMonitor(report, options) {
|
|
|
720
786
|
if (sampleHit$1(options.sampleRate)) {
|
|
721
787
|
const reason = args?.[0]?.reason ?? args?.[0];
|
|
722
788
|
const e = normalizeErrorLike(reason, options.maxTextLength);
|
|
723
|
-
|
|
789
|
+
const payload = {
|
|
724
790
|
source: 'App.onUnhandledRejection',
|
|
725
791
|
message: e.message,
|
|
726
792
|
errorName: e.name,
|
|
727
793
|
stack: e.stack,
|
|
728
|
-
}
|
|
794
|
+
};
|
|
795
|
+
if (shouldReport(buildErrorKey(options.reportType, payload)))
|
|
796
|
+
report(options.reportType, payload);
|
|
729
797
|
}
|
|
730
798
|
}
|
|
731
799
|
catch {
|
|
@@ -754,6 +822,8 @@ function installErrorMonitor(report, opts = {}) {
|
|
|
754
822
|
sampleRate: raw.sampleRate ?? 1,
|
|
755
823
|
captureResourceError: raw.captureResourceError ?? true,
|
|
756
824
|
maxTextLength: raw.maxTextLength ?? DEFAULT_MAX_TEXT,
|
|
825
|
+
dedupeWindowMs: raw.dedupeWindowMs ?? DEFAULT_DEDUPE_WINDOW_MS,
|
|
826
|
+
dedupeMaxKeys: raw.dedupeMaxKeys ?? DEFAULT_DEDUPE_MAX_KEYS,
|
|
757
827
|
};
|
|
758
828
|
if (isMiniProgramEnv()) {
|
|
759
829
|
installMiniProgramErrorMonitor(report, options);
|
package/dist/index.umd.js
CHANGED
|
@@ -540,6 +540,8 @@
|
|
|
540
540
|
}
|
|
541
541
|
|
|
542
542
|
const DEFAULT_MAX_TEXT = 4000;
|
|
543
|
+
const DEFAULT_DEDUPE_WINDOW_MS = 3000;
|
|
544
|
+
const DEFAULT_DEDUPE_MAX_KEYS = 200;
|
|
543
545
|
function truncate$2(s, maxLen) {
|
|
544
546
|
if (!s)
|
|
545
547
|
return s;
|
|
@@ -573,6 +575,54 @@
|
|
|
573
575
|
const message = truncate$2(stringifyLogValue(err), maxTextLength);
|
|
574
576
|
return { message, name: '', stack: '' };
|
|
575
577
|
}
|
|
578
|
+
function createDedupeGuard(options) {
|
|
579
|
+
const cache = new Map(); // key -> lastReportAt
|
|
580
|
+
const maxKeys = Math.max(0, options.dedupeMaxKeys);
|
|
581
|
+
const windowMs = Math.max(0, options.dedupeWindowMs);
|
|
582
|
+
function touch(key, now) {
|
|
583
|
+
// refresh insertion order
|
|
584
|
+
if (cache.has(key))
|
|
585
|
+
cache.delete(key);
|
|
586
|
+
cache.set(key, now);
|
|
587
|
+
if (maxKeys > 0) {
|
|
588
|
+
while (cache.size > maxKeys) {
|
|
589
|
+
const first = cache.keys().next().value;
|
|
590
|
+
if (!first)
|
|
591
|
+
break;
|
|
592
|
+
cache.delete(first);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
return (key) => {
|
|
597
|
+
if (!key)
|
|
598
|
+
return true;
|
|
599
|
+
if (windowMs <= 0 || maxKeys === 0)
|
|
600
|
+
return true;
|
|
601
|
+
const now = Date.now();
|
|
602
|
+
const last = cache.get(key);
|
|
603
|
+
if (typeof last === 'number' && now - last < windowMs)
|
|
604
|
+
return false;
|
|
605
|
+
touch(key, now);
|
|
606
|
+
return true;
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
function buildErrorKey(type, payload) {
|
|
610
|
+
// 使用最核心、最稳定的字段构造签名,避免把瞬态字段(如 time)带入导致失效
|
|
611
|
+
const parts = [
|
|
612
|
+
type,
|
|
613
|
+
String(payload.source ?? ''),
|
|
614
|
+
String(payload.pagePath ?? ''),
|
|
615
|
+
String(payload.message ?? ''),
|
|
616
|
+
String(payload.errorName ?? ''),
|
|
617
|
+
String(payload.stack ?? ''),
|
|
618
|
+
String(payload.filename ?? ''),
|
|
619
|
+
String(payload.lineno ?? ''),
|
|
620
|
+
String(payload.colno ?? ''),
|
|
621
|
+
String(payload.tagName ?? ''),
|
|
622
|
+
String(payload.resourceUrl ?? ''),
|
|
623
|
+
];
|
|
624
|
+
return parts.join('|');
|
|
625
|
+
}
|
|
576
626
|
function installBrowserErrorMonitor(report, options) {
|
|
577
627
|
if (typeof window === 'undefined')
|
|
578
628
|
return;
|
|
@@ -580,6 +630,7 @@
|
|
|
580
630
|
if (w.__beLinkClsLoggerErrorInstalled__)
|
|
581
631
|
return;
|
|
582
632
|
w.__beLinkClsLoggerErrorInstalled__ = true;
|
|
633
|
+
const shouldReport = createDedupeGuard(options);
|
|
583
634
|
window.addEventListener('error', (event) => {
|
|
584
635
|
try {
|
|
585
636
|
if (!sampleHit$1(options.sampleRate))
|
|
@@ -602,6 +653,8 @@
|
|
|
602
653
|
if (e.stack)
|
|
603
654
|
payload.stack = e.stack;
|
|
604
655
|
}
|
|
656
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
657
|
+
return;
|
|
605
658
|
report(options.reportType, payload);
|
|
606
659
|
return;
|
|
607
660
|
}
|
|
@@ -613,6 +666,8 @@
|
|
|
613
666
|
payload.source = 'resource.error';
|
|
614
667
|
payload.tagName = tagName;
|
|
615
668
|
payload.resourceUrl = truncate$2(url, 2000);
|
|
669
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
670
|
+
return;
|
|
616
671
|
report(options.reportType, payload);
|
|
617
672
|
}
|
|
618
673
|
}
|
|
@@ -633,6 +688,8 @@
|
|
|
633
688
|
errorName: e.name,
|
|
634
689
|
stack: e.stack,
|
|
635
690
|
};
|
|
691
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
692
|
+
return;
|
|
636
693
|
report(options.reportType, payload);
|
|
637
694
|
}
|
|
638
695
|
catch {
|
|
@@ -645,6 +702,7 @@
|
|
|
645
702
|
if (g.__beLinkClsLoggerMpErrorInstalled__)
|
|
646
703
|
return;
|
|
647
704
|
g.__beLinkClsLoggerMpErrorInstalled__ = true;
|
|
705
|
+
const shouldReport = createDedupeGuard(options);
|
|
648
706
|
const wxAny = globalThis.wx;
|
|
649
707
|
// wx.* 事件(兼容在 App 已经创建后的场景)
|
|
650
708
|
try {
|
|
@@ -653,10 +711,13 @@
|
|
|
653
711
|
try {
|
|
654
712
|
if (!sampleHit$1(options.sampleRate))
|
|
655
713
|
return;
|
|
656
|
-
|
|
714
|
+
const payload = {
|
|
657
715
|
source: 'wx.onError',
|
|
658
716
|
message: truncate$2(String(msg ?? ''), options.maxTextLength),
|
|
659
|
-
}
|
|
717
|
+
};
|
|
718
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
719
|
+
return;
|
|
720
|
+
report(options.reportType, payload);
|
|
660
721
|
}
|
|
661
722
|
catch {
|
|
662
723
|
// ignore
|
|
@@ -674,12 +735,15 @@
|
|
|
674
735
|
if (!sampleHit$1(options.sampleRate))
|
|
675
736
|
return;
|
|
676
737
|
const e = normalizeErrorLike(res?.reason, options.maxTextLength);
|
|
677
|
-
|
|
738
|
+
const payload = {
|
|
678
739
|
source: 'wx.onUnhandledRejection',
|
|
679
740
|
message: e.message,
|
|
680
741
|
errorName: e.name,
|
|
681
742
|
stack: e.stack,
|
|
682
|
-
}
|
|
743
|
+
};
|
|
744
|
+
if (!shouldReport(buildErrorKey(options.reportType, payload)))
|
|
745
|
+
return;
|
|
746
|
+
report(options.reportType, payload);
|
|
683
747
|
}
|
|
684
748
|
catch {
|
|
685
749
|
// ignore
|
|
@@ -701,10 +765,12 @@
|
|
|
701
765
|
next.onError = function (...args) {
|
|
702
766
|
try {
|
|
703
767
|
if (sampleHit$1(options.sampleRate)) {
|
|
704
|
-
|
|
768
|
+
const payload = {
|
|
705
769
|
source: 'App.onError',
|
|
706
770
|
message: truncate$2(String(args?.[0] ?? ''), options.maxTextLength),
|
|
707
|
-
}
|
|
771
|
+
};
|
|
772
|
+
if (shouldReport(buildErrorKey(options.reportType, payload)))
|
|
773
|
+
report(options.reportType, payload);
|
|
708
774
|
}
|
|
709
775
|
}
|
|
710
776
|
catch {
|
|
@@ -720,12 +786,14 @@
|
|
|
720
786
|
if (sampleHit$1(options.sampleRate)) {
|
|
721
787
|
const reason = args?.[0]?.reason ?? args?.[0];
|
|
722
788
|
const e = normalizeErrorLike(reason, options.maxTextLength);
|
|
723
|
-
|
|
789
|
+
const payload = {
|
|
724
790
|
source: 'App.onUnhandledRejection',
|
|
725
791
|
message: e.message,
|
|
726
792
|
errorName: e.name,
|
|
727
793
|
stack: e.stack,
|
|
728
|
-
}
|
|
794
|
+
};
|
|
795
|
+
if (shouldReport(buildErrorKey(options.reportType, payload)))
|
|
796
|
+
report(options.reportType, payload);
|
|
729
797
|
}
|
|
730
798
|
}
|
|
731
799
|
catch {
|
|
@@ -754,6 +822,8 @@
|
|
|
754
822
|
sampleRate: raw.sampleRate ?? 1,
|
|
755
823
|
captureResourceError: raw.captureResourceError ?? true,
|
|
756
824
|
maxTextLength: raw.maxTextLength ?? DEFAULT_MAX_TEXT,
|
|
825
|
+
dedupeWindowMs: raw.dedupeWindowMs ?? DEFAULT_DEDUPE_WINDOW_MS,
|
|
826
|
+
dedupeMaxKeys: raw.dedupeMaxKeys ?? DEFAULT_DEDUPE_MAX_KEYS,
|
|
757
827
|
};
|
|
758
828
|
if (isMiniProgramEnv()) {
|
|
759
829
|
installMiniProgramErrorMonitor(report, options);
|
package/dist/types.d.ts
CHANGED
|
@@ -155,6 +155,18 @@ export interface ErrorMonitorOptions {
|
|
|
155
155
|
captureResourceError?: boolean;
|
|
156
156
|
/** stack/message 最大长度(超出截断),默认 4000 */
|
|
157
157
|
maxTextLength?: number;
|
|
158
|
+
/**
|
|
159
|
+
* 错误去重窗口(ms)
|
|
160
|
+
* - 目的:避免同一错误在短时间内频繁触发导致重复上报
|
|
161
|
+
* - 行为:同一“错误签名”在窗口内只会上报一次
|
|
162
|
+
* - 默认:3000
|
|
163
|
+
*/
|
|
164
|
+
dedupeWindowMs?: number;
|
|
165
|
+
/**
|
|
166
|
+
* 去重缓存最大 key 数(超过会淘汰最早的 key)
|
|
167
|
+
* - 默认:200
|
|
168
|
+
*/
|
|
169
|
+
dedupeMaxKeys?: number;
|
|
158
170
|
}
|
|
159
171
|
export interface PerformanceMonitorOptions {
|
|
160
172
|
/** 是否开启,默认 true */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhE,sCAAsC;AACtC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC;AAEpC,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC;IAEtC,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wCAAwC;IACxC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;IAEjD;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAEzC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;CACpD;AAED,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACpC,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yBAAyB;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACpC,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB;IACtB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,sBAAsB;IACtB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,qBAAqB;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAE3B;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;;;WAIG;QACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,yBAAyB;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|