11import winston from "winston" ;
22import path from "path" ;
33import fs from "fs" ;
4-
5- import { getConfigDir } from "./config.js" ;
4+ import { getConfigDir } from "./paths.js" ;
65
76let logger : winston . Logger | null = null ;
87
98function getLogger ( ) : winston . Logger {
10- if ( logger ) {
11- return logger ;
12- }
9+ if ( logger ) return logger ;
1310
14- const LOGS_DIR = path . join ( getConfigDir ( ) , "logs" ) ;
11+ const isTest = process . env . NODE_ENV === "test" ;
12+ const isDebugMode =
13+ process . env . DEBUG_BINHARIC !== undefined || process . env . DEBUG_TOBI !== undefined ;
14+ const logLevel = isTest ? "error" : isDebugMode ? "debug" : "info" ;
1515
16- // Ensure logs directory exists
17- if ( ! fs . existsSync ( LOGS_DIR ) ) {
18- fs . mkdirSync ( LOGS_DIR , { recursive : true } ) ;
16+ if ( isTest ) {
17+ logger = winston . createLogger ( {
18+ level : logLevel ,
19+ format : winston . format . json ( ) ,
20+ transports : [ ] ,
21+ silent : true ,
22+ } ) ;
23+ return logger ;
1924 }
2025
21- const isDebugMode =
22- process . env . DEBUG_BINHARIC !== undefined || process . env . DEBUG_TOBI !== undefined ;
23- const logLevel = isDebugMode ? "debug" : "info" ;
26+ const overrideLogDir = process . env . BINHARIC_LOG_DIR ;
27+ const LOGS_DIR = overrideLogDir ? overrideLogDir : path . join ( getConfigDir ( ) , "logs" ) ;
28+ if ( ! fs . existsSync ( LOGS_DIR ) ) fs . mkdirSync ( LOGS_DIR , { recursive : true } ) ;
2429
2530 logger = winston . createLogger ( {
2631 level : logLevel ,
@@ -31,18 +36,20 @@ function getLogger(): winston.Logger {
3136 LOGS_DIR ,
3237 `binharic-${ new Date ( ) . toISOString ( ) . replace ( / [: .] / g, "-" ) } .log` ,
3338 ) ,
34- maxsize : 1024 * 1024 * 5 , // 5MB
39+ maxsize : 1024 * 1024 * 5 ,
3540 maxFiles : 5 ,
3641 tailable : true ,
3742 } ) ,
3843 ] ,
3944 } ) ;
4045
41- // Also log to console in debug mode
4246 if ( isDebugMode ) {
4347 logger . add (
4448 new winston . transports . Console ( {
45- format : winston . format . combine ( winston . format . colorize ( ) , winston . format . simple ( ) ) ,
49+ format : winston . format . combine (
50+ winston . format . colorize ( ) ,
51+ winston . format . simple ( ) ,
52+ ) ,
4653 } ) ,
4754 ) ;
4855 }
@@ -54,9 +61,7 @@ const loggerProxy = new Proxy({} as winston.Logger, {
5461 get ( _ , prop : string ) {
5562 const loggerInstance = getLogger ( ) ;
5663 const value = loggerInstance [ prop as keyof winston . Logger ] ;
57- if ( typeof value === "function" ) {
58- return value . bind ( loggerInstance ) ;
59- }
64+ if ( typeof value === "function" ) return value . bind ( loggerInstance ) ;
6065 return value ;
6166 } ,
6267} ) ;
0 commit comments