【问题标题】:How to use winston with typeorm?如何将winston与typeorm一起使用?
【发布时间】:2019-11-21 03:00:07
【问题描述】:

我希望将所有操作写入日志文件。但这不会发生,文件本身是创建的,但它们始终是空的。

如何解决?还是我做错了什么?

looger.ts:

import { LoggerOptions, createLogger, transports } from 'winston';

export const logger = createLogger(<LoggerOptions> {
    exitOnError: false,
    transports: [
        new transports.Console({
            level: 'debug'
        }),
        new transports.File({
            filename: './logs/errors.log',
            level: 'debug',
            maxsize: 1024 * 1024 * 10
        }),
        new transports.File({
            filename: './logs/logger.log',
            level: 'log'
        })
    ], exceptionHandlers: [
        new transports.File({
            filename: './logs/exceptions.log',
            level: 'debug',
            maxsize: 1024 * 1024 * 10
        })
    ]
});

server.ts:

import * as express from 'express'
import { Request, Response, NextFunction } from 'express';
import { logger } from './utils/logger';

class Server {
  public express;

  constructor () {
    this.express = express()
    this.log()
  }

  private log(): void {
    this.express.use((err: Error,  req: Request, res: Response, next: NextFunction) => {
        logger.error(err.stack);
        logger.log(res.stack);
    });
  }
}
export default new Server().express;

【问题讨论】:

    标签: node.js winston typeorm


    【解决方案1】:

    您必须定义自己的 Logger 实现,然后在其中调用您的 winston API。

    import { Logger, QueryRunner } from "typeorm";
    
    export class TypeOrmLogger implements Logger {
    
        log(level: "log" | "info" | "warn", message: any, queryRunner?: QueryRunner): any {
            ...
        }
    
        logMigration(message: string, queryRunner?: QueryRunner): any {
            ...
        }
    
        logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner): any {
            ...
        }
    
        logQueryError(error: string, query: string, parameters?: any[], queryRunner?: QueryRunner): any {
            ...
        }
    
        logQuerySlow(time: number, query: string, parameters?: any[], queryRunner?: QueryRunner): any {
            ...
        }
    
        logSchemaBuild(message: string, queryRunner?: QueryRunner): any {
            ...
        }
    }
    

    然后,您将 TypeOrmLogger 定义为连接选项中的记录器。

    【讨论】:

    • 传入的QueryRunner怎么办?
    • @xenoterracide - 它只是 Typescript 的一种类型
    猜你喜欢
    • 1970-01-01
    • 2018-01-23
    • 2020-02-23
    • 1970-01-01
    • 2018-08-19
    • 2020-01-26
    • 2021-05-24
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多