diff --git a/spec/logger.spec.ts b/spec/logger.spec.ts index a42a57ee3..2a25cf93e 100644 --- a/spec/logger.spec.ts +++ b/spec/logger.spec.ts @@ -1,6 +1,7 @@ import { expect } from "chai"; import * as logger from "../src/logger"; +import { setGlobalOptions } from "../src/v2"; describe("logger", () => { const stdoutWrite = process.stdout.write.bind(process.stdout); @@ -218,4 +219,26 @@ describe("logger", () => { }); }); }); + + describe("error logging stacktrace", () => { + it("should include stacktrace in error logs", () => { + const message = "Test error with stacktrace"; + logger.error(message); + const messageOutput = JSON.parse(lastErr.trim()).message; + + expect(messageOutput).to.include(`Error: ${message}`); + }); + + it("when disableErrorLoggingTraceback is set to true, should not log stacktrace", () => { + const message = "Test error with traceback disabled"; + setGlobalOptions({ + disableErrorLoggingTraceback: true, + }); + logger.error(message); + expectStderr({ + severity: "ERROR", + message: message, + }); + }); + }); }); diff --git a/src/logger/index.ts b/src/logger/index.ts index 2a2d85ae7..280b164ff 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -24,6 +24,7 @@ import { format } from "util"; import { traceContext } from "../common/trace"; import { CONSOLE_SEVERITY, UNPATCHED_CONSOLE } from "./common"; +import { getGlobalOptions } from "../v2/options"; /** * `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 { // mimic `console.*` behavior, see https://nodejs.org/api/console.html#console_console_log_data_args let message = format(...args); - if (severity === "ERROR" && !args.find((arg) => arg instanceof Error)) { + if ( + severity === "ERROR" && + !getGlobalOptions().disableErrorLoggingTraceback && + !args.find((arg) => arg instanceof Error) + ) { message = new Error(message).stack || message; } const out: LogEntry = { diff --git a/src/v2/options.ts b/src/v2/options.ts index 2b1731a77..f230c397d 100644 --- a/src/v2/options.ts +++ b/src/v2/options.ts @@ -232,6 +232,15 @@ export interface GlobalOptions { * may inadvertently be wiped out. */ preserveExternalChanges?: boolean; + + /** + * Controls whether error logging should include the traceback of the error automatically. + * Defaults to false. + * + * @remarks + * When true, the error message will include not include the traceback of the error. + */ + disableErrorLoggingTraceback?: boolean; } let globalOptions: GlobalOptions | undefined;