ロガーストリーム機能Morgan
を使用してログを添付しようとしています。Winston
しかし、logger.stream
morgan ミドルウェアを使用するときに をアタッチしようとすると、次のメッセージが表示されて失敗します。
Argument of type '"combined"' is not assignable to parameter of type 'FormatFn'.
これが私のWinston初期化コードです:
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 }));
このエラーが発生した理由がよくわかりません:/