os : windows 10
"winston": "^3.12.0",
"winston-daily-rotate-file": "^5.0.0"
nodeJS : v20.11.1
nestJS : 10.3.2
我正在尝试在 Nestjs 中使用 Winston 记录器。处理
winston-daily-rotate-file
时,登录文件管理设置部分发生以下错误。
https://github.com/winstonjs/winston-daily-rotate-file
我参考上面的参考资料进行了工作,我的代码如下。
import * as winston from 'winston';
import DailyRotateFile from 'winston-daily-rotate-file';
const { timestamp, colorize } = winston.format;
const config = {
levels: {
error: 0,
debug: 1,
warn: 2,
data: 3,
info: 4,
verbose: 5,
silly: 6,
custom: 7,
},
colors: {
error: 'red',
debug: 'blue',
warn: 'yellow',
info: 'green',
data: 'magenta',
verbose: 'cyan',
silly: 'grey',
custom: 'yellow',
},
};
const dataOnlyFormat = winston.format((info) => {
if (info.level === 'data') {
return info;
}
return false;
})();
const transport: DailyRotateFile = new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
dirname: `${__dirname}/../../../logs/data`,
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
format: winston.format.combine(dataOnlyFormat, timestamp(), winston.format.json()),
});
winston.addColors(config.colors);
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const singleLineFormat = winston.format.printf(({ level, message, timestamp, context, ...meta }) => {
const metaString = JSON.stringify(meta);
return `👀 [****] ${timestamp} [${level}] \n📟 ${message} - ${metaString}\n\n`;
});
export const winstonConfig = {
levels: config.levels,
transports: [
new winston.transports.Console({=
level: process.env.NODE_ENV === 'release' ? 'info' : 'silly',
format: winston.format.combine(
timestamp({
format: 'YYYY. MM. DD. hh:mm:ss A',
}),
singleLineFormat,
colorize({ all: true }),
),
}),
transport,
],
};
以下传输发生错误。你知道原因吗?
export const winstonConfig = {
levels: config.levels,
transports: [
new winston.transports.Console({
level: process.env.NODE_ENV === 'release' ? 'info' : 'silly',
format: winston.format.combine(
timestamp({
format: 'YYYY. MM. DD. hh:mm:ss A',
}),
singleLineFormat,
colorize({ all: true }),
),
}),
transport,
],
};
TypeError: winston_daily_rotate_file_1.default is not a constructor
at Object.<anonymous> (D:\***\src\configs\winston.config.ts:36:36)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Module.load (node:internal/modules/cjs/loader:1207:32)
at Function.Module._load (node:internal/modules/cjs/loader:1023:12)
at Module.require (node:internal/modules/cjs/loader:1235:19)
at require (node:internal/modules/helpers:176:18)
at Object.<anonymous> (D:\***\src\app.module.ts:10:1)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
更新此行:
import DailyRotateFile from 'winston-daily-rotate-file';
由
import 'winston-daily-rotate-file';
这个初始化:
const transport: DailyRotateFile = new DailyRotateFile
由
const transport = new winston.transports.DailyRotateFile