Reputation:
I want all actions to be written to the log files. But this does not happen, the files themselves are created but they are always empty.
How to fix it? Or what am I doing wrong?
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;
Upvotes: 3
Views: 2655
Reputation: 7193
You have to define your own Logger implementation and then call your winston API within.
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 {
...
}
}
Then you define your TypeOrmLogger as your logger in your connection options.
Upvotes: 1