Skip to content

Commit 034b790

Browse files
authored
feat(sdk): make Logger.log() method optional for external logger compatibility (#260)
Make the log() method optional in the Logger interface to enable compatibility with popular TypeScript logging libraries like AWS Powertools Logger, Pino, and Winston, which don't implement a generic log() method. Changes: - Made Logger.log() optional in interface definition - Updated context-logger to conditionally create log method - Updated mode-aware-logger to handle optional log method - Fixed all tests to use optional chaining for log() calls This is a non-breaking change that maintains backward compatibility with existing custom loggers while enabling easier integration with external logging libraries.
1 parent fafcc76 commit 034b790

File tree

6 files changed

+32
-28
lines changed

6 files changed

+32
-28
lines changed

packages/aws-durable-execution-sdk-js/src/types/logger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
* Provides structured logging capabilities for durable execution contexts
44
*/
55
export interface Logger {
6-
/** Generic log method with configurable level */
7-
log(level: string, message?: string, data?: unknown, error?: Error): void;
6+
/** Generic log method with configurable level (optional for compatibility with popular loggers) */
7+
log?(level: string, message?: string, data?: unknown, error?: Error): void;
88
/** Log error messages with optional error object and additional data */
99
error(message?: string, error?: Error, data?: unknown): void;
1010
/** Log warning messages with optional additional data */

packages/aws-durable-execution-sdk-js/src/utils/logger/context-logger.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ describe("Context Logger", () => {
122122
const logger = factory("generic-step");
123123
const testError = new Error("generic error");
124124

125-
logger.log("custom", "custom message", { custom: "data" }, testError);
125+
logger.log?.("custom", "custom message", { custom: "data" }, testError);
126126

127127
expect(mockBaseLogger.log).toHaveBeenCalledWith(
128128
"custom",
@@ -173,7 +173,7 @@ describe("Context Logger", () => {
173173
const logger = factory("test-step");
174174

175175
// Test all logger methods to ensure coverage
176-
logger.log(
176+
logger.log?.(
177177
"custom",
178178
"log message",
179179
{ data: "test" },

packages/aws-durable-execution-sdk-js/src/utils/logger/context-logger.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,21 @@ export const createContextLoggerFactory = (
3636
};
3737

3838
return {
39-
log: (
40-
level: string,
41-
message?: string,
42-
data?: unknown,
43-
error?: Error,
44-
): void => {
45-
baseLogger.log(
46-
level,
47-
message,
48-
createLogEntry(level, message, data, error),
49-
error,
50-
);
51-
},
39+
log: baseLogger.log
40+
? (
41+
level: string,
42+
message?: string,
43+
data?: unknown,
44+
error?: Error,
45+
): void => {
46+
baseLogger.log!(
47+
level,
48+
message,
49+
createLogEntry(level, message, data, error),
50+
error,
51+
);
52+
}
53+
: undefined,
5254
info: (message?: string, data?: unknown): void => {
5355
baseLogger.info(message, createLogEntry("info", message, data));
5456
},

packages/aws-durable-execution-sdk-js/src/utils/logger/default-logger.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe("Default Logger", () => {
2626
const testData = { key: "value" };
2727
const testError = new Error("test error");
2828

29-
logger.log("custom", "test message", testData, testError);
29+
logger.log?.("custom", "test message", testData, testError);
3030

3131
expect(consoleSpy).toHaveBeenCalledWith(
3232
"custom",

packages/aws-durable-execution-sdk-js/src/utils/logger/mode-aware-logger.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ describe("Mode-Aware Logger", () => {
100100
false,
101101
);
102102

103-
logger.log("custom", "log message", { data: "test" }, new Error("test"));
103+
logger.log?.("custom", "log message", { data: "test" }, new Error("test"));
104104
logger.error("error message", new Error("test"), { data: "test" });
105105
logger.warn("warn message", { data: "test" });
106106
logger.debug("debug message", { data: "test" });
@@ -131,7 +131,7 @@ describe("Mode-Aware Logger", () => {
131131
true,
132132
);
133133

134-
logger.log("custom", "log message");
134+
logger.log?.("custom", "log message");
135135
logger.error("error message", new Error("test"));
136136
logger.warn("warn message");
137137
logger.debug("debug message");

packages/aws-durable-execution-sdk-js/src/utils/logger/mode-aware-logger.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@ export const createModeAwareLogger = (
1515
durableExecutionMode === DurableExecutionMode.ExecutionMode;
1616

1717
return {
18-
log: (
19-
level: string,
20-
message?: string,
21-
data?: unknown,
22-
error?: Error,
23-
): void => {
24-
if (shouldLog()) enrichedLogger.log(level, message, data, error);
25-
},
18+
log: enrichedLogger.log
19+
? (
20+
level: string,
21+
message?: string,
22+
data?: unknown,
23+
error?: Error,
24+
): void => {
25+
if (shouldLog()) enrichedLogger.log!(level, message, data, error);
26+
}
27+
: undefined,
2628
info: (message?: string, data?: unknown): void => {
2729
if (shouldLog()) enrichedLogger.info(message, data);
2830
},

0 commit comments

Comments
 (0)