1 import type { FormatWrap
} from
'logform';
2 import { createLogger
, format
, type transport
} from
'winston';
3 import TransportType from
'winston/lib/winston/transports/index.js';
4 import DailyRotateFile from
'winston-daily-rotate-file';
6 import { Configuration
} from
'./Configuration';
7 import { insertAt
} from
'./Utils';
8 import { ConfigurationSection
, type LogConfiguration
} from
'../types';
10 const logConfiguration
= Configuration
.getConfigurationSection
<LogConfiguration
>(
11 ConfigurationSection
.log
,
13 let transports
: transport
[];
14 if (logConfiguration
.rotate
=== true) {
15 const logMaxFiles
= logConfiguration
.maxFiles
;
16 const logMaxSize
= logConfiguration
.maxSize
;
20 logConfiguration
.errorFile
!,
22 logConfiguration
.errorFile
!.indexOf('.log'),
25 ...(logMaxFiles
&& { maxFiles
: logMaxFiles
}),
26 ...(logMaxSize
&& { maxSize
: logMaxSize
}),
29 filename
: insertAt(logConfiguration
.file
!, '-%DATE%', logConfiguration
.file
!.indexOf('.log')),
30 ...(logMaxFiles
&& { maxFiles
: logMaxFiles
}),
31 ...(logMaxSize
&& { maxSize
: logMaxSize
}),
36 new TransportType
.File({
37 filename
: logConfiguration
.errorFile
,
40 new TransportType
.File({
41 filename
: logConfiguration
.file
,
46 export const logger
= createLogger({
47 silent
: !logConfiguration
.enabled
,
48 level
: logConfiguration
.level
,
49 format
: format
.combine(
51 (format
[logConfiguration
.format
! as keyof FormatWrap
] as FormatWrap
)(),
57 // If enabled, log to the `console` with the format:
58 // `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
60 if (logConfiguration
.console
) {
62 new TransportType
.Console({
63 format
: format
.combine(
65 (format
[logConfiguration
.format
! as keyof FormatWrap
] as FormatWrap
)(),