V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kaolalicai
V2EX  ›  Node.js

AI 考拉技术分享-Node 基础架构专题(二)

  •  
  •   kaolalicai · 2019-02-12 14:49:50 +08:00 · 3200 次点击
    这是一个创建于 2138 天前的主题,其中的信息可能已经有所发展或是发生改变。

    klg-logger

    前言

    今天给大家介绍 logger 日志工具的使用,用 dev 的小哥哥的话说:log 工具,基于 tracer,简单,可以显示 log 的位置。
    详情请看以下配置方法,有问题欢迎在评论区提出!

    配置

    3.0 版本开始,将不对 tracer 做任何封装,直接使用 Tracer

    详细用法见 tracer 文档https://www.npmjs.com/package/tracer

    基本用法

    简单版本

    默认版本是把 log 输出到 console

    js
    import { Logger } from 'klg-logger'
    
    const logger = Logger({
      level: config.get('log.level'),
      dateformat: 'yyyy-mm-dd HH:MM:ss.L',
      inspectOpt: {
        showHidden: false, // if true then the object's non-enumerable properties will be shown too. Defaults to false
        depth: 5 // tells inspect how many times to recurse while formatting the object. This is useful for inspecting large complicated objects. Defaults to 2. To make it recurse indefinitely pass null.
      }
    })
    
    logger.info('hello world')
    logger.debug('hello %s', 'world')
    logger.error('hello %s', 'error')
    
    export {logger}  
    
    

    配置项的详细解释:

    interface LoggerConfig {
        /**
         * Output format (Using `tinytim` templating)
         *
         * Defaults to: `"{{timestamp}} <{{title}}> {{file}}:{{line}} ({{method}}) {{message}}"`
         *
         * Possible values:
         * - timestamp: current time
         * - title: method name, default is 'log', 'trace', 'debug', 'info', 'warn', 'error','fatal'
         * - level: method level, default is 'log':0, 'trace':1, 'debug':2, 'info':3, 'warn':4, 'error':5, 'fatal':6
         * - message: printf message, support %s string, %d number, %j JSON and auto inspect
         * - file: file name
         * - line: line number
         * - pos: position
         * - path: file's path
         * - method: method name of caller
         * - stack: call stack message
         */
        format?: string | [string, LevelOption<string>];
        /**
         * Datetime format (Using `Date Format`)
         */
        dateformat?: string;
        filters?: FilterFunction[] | LevelOption<FilterFunction> | Array<FilterFunction | LevelOption<FilterFunction | FilterFunction[]>>;
        /**
         * Output the log, if level of log larger than or equal to `level`.
         */
        level?: string | number;
        methods?: string[];
        /**
         * Get the specified index of stack as file information. It is useful for development package.
         */
        stackIndex?: number;
        inspectOpt?: {
            /**
             * If true then the object's non-enumerable properties will be shown too. Defaults to false.
             */
            showHidden: boolean,
            /**
             * Tells inspect how many times to recurse while formatting the object.
             * This is useful for inspecting large complicated objects.
             * Defaults to 2. To make it recurse indefinitely pass null.
             */
            depth: number
        };
    
        /**
         * Pre-process the log object.
         */
        preprocess?(data: LogOutput): void;
        /**
         * Transport function (e.g. console.log)
         */
        transport?: TransportFunction | TransportFunction[];
    }
    

    自定义 transport

    如果你需要把 log 输出到文件或者发送其他地方,可以自定义 transport function

    import { Logger } from 'klg-logger'
    const logger = new Logger({
      level: 'log',
      transport: function (data: Tracer.LogOutput) {
        // 写文件
        fs.write(data)
        // 发送其他地址
        tcp.send(data)
    
        assert(data)
        assert(data.level === 0)
      }
    })
    logger.log('hello world')
    

    每日分割日志

    如果你需要把 log 输出到文件或者发送其他地方,可以自定义 transport function

    import { LoggerDaily } from 'klg-logger'
    const logger = LoggerDaily({
      root: '/data/app/log',
      maxLogFiles: 10,
      allLogsFileName : true,
      level: 'log'
    })
    logger.log('hello world')
    logger.err = logger.error
    logger.err('hello world')
    

    配置字段:

    interface DailyFileConfig {
        /**
         * All daily log file's dir, default to: `'.'`.
         */
        root?: string;
        /**
         * Log file path format.
         *
         * Default to: `'{{root}}/{{prefix}}.{{date}}.log'`
         *
         * Possible values:
         * - `root`: all daily log file's dir, default to: `'.'`.
         * - `prefix`: it equal to `allLogsFileName`, if `allLogsFileName` is provided; else it will be the method name.
         * - `date`: today's date.
         */
        logPathFormat?: string;
        /**
         * Datetime format (Using `Date Format`)
         */
        splitFormat?: string;
        /**
         * If `allLogsFileName` is provided then all level logs will be move to one daily log file.
         */
        allLogsFileName?: boolean;
        maxLogFiles?: number;
    }
    

    著作权归本文作者所有,未经授权,请勿转载,谢谢。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5181 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:10 · PVG 17:10 · LAX 01:10 · JFK 04:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.