如何将Winston日志文件保存到MySQL数据库中?

5

我已经像这样配置了winston日志记录器:

import winston from "winston";
const { SqlTransport } = require("winston-sql-transport");

const transportConfig = {
  client: "mysql2",
  connection: {
    host: "localhost",
    user: "root",
    password: "Mahdi54321",
    database: "todos",
    // port: "3307",
  },
  tableName: "logs",
};

const alignColorsAndTime = winston.format.combine(
  winston.format.colorize({
    all: true,
  }),
  winston.format.label({
    label: "[LOGGER]",
  }),
  winston.format.timestamp({
    format: "YYYY-MM-DD HH:mm:ss",
  }),
  winston.format.printf(
    (info) => `${info.label} ${info.timestamp} ${info.level} : ${info.message}`
  )
);

export const logger = winston.createLogger({
  level: "debug",
  transports: [
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.colorize(),
        alignColorsAndTime
      ),
    }),
    new winston.transports.File({
      filename: "logs/example.log",
      format: winston.format.combine(
        winston.format.timestamp({
          format: "YYYY-MM-DD HH:mm:ss",
        }),
        winston.format.json()
      ),
    }),
    new SqlTransport(transportConfig),
  ],
});

它只保存第一条日志,下一条只会保存在文件中而不是数据库中。

我猜测 new SqlTransport(transportConfig)不是每次都运行,因此它不能将每个日志保存到数据库中。

我该如何将每个日志一个接一个地保存到MySQL数据库中?

1个回答

2

您使用的包已经过时,可以使用winston-mysql包代替:https://www.npmjs.com/package/winston-mysql

根据文档的实现示例:

const options_default = {
    host: 'localhost',
    user: 'logger',
    password: 'logger*test',
    database: 'WinstonTest',
    table: 'sys_logs_default'
};

//custom log table fields
const options_custom = {
    host: 'localhost',
    user: 'logger',
    password: 'logger*test',
    database: 'WinstonTest',
    table: 'sys_logs_custom',
    fields: {level: 'mylevel', meta: 'metadata', message: 'source', timestamp: 'addDate'}
};

//meta json log table fields
const options_json = {
    host: 'localhost',
    user: 'logger',
    password: 'logger*test',
    database: 'WinstonTest',
    table: 'sys_logs_json'
};

const logger = winston.createLogger({
    level: 'debug',
    format: winston.format.json(),
    defaultMeta: { service: 'user-service' },
    transports: [
        new winston.transports.Console({
            format: winston.format.simple(),
        }),
        // or use: options_custom / options_json
        new winstonMysql(options_default),
    ],
});

const rnd = Math.floor(Math.random() * 1000);
const msg = `test message ${rnd}`;

logger.debug(msg, {message: msg, type: 'demo'});
logger.error(msg, {message: msg, type: 'demo'});
logger.info(msg, {message: msg, type: 'demo'});
logger.warn(msg, {message: msg, type: 'demo'});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接