Skip to content

Commit 243c6b1

Browse files
committed
feat: disable error logging stacktrace in message
1 parent 4559866 commit 243c6b1

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

spec/logger.spec.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { expect } from "chai";
22

33
import * as logger from "../src/logger";
4+
import { setGlobalOptions } from "../src/v2";
45

56
describe("logger", () => {
67
const stdoutWrite = process.stdout.write.bind(process.stdout);
@@ -218,4 +219,26 @@ describe("logger", () => {
218219
});
219220
});
220221
});
222+
223+
describe("error logging stacktrace", () => {
224+
it("should include stacktrace in error logs", () => {
225+
const message = "Test error with stacktrace";
226+
logger.error(message);
227+
const messageOutput = JSON.parse(lastErr.trim()).message;
228+
229+
expect(messageOutput).to.include(`Error: ${message}`);
230+
});
231+
232+
it("when disableErrorLoggingTraceback is set to true, should not log stacktrace", () => {
233+
const message = "Test error with traceback disabled";
234+
setGlobalOptions({
235+
disableErrorLoggingTraceback: true,
236+
});
237+
logger.error(message);
238+
expectStderr({
239+
severity: "ERROR",
240+
message: message,
241+
});
242+
});
243+
});
221244
});

src/logger/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { format } from "util";
2424
import { traceContext } from "../common/trace";
2525

2626
import { CONSOLE_SEVERITY, UNPATCHED_CONSOLE } from "./common";
27+
import { getGlobalOptions } from "../v2/options";
2728

2829
/**
2930
* `LogSeverity` indicates the detailed severity of the log entry. See [LogSeverity](https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#logseverity).
@@ -158,7 +159,11 @@ function entryFromArgs(severity: LogSeverity, args: any[]): LogEntry {
158159

159160
// mimic `console.*` behavior, see https://nodejs.org/api/console.html#console_console_log_data_args
160161
let message = format(...args);
161-
if (severity === "ERROR" && !args.find((arg) => arg instanceof Error)) {
162+
if (
163+
severity === "ERROR" &&
164+
!getGlobalOptions().disableErrorLoggingTraceback &&
165+
!args.find((arg) => arg instanceof Error)
166+
) {
162167
message = new Error(message).stack || message;
163168
}
164169
const out: LogEntry = {

src/v2/options.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,15 @@ export interface GlobalOptions {
232232
* may inadvertently be wiped out.
233233
*/
234234
preserveExternalChanges?: boolean;
235+
236+
/**
237+
* Controls whether error logging should include the traceback of the error automatically.
238+
* Defaults to false.
239+
*
240+
* @remarks
241+
* When true, the error message will include not include the traceback of the error.
242+
*/
243+
disableErrorLoggingTraceback?: boolean;
235244
}
236245

237246
let globalOptions: GlobalOptions | undefined;

0 commit comments

Comments
 (0)