midwayjs / logger

midway logger
MIT License
4 stars 3 forks source link

期望设置所有的日志输出格式为JSON,但是不生效。 #129

Open MlAvanti opened 2 months ago

MlAvanti commented 2 months ago

1、项目说明: midway v3 + koa 1、期望效果:将所有应用日志均输出为JSON格式。 2、实际效果:仅midway-core日志生效。 midway-core.json.log: {"timestamp":"2024-08-27 11:18:48.159","level":"info","pid":42469,"message":"[midway:redis] client connect success"} midway-cron.json.log: 2024-08-27 11:18:00.048 ERROR 41827 [DailyAnalyzeJob] 出错了

3、config.default.ts代码实例:

midwayLogger: {
      default: {
        level: 'warn',
        dir: path.join(appInfo.baseDir, './../logs/'),
        transports: {
          console: false,
          error: {
            fileLogName: 'common-error.json.log',
          },
        },
        format: (info: LoggerInfo) => {
          const { timestamp, level, pid, message } = info;
          return JSON.stringify({
            timestamp,
            level,
            pid,
            message,
          });
        },
      },
      clients: {
        coreLogger: {
          fileLogName: 'midway-core.json.log',
        },
        appLogger: {
          fileLogName: 'midway-web.json.log',
        },
        agentLogger: {
          fileLogName: 'midway-agent.json.log',
        },
        cronLogger: {
          fileLogName: 'midway-cron.json.log',
        },
      },
    }

4、日志输出方式:

import { ILogger } from '@midwayjs/logger';

@Inject()
  logger: ILogger;

this.logger.error(err)

5、补充说明:通过手动设置修改Koa上下文日志格式,可以在请求时让conmon-error日志中输出JSON格式,但是在job定时任务里面依然无法输出JSON格式。

koa: {
       ...
      contextLoggerFormat: (info: LoggerInfo) => {
        const { timestamp, level, pid, message } = info;
        return JSON.stringify({
          timestamp,
          level,
          pid,
          message,
        });
      },
    },
czy88840616 commented 2 months ago

需要关闭 file,开启 json ?

midwayLogger: {
default: {
  level: 'warn',
  dir: path.join(appInfo.baseDir, './../logs/'),
  transports: {
    console: false,
    file: false,
    json:{
          // ...
     },
  }