2023-12-27 13:56:13 +08:00
|
|
|
import winston, { Logger } from 'winston';
|
|
|
|
import 'winston-daily-rotate-file';
|
|
|
|
import { getLoggerLevel } from './config';
|
|
|
|
import { getTransports } from './transports';
|
2023-12-30 23:34:40 +08:00
|
|
|
import { consoleFormat } from './format';
|
2023-12-27 13:56:13 +08:00
|
|
|
|
|
|
|
interface LoggerOptions extends Omit<winston.LoggerOptions, 'transports' | 'format'> {
|
|
|
|
dirname?: string;
|
|
|
|
filename?: string;
|
2023-12-30 23:34:40 +08:00
|
|
|
format?: 'logfmt' | 'json' | 'delimiter' | 'console' | winston.Logform.Format;
|
2023-12-27 13:56:13 +08:00
|
|
|
transports?: ('console' | 'file' | 'dailyRotateFile' | winston.transport)[];
|
|
|
|
}
|
|
|
|
|
|
|
|
export const createLogger = (options: LoggerOptions) => {
|
|
|
|
if (process.env.GITHUB_ACTIONS) {
|
|
|
|
return createConsoleLogger();
|
|
|
|
}
|
|
|
|
const { format, ...rest } = options;
|
|
|
|
const winstonOptions = {
|
|
|
|
level: getLoggerLevel(),
|
|
|
|
...rest,
|
|
|
|
transports: getTransports(options),
|
|
|
|
};
|
|
|
|
return winston.createLogger(winstonOptions);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const createConsoleLogger = (options?: winston.LoggerOptions) => {
|
|
|
|
const { format, ...rest } = options || {};
|
|
|
|
return winston.createLogger({
|
|
|
|
level: getLoggerLevel(),
|
|
|
|
format: winston.format.combine(
|
|
|
|
winston.format.timestamp({
|
|
|
|
format: 'YYYY-MM-DD HH:mm:ss',
|
|
|
|
}),
|
2023-12-30 23:34:40 +08:00
|
|
|
format || consoleFormat,
|
2023-12-27 13:56:13 +08:00
|
|
|
),
|
|
|
|
...(rest || {}),
|
|
|
|
transports: [new winston.transports.Console()],
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
export { Logger, LoggerOptions };
|