
















@@ -216,13 +216,15 @@ function formatConsoleLine(opts: {
216216const displaySubsystem =
217217opts.style === "json" ? opts.subsystem : formatSubsystemForConsole(opts.subsystem);
218218if (opts.style === "json") {
219-return JSON.stringify({
220-time: formatConsoleTimestamp("json"),
221-level: opts.level,
222-subsystem: displaySubsystem,
223-message: opts.message,
224- ...opts.meta,
225-});
219+return redactSensitiveText(
220+JSON.stringify({
221+time: formatConsoleTimestamp("json"),
222+level: opts.level,
223+subsystem: displaySubsystem,
224+message: opts.message,
225+ ...opts.meta,
226+}),
227+);
226228}
227229const color = getColorForConsole();
228230const prefix = `[${displaySubsystem}]`;
@@ -235,7 +237,8 @@ function formatConsoleLine(opts: {
235237 : opts.level === "debug" || opts.level === "trace"
236238 ? color.gray
237239 : color.cyan;
238-const displayMessage = stripRedundantSubsystemPrefixForConsole(opts.message, displaySubsystem);
240+const redactedMessage = redactSensitiveText(opts.message);
241+const displayMessage = stripRedundantSubsystemPrefixForConsole(redactedMessage, displaySubsystem);
239242const time = (() => {
240243if (opts.style === "pretty") {
241244return color.gray(formatConsoleTimestamp("pretty"));
@@ -250,18 +253,17 @@ function formatConsoleLine(opts: {
250253return `${head} ${levelColor(displayMessage)}`;
251254}
252255253-function writeConsoleLine(level: LogLevel, line: string) {
256+function writeConsoleLine(level: LogLevel, line: string, opts: { redacted?: boolean } = {}) {
254257clearActiveProgressLine();
255258const sanitized =
256259process.platform === "win32" && process.env.GITHUB_ACTIONS === "true"
257260 ? line.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, "?").replace(/[\uD800-\uDFFF]/g, "?")
258261 : line;
259262// Subsystem console output bypasses the patched console.* capture handler in
260-// ./console.ts to avoid recursion, so the sink-boundary redaction applied
261-// there does not run for these writes (#73284). Redact at this exit instead
262-// so secrets reaching subsystem loggers as message strings or formatted meta
263-// do not appear verbatim on the terminal.
264-const redacted = redactSensitiveText(sanitized);
263+// ./console.ts to avoid recursion. Normal formatted messages are redacted
264+// before colorization; keep this exit guard for raw writes and structured
265+// lines that reach the sink already serialized (#73284).
266+const redacted = opts.redacted ? sanitized : redactSensitiveText(sanitized);
265267const sink = loggingState.rawConsole ?? console;
266268if (loggingState.forceConsoleToStderr || level === "error" || level === "fatal") {
267269(sink.error ?? console.error)(redacted);
@@ -378,6 +380,7 @@ export function createSubsystemLogger(subsystem: string): SubsystemLogger {
378380style: consoleSettings.style,
379381meta: fileMeta,
380382}),
383+{ redacted: true },
381384);
382385};
383386此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。