refactor(logging): Centralize all console messaging to a shared logger (part 1) (#11537)

This commit is contained in:
Abhi
2025-10-20 18:16:47 -04:00
committed by GitHub
parent d5a06d3cd2
commit 995ae717cc
18 changed files with 145 additions and 143 deletions
+5 -14
View File
@@ -36,6 +36,7 @@ import {
FatalConfigError,
getPty,
EDIT_TOOL_NAME,
debugLogger,
} from '@google/gemini-cli-core';
import type { Settings } from './settings.js';
@@ -49,16 +50,6 @@ import { isWorkspaceTrusted } from './trustedFolders.js';
import { createPolicyEngineConfig } from './policy.js';
import type { ExtensionEnablementManager } from './extensions/extensionEnablement.js';
// Simple console logger for now - replace with actual logger if available
const logger = {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
debug: (...args: any[]) => console.debug('[DEBUG]', ...args),
// eslint-disable-next-line @typescript-eslint/no-explicit-any
warn: (...args: any[]) => console.warn('[WARN]', ...args),
// eslint-disable-next-line @typescript-eslint/no-explicit-any
error: (...args: any[]) => console.error('[ERROR]', ...args),
};
export interface CliArgs {
query: string | undefined;
model: string | undefined;
@@ -210,7 +201,7 @@ export async function parseArguments(settings: Settings): Promise<CliArgs> {
)
// Ensure validation flows through .fail() for clean UX
.fail((msg, err, yargs) => {
console.error(msg || err?.message || 'Unknown error');
debugLogger.error(msg || err?.message || 'Unknown error');
yargs.showHelp();
process.exit(1);
})
@@ -313,7 +304,7 @@ export async function loadHierarchicalGeminiMemory(
const effectiveCwd = isHomeDirectory ? '' : currentWorkingDirectory;
if (debugMode) {
logger.debug(
debugLogger.debug(
`CLI: Delegating hierarchical memory load to server for CWD: ${currentWorkingDirectory} (memoryImportFormat: ${memoryImportFormat})`,
);
}
@@ -470,7 +461,7 @@ export async function loadCliConfig(
// Force approval mode to default if the folder is not trusted.
if (!trustedFolder && approvalMode !== ApprovalMode.DEFAULT) {
logger.warn(
debugLogger.warn(
`Approval mode overridden to "default" because the current folder is not trusted.`,
);
approvalMode = ApprovalMode.DEFAULT;
@@ -700,7 +691,7 @@ function mergeMcpServers(settings: Settings, extensions: GeminiCLIExtension[]) {
for (const extension of extensions) {
Object.entries(extension.mcpServers || {}).forEach(([key, server]) => {
if (mcpServers[key]) {
logger.warn(
debugLogger.warn(
`Skipping extension MCP config for server with key "${key}" as it already exists.`,
);
return;
+3 -2
View File
@@ -23,6 +23,7 @@ import {
logExtensionUninstall,
logExtensionUpdateEvent,
logExtensionDisable,
debugLogger,
} from '@google/gemini-cli-core';
import * as fs from 'node:fs';
import * as path from 'node:path';
@@ -233,7 +234,7 @@ export function loadExtension(
id,
};
} catch (e) {
console.error(
debugLogger.error(
`Warning: Skipping extension in ${effectiveExtensionPath}: ${getErrorMessage(
e,
)}`,
@@ -324,7 +325,7 @@ export function annotateActiveExtensions(
export async function requestConsentNonInteractive(
consentDescription: string,
): Promise<boolean> {
console.info(consentDescription);
debugLogger.log(consentDescription);
const result = await promptForConsentNonInteractive(
'Do you want to continue? [Y/n]: ',
);
+14 -11
View File
@@ -6,9 +6,10 @@
import { simpleGit } from 'simple-git';
import { getErrorMessage } from '../../utils/errors.js';
import type {
ExtensionInstallMetadata,
GeminiCLIExtension,
import {
debugLogger,
type ExtensionInstallMetadata,
type GeminiCLIExtension,
} from '@google/gemini-cli-core';
import { ExtensionUpdateState } from '../../ui/state/extensions.js';
import * as os from 'node:os';
@@ -160,7 +161,7 @@ export async function checkForExtensionUpdate(
workspaceDir: cwd,
});
if (!newExtension) {
console.error(
debugLogger.error(
`Failed to check for update for local extension "${extension.name}". Could not load extension from source path: ${installMetadata.source}`,
);
return ExtensionUpdateState.ERROR;
@@ -182,12 +183,14 @@ export async function checkForExtensionUpdate(
const git = simpleGit(extension.path);
const remotes = await git.getRemotes(true);
if (remotes.length === 0) {
console.error('No git remotes found.');
debugLogger.error('No git remotes found.');
return ExtensionUpdateState.ERROR;
}
const remoteUrl = remotes[0].refs.fetch;
if (!remoteUrl) {
console.error(`No fetch URL found for git remote ${remotes[0].name}.`);
debugLogger.error(
`No fetch URL found for git remote ${remotes[0].name}.`,
);
return ExtensionUpdateState.ERROR;
}
@@ -197,7 +200,7 @@ export async function checkForExtensionUpdate(
const lsRemoteOutput = await git.listRemote([remoteUrl, refToCheck]);
if (typeof lsRemoteOutput !== 'string' || lsRemoteOutput.trim() === '') {
console.error(`Git ref ${refToCheck} not found.`);
debugLogger.error(`Git ref ${refToCheck} not found.`);
return ExtensionUpdateState.ERROR;
}
@@ -205,7 +208,7 @@ export async function checkForExtensionUpdate(
const localHash = await git.revparse(['HEAD']);
if (!remoteHash) {
console.error(
debugLogger.error(
`Unable to parse hash from git ls-remote output "${lsRemoteOutput}"`,
);
return ExtensionUpdateState.ERROR;
@@ -217,12 +220,12 @@ export async function checkForExtensionUpdate(
} else {
const { source, releaseTag } = installMetadata;
if (!source) {
console.error(`No "source" provided for extension.`);
debugLogger.error(`No "source" provided for extension.`);
return ExtensionUpdateState.ERROR;
}
const repoInfo = tryParseGithubUrl(source);
if (!repoInfo) {
console.error(
debugLogger.error(
`Source is not a valid GitHub repository for release checks: ${source}`,
);
return ExtensionUpdateState.ERROR;
@@ -244,7 +247,7 @@ export async function checkForExtensionUpdate(
return ExtensionUpdateState.UP_TO_DATE;
}
} catch (error) {
console.error(
debugLogger.error(
`Failed to check for updates for extension "${installMetadata.source}": ${getErrorMessage(error)}`,
);
return ExtensionUpdateState.ERROR;
+2 -2
View File
@@ -18,7 +18,7 @@ import {
loadExtensionConfig,
} from '../extension.js';
import { checkForExtensionUpdate } from './github.js';
import type { GeminiCLIExtension } from '@google/gemini-cli-core';
import { debugLogger, type GeminiCLIExtension } from '@google/gemini-cli-core';
import * as fs from 'node:fs';
import { getErrorMessage } from '../../utils/errors.js';
@@ -101,7 +101,7 @@ export async function updateExtension(
updatedVersion,
};
} catch (e) {
console.error(
debugLogger.error(
`Error updating extension, rolling back. ${getErrorMessage(e)}`,
);
dispatchExtensionStateUpdate({