@dasasian/firebase-structured-logger 0.8.0 → 0.9.0
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/README.md +111 -15
- package/dist/client/logger.d.ts +16 -0
- package/dist/client/logger.d.ts.map +1 -1
- package/dist/client/logger.js +121 -16
- package/dist/client/logger.js.map +1 -1
- package/dist/client/rateLimiter.d.ts +98 -10
- package/dist/client/rateLimiter.d.ts.map +1 -1
- package/dist/client/rateLimiter.js +282 -18
- package/dist/client/rateLimiter.js.map +1 -1
- package/dist/functions/logHandler.d.ts.map +1 -1
- package/dist/functions/logHandler.js +1 -0
- package/dist/functions/logHandler.js.map +1 -1
- package/dist/functions/logger.d.ts.map +1 -1
- package/dist/functions/logger.js +232 -10
- package/dist/functions/logger.js.map +1 -1
- package/dist/shared/types.d.ts +7 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/skills/query-logs/SKILL.md +35 -0
package/dist/functions/logger.js
CHANGED
|
@@ -75,6 +75,22 @@ function writeEntry(entry) {
|
|
|
75
75
|
entryWriter ??= loadFirebaseWrite() ?? writeJsonLine;
|
|
76
76
|
entryWriter(entry);
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* JSON.stringify with a circular-safe replacer: a self-referencing object is
|
|
80
|
+
* written as "[Circular]" rather than throwing. Shared by writeJsonLine and the
|
|
81
|
+
* entry-size budget below — both have to measure/emit the exact same bytes.
|
|
82
|
+
*/
|
|
83
|
+
function safeStringify(value) {
|
|
84
|
+
const seen = new WeakSet();
|
|
85
|
+
return JSON.stringify(value, (_key, v) => {
|
|
86
|
+
if (typeof v !== "object" || v === null)
|
|
87
|
+
return v;
|
|
88
|
+
if (seen.has(v))
|
|
89
|
+
return "[Circular]";
|
|
90
|
+
seen.add(v);
|
|
91
|
+
return v;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
78
94
|
/**
|
|
79
95
|
* What firebase-functions' `write()` does, minus the trace id: one JSON line, WARNING
|
|
80
96
|
* and above to stderr and the rest to stdout (its console mapping), and a
|
|
@@ -86,18 +102,164 @@ function writeEntry(entry) {
|
|
|
86
102
|
* `console`, and a patched `console.error` would wrap this line a second time.
|
|
87
103
|
*/
|
|
88
104
|
function writeJsonLine(entry) {
|
|
89
|
-
const
|
|
90
|
-
const line = JSON.stringify(entry, (_key, value) => {
|
|
91
|
-
if (typeof value !== "object" || value === null)
|
|
92
|
-
return value;
|
|
93
|
-
if (seen.has(value))
|
|
94
|
-
return "[Circular]";
|
|
95
|
-
seen.add(value);
|
|
96
|
-
return value;
|
|
97
|
-
});
|
|
105
|
+
const line = safeStringify(entry);
|
|
98
106
|
const toStderr = (0, severity_1.isLogSeverity)(entry.severity) && severity_1.SEVERITY_ORDER[entry.severity] <= severity_1.SEVERITY_ORDER.WARNING;
|
|
99
107
|
(toStderr ? process.stderr : process.stdout).write(line + "\n");
|
|
100
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Cloud Functions and Cloud Run both cut a stdout/stderr log line at exactly
|
|
111
|
+
* 102,400 bytes (100 KiB) — past that, the platform delivers it as broken
|
|
112
|
+
* plain text with no severity or labels, and Error Reporting never sees it
|
|
113
|
+
* (issue #21). The margin below that ceiling covers firebase-functions adding
|
|
114
|
+
* its own trace field after this measurement, plus multi-byte UTF-8
|
|
115
|
+
* characters, which count for more bytes than JS string length.
|
|
116
|
+
*/
|
|
117
|
+
const MAX_ENTRY_BYTES = 90 * 1024;
|
|
118
|
+
const MAX_FIELD_BYTES = 8 * 1024;
|
|
119
|
+
const MAX_LABEL_BYTES = 1024;
|
|
120
|
+
const OVERFLOW_ATTACHMENT_NAME = "fsl-overflow.json";
|
|
121
|
+
const STACK_TRUNCATION_MARKER = " … truncated by fsl";
|
|
122
|
+
function entryByteLength(entry) {
|
|
123
|
+
return Buffer.byteLength(safeStringify(entry), "utf-8");
|
|
124
|
+
}
|
|
125
|
+
/** Cut a string to `maxBytes` UTF-8 bytes, ending in "…" when it was cut. */
|
|
126
|
+
function truncateToBytes(text, maxBytes) {
|
|
127
|
+
if (Buffer.byteLength(text, "utf-8") <= maxBytes)
|
|
128
|
+
return text;
|
|
129
|
+
// Binary search the largest prefix (in UTF-16 code units) whose UTF-8
|
|
130
|
+
// encoding still fits, leaving room for the ellipsis.
|
|
131
|
+
let lo = 0;
|
|
132
|
+
let hi = text.length;
|
|
133
|
+
while (lo < hi) {
|
|
134
|
+
const mid = Math.ceil((lo + hi) / 2);
|
|
135
|
+
if (Buffer.byteLength(text.slice(0, mid), "utf-8") <= maxBytes - 3)
|
|
136
|
+
lo = mid;
|
|
137
|
+
else
|
|
138
|
+
hi = mid - 1;
|
|
139
|
+
}
|
|
140
|
+
return text.slice(0, lo) + "…";
|
|
141
|
+
}
|
|
142
|
+
/** Keep the first `keepLines` lines of a stack, noting that it was cut. */
|
|
143
|
+
function truncateStackLines(stack, keepLines) {
|
|
144
|
+
const lines = stack.split("\n");
|
|
145
|
+
if (lines.length <= keepLines)
|
|
146
|
+
return stack;
|
|
147
|
+
return [...lines.slice(0, keepLines), STACK_TRUNCATION_MARKER].join("\n");
|
|
148
|
+
}
|
|
149
|
+
// Top-level keys writeLog itself puts on the entry, or that it spreads
|
|
150
|
+
// straight from jsonPayload.error/breadcrumbs. Anything else spread from
|
|
151
|
+
// jsonPayload (context, or a future field) is an "other payload key" for
|
|
152
|
+
// shrink step (b). severity, the two logging.googleapis.com/* keys and
|
|
153
|
+
// serviceContext are never removed by any step.
|
|
154
|
+
const PROTECTED_ENTRY_KEYS = new Set([
|
|
155
|
+
"severity",
|
|
156
|
+
"timestamp",
|
|
157
|
+
"message",
|
|
158
|
+
"logging.googleapis.com/labels",
|
|
159
|
+
"logging.googleapis.com/trace",
|
|
160
|
+
"stack_trace",
|
|
161
|
+
"serviceContext",
|
|
162
|
+
"error",
|
|
163
|
+
"breadcrumbs",
|
|
164
|
+
"timestamp",
|
|
165
|
+
]);
|
|
166
|
+
/** Keep only the last 10 breadcrumbs, each with its `data` field removed. */
|
|
167
|
+
function shrinkBreadcrumbs(breadcrumbs) {
|
|
168
|
+
return breadcrumbs.slice(-10).map(({ data: _data, ...rest }) => rest);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Shrink a too-large entry, re-measuring after each step and stopping as soon
|
|
172
|
+
* as it fits under MAX_ENTRY_BYTES. Order runs from least to most useful:
|
|
173
|
+
* breadcrumb `data` first, then whole non-error payload keys, then the tail of
|
|
174
|
+
* a stack (Error Reporting groups on the top frames, so those are kept
|
|
175
|
+
* longest), then long text fields, and label values only as a last resort.
|
|
176
|
+
*
|
|
177
|
+
* Builds new objects at every step — the caller's original entry (and the
|
|
178
|
+
* copy saved as the overflow attachment) must not be mutated.
|
|
179
|
+
*/
|
|
180
|
+
function shrinkEntry(original) {
|
|
181
|
+
const fits = (entry) => entryByteLength(entry) <= MAX_ENTRY_BYTES;
|
|
182
|
+
let entry = original;
|
|
183
|
+
if (fits(entry))
|
|
184
|
+
return entry;
|
|
185
|
+
// a. breadcrumbs -> last 10, without `data`.
|
|
186
|
+
if (Array.isArray(entry.breadcrumbs)) {
|
|
187
|
+
entry = { ...entry, breadcrumbs: shrinkBreadcrumbs(entry.breadcrumbs) };
|
|
188
|
+
if (fits(entry))
|
|
189
|
+
return entry;
|
|
190
|
+
}
|
|
191
|
+
// b. every other jsonPayload key (context, and anything else a caller adds).
|
|
192
|
+
const extraKeys = Object.keys(entry).filter((k) => !PROTECTED_ENTRY_KEYS.has(k));
|
|
193
|
+
if (extraKeys.length > 0) {
|
|
194
|
+
const trimmed = { ...entry };
|
|
195
|
+
for (const key of extraKeys)
|
|
196
|
+
delete trimmed[key];
|
|
197
|
+
entry = trimmed;
|
|
198
|
+
if (fits(entry))
|
|
199
|
+
return entry;
|
|
200
|
+
}
|
|
201
|
+
// c. stack_trace and error.stack -> the top frames matter most, so cut
|
|
202
|
+
// harder in steps rather than all the way in one go.
|
|
203
|
+
const originalStackTrace = typeof entry.stack_trace === "string" ? entry.stack_trace : undefined;
|
|
204
|
+
const originalError = entry.error;
|
|
205
|
+
const originalErrorStack = typeof originalError?.stack === "string" ? originalError.stack : undefined;
|
|
206
|
+
if (originalStackTrace !== undefined || originalErrorStack !== undefined) {
|
|
207
|
+
for (const keepLines of [30, 15, 7, 3, 1]) {
|
|
208
|
+
const next = { ...entry };
|
|
209
|
+
if (originalStackTrace !== undefined) {
|
|
210
|
+
next.stack_trace = truncateStackLines(originalStackTrace, keepLines);
|
|
211
|
+
}
|
|
212
|
+
if (originalErrorStack !== undefined) {
|
|
213
|
+
next.error = { ...originalError, stack: truncateStackLines(originalErrorStack, keepLines) };
|
|
214
|
+
}
|
|
215
|
+
entry = next;
|
|
216
|
+
if (fits(entry))
|
|
217
|
+
return entry;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// d. message, error.message and error.cause -> 8 KiB each.
|
|
221
|
+
{
|
|
222
|
+
const next = { ...entry };
|
|
223
|
+
if (typeof next.message === "string")
|
|
224
|
+
next.message = truncateToBytes(next.message, MAX_FIELD_BYTES);
|
|
225
|
+
const error = next.error;
|
|
226
|
+
if (error) {
|
|
227
|
+
const nextError = { ...error };
|
|
228
|
+
if (typeof nextError.message === "string")
|
|
229
|
+
nextError.message = truncateToBytes(nextError.message, MAX_FIELD_BYTES);
|
|
230
|
+
if (typeof nextError.cause === "string")
|
|
231
|
+
nextError.cause = truncateToBytes(nextError.cause, MAX_FIELD_BYTES);
|
|
232
|
+
next.error = nextError;
|
|
233
|
+
}
|
|
234
|
+
entry = next;
|
|
235
|
+
if (fits(entry))
|
|
236
|
+
return entry;
|
|
237
|
+
}
|
|
238
|
+
// e. last resort: any label value over 1 KiB.
|
|
239
|
+
const labels = entry["logging.googleapis.com/labels"];
|
|
240
|
+
if (labels) {
|
|
241
|
+
const nextLabels = {};
|
|
242
|
+
for (const [k, v] of Object.entries(labels)) {
|
|
243
|
+
nextLabels[k] = Buffer.byteLength(v, "utf-8") > MAX_LABEL_BYTES ? truncateToBytes(v, MAX_LABEL_BYTES) : v;
|
|
244
|
+
}
|
|
245
|
+
entry = { ...entry, "logging.googleapis.com/labels": nextLabels };
|
|
246
|
+
}
|
|
247
|
+
return entry;
|
|
248
|
+
}
|
|
249
|
+
// Warned once per process, not per entry — an app producing one oversized
|
|
250
|
+
// entry usually produces many, and the cause is the same every time.
|
|
251
|
+
let warnedOverBudget = false;
|
|
252
|
+
function warnOverBudget(objectPath) {
|
|
253
|
+
if (warnedOverBudget)
|
|
254
|
+
return;
|
|
255
|
+
warnedOverBudget = true;
|
|
256
|
+
console.warn(`[fsl] A log entry was over ${MAX_ENTRY_BYTES} bytes. Cloud Functions and Cloud Run cut a ` +
|
|
257
|
+
"line at 102,400 bytes and it would have arrived broken, so it was shortened before writing.");
|
|
258
|
+
console.warn(objectPath
|
|
259
|
+
? `[fsl] The full entry was saved to ${objectPath}.`
|
|
260
|
+
: "[fsl] It was lost: there is no Storage to save the full entry to. " +
|
|
261
|
+
"Fix: name a bucket (createHttpLogHandler({ bucketName }) or configureAttachments({ bucket })).");
|
|
262
|
+
}
|
|
101
263
|
const IS_EMULATOR = process.env.FUNCTIONS_EMULATOR === "true";
|
|
102
264
|
exports.LOG_FILENAME = "dev.jsonl";
|
|
103
265
|
let globalConfig = null;
|
|
@@ -338,14 +500,74 @@ function writeLog(payload) {
|
|
|
338
500
|
// theirs IS populated it overwrites this, which is the right precedence: inside
|
|
339
501
|
// Cloud Functions their value is authoritative.
|
|
340
502
|
const trace = (0, traceContext_1.traceField)();
|
|
341
|
-
|
|
503
|
+
// A repeat summary is timestamped at `lastSeen`, not at the moment it was
|
|
504
|
+
// sent — see README, "Repeats are counted, not dropped". Anything else
|
|
505
|
+
// keeps Cloud Logging's own ingestion time: `labels.repeatCount` is the only
|
|
506
|
+
// signal that this is a summary, so a plain entry that happens to carry a
|
|
507
|
+
// `timestamp` (an unrelated caller, or a replay) has it ignored rather than
|
|
508
|
+
// trusted. Bounded to the last 8 days and no more than 5 minutes into the
|
|
509
|
+
// future, so a malformed or stale value cannot backdate — or postdate — an
|
|
510
|
+
// entry into or out of a retention window.
|
|
511
|
+
// Written as `{ seconds, nanos }`: an RFC 3339 *string* under `timestamp` is
|
|
512
|
+
// not one of the shapes Cloud Logging's agent reads (it takes this object, a
|
|
513
|
+
// timestampSeconds/timestampNanos pair, or a `time` string), so it stays in
|
|
514
|
+
// jsonPayload and the entry keeps its ingestion time. The smoke run caught it.
|
|
515
|
+
let summaryTimestamp;
|
|
516
|
+
if (labels.repeatCount !== undefined && payload.timestamp) {
|
|
517
|
+
const parsed = Date.parse(payload.timestamp);
|
|
518
|
+
if (!Number.isNaN(parsed)) {
|
|
519
|
+
const now = Date.now();
|
|
520
|
+
const eightDaysMs = 8 * 24 * 60 * 60 * 1000;
|
|
521
|
+
const fiveMinutesMs = 5 * 60 * 1000;
|
|
522
|
+
if (now - parsed <= eightDaysMs && parsed - now <= fiveMinutesMs) {
|
|
523
|
+
summaryTimestamp = { seconds: Math.floor(parsed / 1000), nanos: (parsed % 1000) * 1_000_000 };
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
const finishedEntry = {
|
|
342
528
|
severity,
|
|
343
529
|
message: payload.message,
|
|
344
530
|
"logging.googleapis.com/labels": labels,
|
|
345
531
|
...(trace ? { "logging.googleapis.com/trace": trace } : {}),
|
|
346
532
|
...errorReporting,
|
|
347
533
|
...jsonPayload,
|
|
534
|
+
// Last, so a payload field of the same name cannot replace it.
|
|
535
|
+
...(summaryTimestamp ? { timestamp: summaryTimestamp } : {}),
|
|
536
|
+
};
|
|
537
|
+
if (entryByteLength(finishedEntry) <= MAX_ENTRY_BYTES) {
|
|
538
|
+
writeEntry(finishedEntry);
|
|
539
|
+
return;
|
|
540
|
+
}
|
|
541
|
+
// Over budget. Resolve a bucket for the overflow attachment the same way
|
|
542
|
+
// attachments do: firebase-admin can throw synchronously with no
|
|
543
|
+
// initialised app, and that is "no Storage", not a crash.
|
|
544
|
+
let overflowBucket = null;
|
|
545
|
+
try {
|
|
546
|
+
overflowBucket = (0, sourceMapCache_1.getAttachmentBucket)();
|
|
547
|
+
}
|
|
548
|
+
catch (err) {
|
|
549
|
+
console.warn("[fsl] Log attachment upload failed:", err);
|
|
550
|
+
}
|
|
551
|
+
const overflowPath = (0, paths_js_1.attachmentPath)(logId, OVERFLOW_ATTACHMENT_NAME, (0, sourceMapCache_1.getAttachmentPrefix)());
|
|
552
|
+
const shrunkEntry = shrinkEntry(finishedEntry);
|
|
553
|
+
const shrunkLabels = {
|
|
554
|
+
...shrunkEntry["logging.googleapis.com/labels"],
|
|
555
|
+
truncated: "true",
|
|
556
|
+
...(overflowBucket ? { hasAttachments: "true" } : {}),
|
|
557
|
+
};
|
|
558
|
+
writeEntry({
|
|
559
|
+
...shrunkEntry,
|
|
560
|
+
"logging.googleapis.com/labels": shrunkLabels,
|
|
348
561
|
});
|
|
562
|
+
if (overflowBucket) {
|
|
563
|
+
overflowBucket
|
|
564
|
+
.file(overflowPath)
|
|
565
|
+
.save(Buffer.from(safeStringify(finishedEntry), "utf-8"))
|
|
566
|
+
.catch((err) => {
|
|
567
|
+
console.warn(`[fsl] Overflow upload failed for ${overflowPath}:`, err);
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
warnOverBudget(overflowBucket ? overflowPath : undefined);
|
|
349
571
|
}
|
|
350
572
|
function logAttachmentsToBase64(logAttachments) {
|
|
351
573
|
if (!logAttachments)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/functions/logger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/functions/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -26,6 +26,13 @@ export interface LogPayload {
|
|
|
26
26
|
};
|
|
27
27
|
/** Base64-encoded attachments keyed by name. Uploaded to GCS, stripped before writing to Cloud Logging. */
|
|
28
28
|
attachments?: Record<string, string>;
|
|
29
|
+
/**
|
|
30
|
+
* Client-supplied ISO timestamp. Only honoured for a repeat summary
|
|
31
|
+
* (`labels.repeatCount` present), and only within the last 8 days and not
|
|
32
|
+
* more than 5 minutes in the future — see `writeLog`'s production branch.
|
|
33
|
+
* Anything else keeps the server's own time.
|
|
34
|
+
*/
|
|
35
|
+
timestamp?: string;
|
|
29
36
|
}
|
|
30
37
|
export interface BreadcrumbEntry {
|
|
31
38
|
timestamp: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAE3E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,WAAW,CAAA;IACrB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACvD,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,eAAe,EAAE,CAAA;QAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,KAAK,CAAC,EAAE,YAAY,CAAA;KACrB,CAAA;IACD,2GAA2G;IAC3G,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAE3E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,WAAW,CAAA;IACrB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACvD,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,eAAe,EAAE,CAAA;QAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,KAAK,CAAC,EAAE,YAAY,CAAA;KACrB,CAAA;IACD,2GAA2G;IAC3G,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,CAAA;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dasasian/firebase-structured-logger",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Structured logging for Firebase and Google Cloud web apps — browser, backend, and tools",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Dasasian",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"build:watch": "tsc --watch",
|
|
69
69
|
"clean": "rm -rf dist",
|
|
70
70
|
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.check.json",
|
|
71
|
-
"test": "tsx tests/logger.ts && tsx tests/browserBundle.ts && tsx tests/breadcrumbs.ts && tsx tests/rateLimiter.ts && tsx tests/errorHandler.ts && tsx tests/attachments.ts && tsx tests/feedback.ts && tsx tests/paths.ts && tsx tests/loadsWithoutOptionalPeers.ts && tsx tests/sourceMapStripping.ts && FUNCTIONS_EMULATOR=true tsx tests/errorPayload.ts && FUNCTIONS_EMULATOR=true tsx tests/requestLogger.ts && FUNCTIONS_EMULATOR=true tsx tests/handler.ts && FUNCTIONS_EMULATOR=true tsx tests/httpHandler.ts && FUNCTIONS_EMULATOR=true tsx tests/symbolication.ts && FUNCTIONS_EMULATOR=true tsx tests/publicApi.ts && FUNCTIONS_EMULATOR=true tsx tests/configureTwice.ts && tsx tests/productionOutput.ts && tsx tests/storageChain.ts && tsx tests/handlerSymbolication.ts && tsx tests/releaseResolution.ts && tsx tests/sourceMapCacheBounds.ts",
|
|
71
|
+
"test": "tsx tests/logger.ts && tsx tests/browserBundle.ts && tsx tests/breadcrumbs.ts && tsx tests/rateLimiter.ts && tsx tests/errorHandler.ts && tsx tests/attachments.ts && tsx tests/feedback.ts && tsx tests/paths.ts && tsx tests/loadsWithoutOptionalPeers.ts && tsx tests/sourceMapStripping.ts && FUNCTIONS_EMULATOR=true tsx tests/errorPayload.ts && FUNCTIONS_EMULATOR=true tsx tests/requestLogger.ts && FUNCTIONS_EMULATOR=true tsx tests/handler.ts && FUNCTIONS_EMULATOR=true tsx tests/httpHandler.ts && FUNCTIONS_EMULATOR=true tsx tests/symbolication.ts && FUNCTIONS_EMULATOR=true tsx tests/publicApi.ts && FUNCTIONS_EMULATOR=true tsx tests/configureTwice.ts && tsx tests/productionOutput.ts && tsx tests/storageChain.ts && tsx tests/entrySize.ts && tsx tests/handlerSymbolication.ts && tsx tests/releaseResolution.ts && tsx tests/sourceMapCacheBounds.ts",
|
|
72
72
|
"prepublishOnly": "npm run clean && npm run build",
|
|
73
73
|
"smoke:deploy": "cd smoke/functions && npm install && npm run build && cd .. && firebase deploy --only functions --project $(grep '^FSL_SMOKE_PROJECT=' .env.local | cut -d= -f2)",
|
|
74
74
|
"smoke:deploy:run": "bash smoke/cloudrun/deploy.sh",
|
|
@@ -25,6 +25,12 @@ All entries written by firebase-structured-logger include these labels:
|
|
|
25
25
|
| `functionName` | Cloud Function name (server-side logs only) |
|
|
26
26
|
| `logId` | ULID — unique per log entry, used to locate attachments in GCS |
|
|
27
27
|
| `hasAttachments` | `'true'` when attachments were uploaded alongside this entry |
|
|
28
|
+
| `repeatKey` | Client-side id carried by each full copy of an error that repeats |
|
|
29
|
+
| `repeatOf` | On a repeat summary: the `repeatKey` of the full copies it counts |
|
|
30
|
+
| `repeatCount` | On a repeat summary: how many further occurrences it stands for |
|
|
31
|
+
| `firstSeen`, `lastSeen` | On a repeat summary: the window those occurrences fell in |
|
|
32
|
+
| `sentLate` | `'true'` on a summary sent by a later visit than the one it counts |
|
|
33
|
+
| `truncated` | `'true'` when the entry was shortened to fit Cloud Logging's line limit |
|
|
28
34
|
|
|
29
35
|
App-specific labels are defined in each app's `AppLabels` type.
|
|
30
36
|
|
|
@@ -68,6 +74,35 @@ labels.releaseId="<hash>"
|
|
|
68
74
|
severity=ERROR timestamp>="<ISO8601>"
|
|
69
75
|
```
|
|
70
76
|
|
|
77
|
+
## How often did it really happen?
|
|
78
|
+
|
|
79
|
+
**Do not count entries.** A client sends an error in full only 3 times; after that it
|
|
80
|
+
counts the repeats and sends one `WARNING` summary per hour (and when the tab is hidden,
|
|
81
|
+
or on the user's next visit). Counting ERROR entries gives at most 3 per user, per
|
|
82
|
+
release, per hour — Cloud Error Reporting shows the same capped number.
|
|
83
|
+
|
|
84
|
+
The true count is the full copies plus the sum of `repeatCount`:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
labels.repeatKey="<key>" OR labels.repeatOf="<key>"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Take `repeatKey` from any full copy. Every entry this returns is one occurrence, except
|
|
91
|
+
summaries: each summary is `labels.repeatCount` occurrences, between `labels.firstSeen`
|
|
92
|
+
and `labels.lastSeen`. A summary is timestamped at `lastSeen`, and `sentLate="true"`
|
|
93
|
+
means it arrived on a later visit — it still belongs at its own time.
|
|
94
|
+
|
|
95
|
+
A summary has no stack and no breadcrumbs. For those, read one of the full copies.
|
|
96
|
+
|
|
97
|
+
## Shortened entries
|
|
98
|
+
|
|
99
|
+
Cloud Functions and Cloud Run cut a log line at 102,400 bytes, so the library shortens
|
|
100
|
+
any entry over 90 KiB before writing it: breadcrumb data, then other context, then the
|
|
101
|
+
tail of the stack. Such an entry carries `labels.truncated="true"`, and when Storage is
|
|
102
|
+
configured `labels.hasAttachments="true"` — the whole original entry is saved as
|
|
103
|
+
`logAttachments/{logId}/fsl-overflow.json`. Read that file (see below) whenever the
|
|
104
|
+
context or breadcrumbs you need are missing from a truncated entry.
|
|
105
|
+
|
|
71
106
|
## Retrieving Attachments
|
|
72
107
|
|
|
73
108
|
When a log entry has `labels.hasAttachments = "true"`, files were uploaded to GCS alongside it.
|