打字稿 - Morgan 和 logger.stream 导致 lint 错误



我尝试使用记录器流功能将Morgan日志附加到Winston。 但是一旦我在使用 morgan 中间件时尝试附加logger.stream,它就会失败并显示以下消息:

Argument of type '"combined"' is not assignable to parameter of type 'FormatFn'.

这是我的温斯顿初始化代码:

import * as appRoot from 'app-root-path';
import * as winston from 'winston';
import { Logger } from 'winston';
import * as fs from 'fs';
import * as stream from 'stream';
const dirLogs = `${appRoot}/logs`;
// It's call during initialization, we can block the thread
if (!fs.existsSync(dirLogs)) {
fs.mkdirSync(dirLogs);
}
// define the custom settings for each transport (file, console)
const options = {
file: {
level: 'info',
filename: `${dirLogs}/app.log`,
handleExceptions: true,
json: true,
maxsize: 5242880, // 5MB
maxFiles: 5,
colorize: false,
},
console: {
level: 'debug',
handleExceptions: true,
json: false,
colorize: true,
},
};
// Keep it simple to focus on the need first
// I think Logger should send logs to a logger service
const logger = new Logger({
level: 'info',
transports: [
new winston.transports.File(options.file),
new winston.transports.Console(options.console),
],
exitOnError: false, // do not exit on handled exceptions
});
// If I don't use the stream.Duplex, it cause another lint error.
logger.stream = (options?: any) => new stream.Duplex({
write: function (message: string, encoding: any) {
logger.info(message.trim());
}
});
export default logger;

然后,我尝试使用摩根的代码。

// ... All import
import logger from './logger/index';
// ... Then later the code
this.expressApp.use(morgan('combined', { stream: logger.stream }));

我不确定为什么我会收到此错误:/

好的,所以我深入到代码和打字稿文件中,以了解它真正需要做什么。

我将logger.stream声明从

// If I don't use the stream.Duplex, it cause another lint error.
logger.stream = (options?: any) => new stream.Duplex({
write: function (message: string, encoding: any) {
logger.info(message.trim());
}
});

// Don't forget this import
import { Options } from 'morgan';
// And the code
export const morganOption: Options = {
stream: {
write: function (message: string) {
logger.info(message.trim());
},
},
};

然后我导入morganOptions并将其设置为morgan

// My import
import { logger, morganOption } from './logger/index';
// ... Then later, the new code
this.expressApp.use(morgan('combined', morganOption));

希望它能帮助其他人:)

使用 node package manager 安装 Winston 节点包

创建记录器.ts向其添加以下代码

import { createLogger, format, transports } from 'winston';
const { label, combine, timestamp , prettyPrint } = format;
const logger = createLogger({
format: combine(
timestamp(),
prettyPrint(),
),
transports: [
new transports.Console(),
new transports.File({ filename: './error.log' , level: 'error' }),
new transports.File({ filename: './info.log' , level: 'info' }),
],
exitOnError: false,
});
export default loggerStep 

在下面的行中查看更多信息 在此处输入链接说明

相关内容

最新更新