@@ -99,6 +99,86 @@ describe('Logger', () => {
9999 } )
100100 } )
101101
102+ describe ( 'environment-based log levels' , ( ) => {
103+ const env = process . env
104+ const globalRecord = globalThis as Record < string , unknown >
105+ let originalNodeEnv : string | undefined
106+ let originalLogLevel : string | undefined
107+ let hadWindow : boolean
108+ let originalWindow : unknown
109+
110+ beforeEach ( ( ) => {
111+ originalNodeEnv = env . NODE_ENV
112+ originalLogLevel = env . LOG_LEVEL
113+ hadWindow = Object . prototype . hasOwnProperty . call ( globalRecord , 'window' )
114+ originalWindow = globalRecord . window
115+ } )
116+
117+ afterEach ( ( ) => {
118+ if ( originalNodeEnv === undefined ) {
119+ delete env . NODE_ENV
120+ } else {
121+ env . NODE_ENV = originalNodeEnv
122+ }
123+
124+ if ( originalLogLevel === undefined ) {
125+ delete env . LOG_LEVEL
126+ } else {
127+ env . LOG_LEVEL = originalLogLevel
128+ }
129+
130+ if ( hadWindow ) {
131+ globalRecord . window = originalWindow
132+ } else {
133+ delete globalRecord . window
134+ }
135+ } )
136+
137+ test ( 'logs info by default in production on server' , ( ) => {
138+ env . NODE_ENV = 'production'
139+ delete env . LOG_LEVEL
140+
141+ const logger = createLogger ( 'ProdServer' )
142+ logger . debug ( 'debug message' )
143+ logger . info ( 'info message' )
144+
145+ expect ( consoleLogSpy ) . toHaveBeenCalledTimes ( 1 )
146+ expect ( consoleLogSpy ) . toHaveBeenCalledWith (
147+ expect . stringContaining ( '[INFO] [ProdServer]' ) ,
148+ 'info message'
149+ )
150+ } )
151+
152+ test ( 'respects LOG_LEVEL override in production' , ( ) => {
153+ env . NODE_ENV = 'production'
154+ env . LOG_LEVEL = LogLevel . ERROR
155+
156+ const logger = createLogger ( 'ProdOverride' )
157+ logger . info ( 'suppressed info' )
158+ logger . error ( 'error message' )
159+
160+ expect ( consoleLogSpy ) . not . toHaveBeenCalled ( )
161+ expect ( consoleErrorSpy ) . toHaveBeenCalledTimes ( 1 )
162+ expect ( consoleErrorSpy ) . toHaveBeenCalledWith (
163+ expect . stringContaining ( '[ERROR] [ProdOverride]' ) ,
164+ 'error message'
165+ )
166+ } )
167+
168+ test ( 'does not log in production browser runtime' , ( ) => {
169+ env . NODE_ENV = 'production'
170+ delete env . LOG_LEVEL
171+ globalRecord . window = { }
172+
173+ const logger = createLogger ( 'ProdBrowser' )
174+ logger . info ( 'hidden info' )
175+ logger . error ( 'hidden error' )
176+
177+ expect ( consoleLogSpy ) . not . toHaveBeenCalled ( )
178+ expect ( consoleErrorSpy ) . not . toHaveBeenCalled ( )
179+ } )
180+ } )
181+
102182 describe ( 'object formatting' , ( ) => {
103183 test ( 'should handle null and undefined arguments' , ( ) => {
104184 const logger = createLogger ( 'TestModule' )
0 commit comments