Skip to content

Commit 5e1ca2c

Browse files
authored
Clean up debug logs, use pino to handle exception logging (#161)
1 parent c302671 commit 5e1ca2c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+102
-364
lines changed

src/ai/CfnAI.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { getFilteredScannedResources, formatScannedResourcesForAI } from '../ser
77
import { SettingsConfigurable, ISettingsSubscriber } from '../settings/ISettingsSubscriber';
88
import { LoggerFactory } from '../telemetry/LoggerFactory';
99
import { Closeable } from '../utils/Closeable';
10-
import { extractErrorMessage } from '../utils/Errors';
1110
import { toString } from '../utils/String';
1211
import { Agent } from './Agent';
1312
import { LLMConfig } from './llm/LLMConfig';
@@ -47,7 +46,7 @@ export class CfnAI implements SettingsConfigurable, Closeable {
4746
try {
4847
return (await this.mcpTools?.getAllTools()) ?? [];
4948
} catch (error) {
50-
logger.warn({ error: extractErrorMessage(error) }, 'Failed to get MCP tools, continuing without tools');
49+
logger.warn(error, 'Failed to get MCP tools, continuing without tools');
5150
return [];
5251
}
5352
}
@@ -129,7 +128,7 @@ export class CfnAI implements SettingsConfigurable, Closeable {
129128
logger.info('No resource scan available');
130129
}
131130
} catch (error) {
132-
logger.warn({ error: extractErrorMessage(error) }, 'Failed to get resource scan data');
131+
logger.warn(error, 'Failed to get resource scan data');
133132
}
134133

135134
return await agent.execute(

src/ai/McpTools.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { SettingsConfigurable, ISettingsSubscriber, SettingsSubscription } from
44
import { DefaultSettings, ProfileSettings } from '../settings/Settings';
55
import { LoggerFactory } from '../telemetry/LoggerFactory';
66
import { Closeable } from '../utils/Closeable';
7-
import { extractErrorMessage } from '../utils/Errors';
87

98
const logger = LoggerFactory.getLogger('McpTools');
109

@@ -57,7 +56,7 @@ export class McpTools implements SettingsConfigurable, Closeable {
5756
await this.mcpClient.initializeConnections();
5857
logger.info('Initialized MCP tools');
5958
} catch (error) {
60-
logger.error({ error: extractErrorMessage(error) }, 'Failed to initialize MCP tools');
59+
logger.error(error, 'Failed to initialize MCP tools');
6160
}
6261
}
6362

@@ -67,7 +66,7 @@ export class McpTools implements SettingsConfigurable, Closeable {
6766

6867
if (this.mcpClient) {
6968
await this.mcpClient.close().catch((error: unknown) => {
70-
logger.error({ error }, 'Failed to close MCP client');
69+
logger.error(error, 'Failed to close MCP client');
7170
});
7271
}
7372
await this.initializeMCP();

src/ai/llm/LLMConfig.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { homedir } from 'os';
33
import { join } from 'path';
44
import { DeepReadonly } from 'ts-essentials';
55
import { LoggerFactory } from '../../telemetry/LoggerFactory';
6-
import { extractErrorMessage } from '../../utils/Errors';
76
import { parseWithPrettyError } from '../../utils/ZodErrorWrapper';
87
import { LLMConfigType, parseLLMConfig } from './LLMTypes';
98

@@ -27,7 +26,7 @@ export class LLMConfig {
2726
logger.info({ provider: llmConfig.provider, model: llmConfig.model }, 'LLM configuration');
2827
return llmConfig;
2928
} catch (error) {
30-
logger.error(`Failed to parse LLM config. ${extractErrorMessage(error)}`);
29+
logger.error(error, `Failed to parse LLM config`);
3130
}
3231
}
3332

src/auth/AwsCredentials.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { LspAuthHandlers } from '../protocol/LspAuthHandlers';
55
import { DefaultSettings } from '../settings/Settings';
66
import { SettingsManager } from '../settings/SettingsManager';
77
import { LoggerFactory } from '../telemetry/LoggerFactory';
8-
import { extractErrorMessage } from '../utils/Errors';
98
import { getRegion } from '../utils/Region';
109
import { parseWithPrettyError } from '../utils/ZodErrorWrapper';
1110
import { UpdateCredentialsParams, IamCredentials } from './AwsLspAuthTypes';
@@ -63,7 +62,7 @@ export class AwsCredentials {
6362
} catch (error) {
6463
this.iamCredentials = undefined;
6564

66-
this.logger.error(`Failed to update IAM credentials: ${extractErrorMessage(error)}`);
65+
this.logger.error(error, `Failed to update IAM credentials`);
6766
this.settingsManager.updateProfileSettings(DefaultSettings.profile.profile, DefaultSettings.profile.region);
6867
return false;
6968
}

src/autocomplete/CompletionFormatter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export class CompletionFormatter {
4949
items: formattedItems,
5050
};
5151
} catch (error) {
52-
CompletionFormatter.log.warn({ error }, 'Failed to adapt completions');
52+
CompletionFormatter.log.warn(error, 'Failed to adapt completions');
5353
return completions;
5454
}
5555
}

src/autocomplete/ConditionCompletionProvider.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,6 @@ export class ConditionCompletionProvider implements CompletionProvider {
2222
public constructor(private readonly syntaxTreeManager: SyntaxTreeManager) {}
2323

2424
public getCompletions(context: Context, params: CompletionParams): CompletionItem[] | undefined {
25-
this.log.debug(
26-
{
27-
provider: 'Condition Completion',
28-
position: params.position,
29-
},
30-
'Processing condition completion request',
31-
);
32-
3325
const syntaxTree = this.syntaxTreeManager.getSyntaxTree(params.textDocument.uri);
3426
if (!syntaxTree) {
3527
return;

src/autocomplete/IntrinsicFunctionArgumentCompletionProvider.ts

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,6 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
7171
return undefined;
7272
}
7373

74-
log.debug(
75-
{
76-
provider: 'IntrinsicFunctionArgument',
77-
context: context.record(),
78-
intrinsicFunction: intrinsicFunction.type,
79-
args: intrinsicFunction.args,
80-
},
81-
'Processing intrinsic function argument completion request',
82-
);
83-
8474
// Route to specific handlers based on intrinsic function type
8575
switch (intrinsicFunction.type) {
8676
case IntrinsicFunction.Ref: {
@@ -106,14 +96,6 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
10696
params: CompletionParams,
10797
syntaxTree: SyntaxTree,
10898
): CompletionItem[] | undefined {
109-
log.debug(
110-
{
111-
provider: 'IntrinsicFunctionArgument',
112-
function: 'Ref',
113-
context: context.record(),
114-
},
115-
'Processing Ref argument completion',
116-
);
11799
const parametersAndResourcesCompletions = this.getParametersAndResourcesAsCompletionItems(
118100
context,
119101
params,
@@ -135,14 +117,6 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
135117
params: CompletionParams,
136118
syntaxTree: SyntaxTree,
137119
): CompletionItem[] | undefined {
138-
log.debug(
139-
{
140-
provider: 'IntrinsicFunctionArgument',
141-
function: 'Sub',
142-
context: context.record(),
143-
},
144-
'Processing Sub argument completion',
145-
);
146120
const parametersAndResourcesCompletions = this.getParametersAndResourcesAsCompletionItems(
147121
context,
148122
params,
@@ -193,34 +167,26 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
193167
syntaxTree: SyntaxTree,
194168
intrinsicFunction: IntrinsicFunctionInfo,
195169
): CompletionItem[] | undefined {
196-
log.debug(
197-
{ provider: 'FindInMap Completion', context: context.record() },
198-
'Processing FindInMap completion request',
199-
);
200-
201170
// Validate that mappings exist in the template
202171
const mappingsMap = getEntityMap(syntaxTree, TopLevelSection.Mappings);
203172
if (!mappingsMap || mappingsMap.size === 0) {
204-
log.debug('No mappings found in template for FindInMap completion');
205173
return undefined;
206174
}
207175

208176
try {
209177
// Determine position in FindInMap arguments
210178
const position = this.determineFindInMapPosition(intrinsicFunction.args, context);
211-
log.debug(`FindInMap argument position determined: ${position}`);
212179

213180
// Get completions based on position
214181
const completions = this.getCompletionsByPosition(position, mappingsMap, intrinsicFunction.args, context);
215182

216183
if (!completions) {
217-
log.debug(`No completions found for FindInMap position ${position}`);
218184
return undefined;
219185
}
220186

221187
return completions;
222188
} catch (error) {
223-
log.error({ error }, 'Error processing FindInMap completions');
189+
log.error(error, 'Error processing FindInMap completions');
224190
return undefined;
225191
}
226192
}
@@ -362,7 +328,7 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
362328
attributeDescription = resolvedSchemas[0].description;
363329
}
364330
} catch (error) {
365-
log.error({ error }, 'Error resolving JSON Pointer path');
331+
log.error(error, 'Error resolving JSON pointer path');
366332
}
367333
}
368334
completionItems.push(
@@ -461,7 +427,6 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
461427
): CompletionItem[] | undefined {
462428
// Validate position is within expected range for FindInMap (1-3)
463429
if (position < 1 || position > 3) {
464-
log.debug(`Invalid FindInMap position: ${position}`);
465430
return undefined;
466431
}
467432

@@ -489,7 +454,7 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
489454

490455
return context.text.length > 0 ? this.fuzzySearch(items, context.text) : items;
491456
} catch (error) {
492-
log.error({ error }, 'Error creating mapping name completions');
457+
log.error(error, 'Error creating mapping name completions');
493458
return [];
494459
}
495460
}
@@ -501,21 +466,18 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
501466
): CompletionItem[] | undefined {
502467
// Validate arguments structure
503468
if (!Array.isArray(args) || args.length === 0 || typeof args[0] !== 'string') {
504-
log.debug('Invalid arguments for top-level key completions');
505469
return undefined;
506470
}
507471

508472
try {
509473
const mappingName = args[0];
510474
const mappingEntity = this.getMappingEntity(mappingsEntities, mappingName);
511475
if (!mappingEntity) {
512-
log.debug(`Mapping entity not found: ${mappingName}`);
513476
return undefined;
514477
}
515478

516479
const topLevelKeys = mappingEntity.getTopLevelKeys();
517480
if (topLevelKeys.length === 0) {
518-
log.debug(`No top-level keys found for mapping: ${mappingName}`);
519481
return undefined;
520482
}
521483

@@ -525,7 +487,7 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
525487

526488
return context.text.length > 0 ? this.fuzzySearch(items, context.text) : items;
527489
} catch (error) {
528-
log.error({ error }, 'Error creating top-level key completions');
490+
log.error(error, 'Error creating top-level key completions');
529491
return undefined;
530492
}
531493
}
@@ -537,7 +499,6 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
537499
): CompletionItem[] | undefined {
538500
// Validate arguments structure for second-level keys
539501
if (!this.isValidSecondLevelKeyArgs(args)) {
540-
log.debug('Invalid arguments for second-level key completions');
541502
return undefined;
542503
}
543504

@@ -547,13 +508,11 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
547508

548509
const mappingEntity = this.getMappingEntity(mappingsEntities, mappingName);
549510
if (!mappingEntity) {
550-
log.debug(`Mapping entity not found: ${mappingName}`);
551511
return undefined;
552512
}
553513

554514
const secondLevelKeys = this.getSecondLevelKeysForTopLevelKey(mappingEntity, topLevelKey);
555515
if (secondLevelKeys.length === 0) {
556-
log.debug(`No second-level keys found for mapping: ${mappingName}`);
557516
return undefined;
558517
}
559518

@@ -563,7 +522,7 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
563522

564523
return this.filterSecondLevelKeyItems(items, context, topLevelKey);
565524
} catch (error) {
566-
log.debug({ error }, 'Error creating second-level key completions');
525+
log.warn(error, 'Error creating second-level key completions');
567526
return undefined;
568527
}
569528
}
@@ -647,7 +606,7 @@ export class IntrinsicFunctionArgumentCompletionProvider implements CompletionPr
647606
}
648607
return mappingContext.entity as Mapping;
649608
} catch (error) {
650-
log.error({ error }, `Error retrieving mapping entity: ${mappingName}`);
609+
log.error(error, `Error retrieving mapping entity: ${mappingName}`);
651610
return undefined;
652611
}
653612
}

src/autocomplete/RelatedResourcesInlineCompletionProvider.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,6 @@ export class RelatedResourcesInlineCompletionProvider implements InlineCompletio
3030
context: Context,
3131
params: InlineCompletionParams,
3232
): Promise<InlineCompletionItem[]> | InlineCompletionItem[] | undefined {
33-
this.log.debug(
34-
{
35-
provider: 'RelatedResourcesInlineCompletion',
36-
position: params.position,
37-
section: context.section,
38-
propertyPath: context.propertyPath,
39-
},
40-
'Processing related resources inline completion request',
41-
);
42-
4333
try {
4434
const document = this.documentManager.get(params.textDocument.uri);
4535
if (!document) {
@@ -62,7 +52,7 @@ export class RelatedResourcesInlineCompletionProvider implements InlineCompletio
6252

6353
return this.generateInlineCompletionItems(relatedResourceTypes, params);
6454
} catch (error) {
65-
this.log.error({ error: String(error) }, 'Error generating related resources inline completion');
55+
this.log.error(error, 'Error generating related resources inline completion');
6656
return undefined;
6757
}
6858
}
@@ -184,10 +174,7 @@ export class RelatedResourcesInlineCompletionProvider implements InlineCompletio
184174

185175
return this.formatSnippetForDocumentType(snippet, documentType, params);
186176
} catch (error) {
187-
this.log.warn(
188-
{ error: String(error), resourceType },
189-
'Error generating property snippet, falling back to simple format',
190-
);
177+
this.log.warn(error, `Error generating property snippet, falling back to simple format ${resourceType}`);
191178
return this.formatSnippetForDocumentType(
192179
documentType === DocumentType.JSON
193180
? `"${logicalId}": {\n${indent1}"Type": "${resourceType}"\n}`

src/autocomplete/ResourceSectionCompletionProvider.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,6 @@ export class ResourceSectionCompletionProvider implements CompletionProvider {
3333
context: Context,
3434
params: CompletionParams,
3535
): Promise<CompletionItem[]> | CompletionItem[] | undefined {
36-
this.log.debug(
37-
{
38-
provider: 'Resource Completion',
39-
position: params.position,
40-
entitySection: context.entitySection,
41-
propertyPath: context.propertyPath,
42-
atEntityKeyLevel: context.atEntityKeyLevel(),
43-
text: context.text,
44-
},
45-
'Processing resource completion request',
46-
);
47-
4836
if (context.atEntityKeyLevel()) {
4937
return this.resourceProviders
5038
.get(ResourceCompletionType.Entity)
@@ -77,7 +65,7 @@ export class ResourceSectionCompletionProvider implements CompletionProvider {
7765
return [...stateCompletion, ...schemaPropertyCompletions];
7866
})
7967
.catch((error) => {
80-
this.log.debug(error, 'Received error from resource state autocomplete');
68+
this.log.warn(error, 'Received error from resource state autocomplete');
8169
// Fallback to just property completions if state completions fail
8270
return schemaPropertyCompletions;
8371
});

0 commit comments

Comments
 (0)