繁体   English   中英

如何在 typeorm 中使用 winston?

[英]How to use winston with 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 定义为记录器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM