node.js - 如何将 winston 与 typeorm 一起使用?

标签 node.js winston typeorm

我希望所有操作都写入日志文件。但这并没有发生,文件本身已经创建,但它们始终是空的。

如何解决?或者我做错了什么?

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
        })
    ]
});

服务器.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;

最佳答案

您必须定义自己的 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 定义为记录器。

关于node.js - 如何将 winston 与 typeorm 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56988392/

相关文章:

mysql - REST-API 数据库关系反向引用

javascript - 从 XML 文档的 NodeList 中删除 Node

typescript - 我可以使用部分实体通过 typeorm 进行保存吗?

node.js - 如何从 NodeJS 在 MongoDB 中同时设置和取消设置?

javascript - 如何使 mongoose 在执行查找查询时失败

JavaScript/Jest : How to show logs from test case only when test fails?

node.js - winston 日志级别/隐藏日志级别

unit-testing - 如何记录 Mongoose 中的错误,但可单元测试?

javascript - 类型错误 : Class extends value undefined is not a function or null

node.js - TypeORM 级联删除