@@ -33,6 +33,29 @@ function outputLog(logData: LogData): void {
3333 process . stdout . write ( JSON . stringify ( logData ) + '\n' ) ;
3434}
3535
36+ /**
37+ * Normalize logger arguments to support both (message, extra) and (extra) patterns.
38+ * @internal
39+ */
40+ function normalizeArgs (
41+ message : string | Record < string , unknown > ,
42+ extra : Record < string , unknown >
43+ ) : { actualMessage : string ; actualExtra : Record < string , unknown > } {
44+ if ( typeof message === 'string' ) {
45+ return { actualMessage : message , actualExtra : extra } ;
46+ } else {
47+ // If first argument is an object, use it as extra and generate a default message
48+ const messageFromObject = message . message as string || '' ;
49+ const restOfObject = { ...message } ;
50+ delete restOfObject . message ;
51+
52+ return {
53+ actualMessage : messageFromObject ,
54+ actualExtra : { ...restOfObject , ...extra }
55+ } ;
56+ }
57+ }
58+
3659/**
3760 * Create a tracer instance for tracking related operations.
3861 * @internal
@@ -43,16 +66,17 @@ function createTracer(
4366 traceFields : Record < string , unknown >
4467) : Tracer {
4568 return {
46- span ( message : string , extra : Record < string , unknown > = { } ) : Tracer {
69+ span ( message : string | Record < string , unknown > , extra : Record < string , unknown > = { } ) : Tracer {
70+ const { actualMessage, actualExtra } = normalizeArgs ( message , extra ) ;
4771 const logData : LogData = {
4872 type : 'trace' ,
49- message,
73+ message : actualMessage ,
5074 traceId,
5175 spanId : generateSpanId ( ) ,
5276 timestamp : new Date ( ) . toISOString ( ) ,
5377 ...defaultFields ,
5478 ...traceFields ,
55- ...extra ,
79+ ...actualExtra ,
5680 } ;
5781
5882 outputLog ( logData ) ;
@@ -92,88 +116,95 @@ export function createLogger(options: LoggerOptions = {}): Logger {
92116 const defaultFields = options . defaultFields ?? { } ;
93117
94118 return {
95- info : ( message : string , extra : Record < string , unknown > = { } ) : void => {
119+ info : ( message : string | Record < string , unknown > , extra : Record < string , unknown > = { } ) : void => {
120+ const { actualMessage, actualExtra } = normalizeArgs ( message , extra ) ;
96121 const logData : LogData = {
97122 type : 'info' ,
98- message,
123+ message : actualMessage ,
99124 timestamp : new Date ( ) . toISOString ( ) ,
100125 ...defaultFields ,
101- ...extra ,
126+ ...actualExtra ,
102127 } ;
103128
104129 outputLog ( logData ) ;
105130 } ,
106131
107- error : ( message : string , extra : Record < string , unknown > = { } ) : void => {
132+ error : ( message : string | Record < string , unknown > , extra : Record < string , unknown > = { } ) : void => {
133+ const { actualMessage, actualExtra } = normalizeArgs ( message , extra ) ;
108134 const logData : LogData = {
109135 type : 'error' ,
110- message,
136+ message : actualMessage ,
111137 timestamp : new Date ( ) . toISOString ( ) ,
112138 ...defaultFields ,
113- ...extra ,
139+ ...actualExtra ,
114140 } ;
115141
116142 outputLog ( logData ) ;
117143 } ,
118144
119- debug : ( message : string , extra : Record < string , unknown > = { } ) : void => {
145+ debug : ( message : string | Record < string , unknown > , extra : Record < string , unknown > = { } ) : void => {
146+ const { actualMessage, actualExtra } = normalizeArgs ( message , extra ) ;
120147 const logData : LogData = {
121148 type : 'debug' ,
122- message,
149+ message : actualMessage ,
123150 timestamp : new Date ( ) . toISOString ( ) ,
124151 ...defaultFields ,
125- ...extra ,
152+ ...actualExtra ,
126153 } ;
127154
128155 outputLog ( logData ) ;
129156 } ,
130157
131- warning : ( message : string , extra : Record < string , unknown > = { } ) : void => {
158+ warning : ( message : string | Record < string , unknown > , extra : Record < string , unknown > = { } ) : void => {
159+ const { actualMessage, actualExtra } = normalizeArgs ( message , extra ) ;
132160 const logData : LogData = {
133161 type : 'warning' ,
134- message,
162+ message : actualMessage ,
135163 timestamp : new Date ( ) . toISOString ( ) ,
136164 ...defaultFields ,
137- ...extra ,
165+ ...actualExtra ,
138166 } ;
139167
140168 outputLog ( logData ) ;
141169 } ,
142170
143- warn : ( message : string , extra : Record < string , unknown > = { } ) : void => {
171+ warn : ( message : string | Record < string , unknown > , extra : Record < string , unknown > = { } ) : void => {
172+ const { actualMessage, actualExtra } = normalizeArgs ( message , extra ) ;
144173 const logData : LogData = {
145174 type : 'warning' ,
146- message,
175+ message : actualMessage ,
147176 timestamp : new Date ( ) . toISOString ( ) ,
148177 ...defaultFields ,
149- ...extra ,
178+ ...actualExtra ,
150179 } ;
151180
152181 outputLog ( logData ) ;
153182 } ,
154183
155- trace : ( message : string , extra : Record < string , unknown > = { } ) : Tracer => {
184+ trace : ( message : string | Record < string , unknown > , extra : Record < string , unknown > = { } ) : Tracer => {
185+ const { actualMessage, actualExtra } = normalizeArgs ( message , extra ) ;
156186 const traceId = generateTraceId ( ) ;
157- const tracer = createTracer ( traceId , defaultFields , extra ) ;
187+ const tracer = createTracer ( traceId , defaultFields , actualExtra ) ;
158188
159189 // Log the initial trace
160190 const logData : LogData = {
161191 type : 'trace' ,
162- message,
192+ message : actualMessage ,
163193 traceId,
164194 spanId : generateSpanId ( ) ,
165195 timestamp : new Date ( ) . toISOString ( ) ,
166196 ...defaultFields ,
167- ...extra ,
197+ ...actualExtra ,
168198 } ;
169199
170200 outputLog ( logData ) ;
171201 return tracer ;
172202 } ,
173203
174- startTrace : ( extra : Record < string , unknown > = { } ) : Tracer => {
204+ startTrace : ( message : string | Record < string , unknown > , extra : Record < string , unknown > = { } ) : Tracer => {
205+ const { actualMessage, actualExtra } = normalizeArgs ( message , extra ) ;
175206 const traceId = generateTraceId ( ) ;
176- return createTracer ( traceId , defaultFields , extra ) ;
207+ return createTracer ( traceId , defaultFields , actualExtra ) ;
177208 } ,
178209 } ;
179210}
0 commit comments