【问题标题】:How to Create Multiple Logger Folder如何创建多个记录器文件夹
【发布时间】:2021-01-29 07:41:24
【问题描述】:

我想创建多个记录器文件夹,一个用于 SignUp,另一个用于 SignIn,我已为 Sign up 创建并希望 SignIn 使用相同的文件夹, 我是 nodejs 新手,请告诉我如何为登录做同样的事情

这是注册代码

const chalk = require("chalk")
const log = console.log;
const winston = require('winston')
myFormat = () => {
    return new Date(Date.now())
}
class LoggerService {
    constructor(service) {
        this.log_data = null
        this.service = service
        const logger = winston.createLogger({
            transports: [
                new winston.transports.Console(),
                new winston.transports.File({
                    filename: `./logs/${service}/${myFormat().getUTCFullYear()}/${myFormat().getUTCMonth()+1}/${myFormat().getUTCDate()}.log`
                })
            ],
            format: winston.format.printf((info) => {
                let message = `${myFormat().toUTCString()} | ${info.level.toUpperCase()} | ${service}.log | ${info.message} | `
                message = info.obj ? message + `data:${JSON.stringify(info.obj)} | ` : message
                message = this.log_data ? message + `log_data:${JSON.stringify(this.log_data)} | ` : message
                return message
            })
        });
        this.logger = logger
    }
    setLogData(log_data) {
        this.log_data = log_data
    }
    async info (message) {
        this.logger.log('info', message);
    }
    async info(message, obj) {
        this.logger.log('info', message, {
            obj
        })
    }
    async debug(message) {
        this.logger.log('debug', message);
    }
    async debug(message, obj) {
        this.logger.log('debug', message, {
            obj
        })
    }
    async error(message) {
       this.logger.log('error', message);
    }
    async error (message, obj) {
        this.logger.log('error',message, {
            obj
         })
    }
}
module.exports = LoggerService

请告诉我如何为登录创建相同的内容

userAuth.js 文件

const log = console.log;
const Logger = require("../logs/services/logger_service");
const logger = new Logger("SignUp");

【问题讨论】:

    标签: node.js express logging winston


    【解决方案1】:

    不确定您是否已解决此问题,但我的解决方法如下。在我的情况下,我创建了如下所示的自定义级别和一个将应用过滤器并将过滤器添加到传输的函数。有了这个,您可以创建任意数量的文件并进行过滤。在这种情况下,只会记录您选择的级别,因此如果您选择注册,则只有注册事件会转到该传输。

    var customLevels = {
      levels: {
        debug: 0,
        info: 1,
        express: 2,
        mail: 3,
        couchbase: 4,
        sql: 5,
        security : 6,
        blacklist: 7,
        warning: 8,
        error: 9
      },
      colors: {
        debug: 'cyan',
        info: 'green',
        warning: 'yellow',
        error: 'red'
      }
    }
    

    然后我有一个名为 levelFilter() 的函数

    const levelFilter = (level) =>
      format((info, opts) => {
         if (info.level != level) { return false; }
          return info;
      })();
    

    然后像这样创建我的传输

    var logger = createLogger({ 
        level : logLevel,
        levels: customLevels.levels,
        format: combine(
            timestamp(),
            format.timestamp({
                format: 'YYYY-MM-DD HH:mm:ss.SSS'
               }),
            myFormat
          ),
    transports: [
     new transports.DailyRotateFile({
        filename: logPath + '/app/application-%DATE%.log',
        datePattern: 'YYYY-MM-DD-HH',
        zippedArchive: true,
        frequency: '60m',
        maxSize: '20m',
        maxFiles: '14d',
        level: 'info',
        format: levelFilter("info")
      })....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      相关资源
      最近更新 更多