ama icon indicating copy to clipboard operation
ama copied to clipboard

常用的網站後台Logger Library

Open sj82516 opened this issue 7 years ago • 2 comments

目的

我希望可以再網站後台使用Logger System,記錄每位使用者的Request Method、以及錯誤訊息,有以下需求

  1. 可以分類:如info/ warn/ error
  2. 上述分類可以導出到不同File,如server-info.log / server-warn.log
  3. 完整輸出錯誤

使用的工具

我在 Mac 10.10 下使用 npm 安裝 node.js 7.6.0 ,使用sails.js 0.12

遇到的問題

我原本使用winston,為了要可以分類輸出log,我參考以下做法

const winston = require('winston');

// let debug = new winston.Logger({
//     levels: {
//         debug: 0
//     },
//     transports: [
//         new (winston.transports.File)({ filename: './logs/debug.log', color: false,level: 'debug'}),
//         new (winston.transports.Console)({level: 'debug'})
//     ]
// });

let info = new winston.Logger({
    levels: {
        info: 1
    },
    transports: [
        new (winston.transports.File)({ filename: './logs/info.log', level: 'info'}),
        new (winston.transports.Console)({level: 'info'})
    ]
});

let warn = new winston.Logger({
    levels: {
        warn: 2
    },
    transports: [
        new (winston.transports.File)({ filename: './logs/warning.log', level: 'warn'}),
        new (winston.transports.Console)({level: 'warn'})
    ]
});

let error = new winston.Logger({
    levels: {
        error: 3
    },
    transports: [
        new (winston.transports.File)({ filename: './logs/error.log', level: 'error'}),
        new (winston.transports.Console)({level: 'error'})
    ]
});

module.exports = {
    info: function(msg){
        info.info(msg);
    },
    warn: function(msg){
        warn.warn(msg);
    },
    error: function(msg){
        error.error(msg);
    },
    log: function(level,msg){
        let lvl = exports[level];
        lvl(msg);
    }
};

但是發現 他會出現資料掉失的問題,例如說我插入middlewear想要打印全部的HTTP Request

myRequestLogger: function (req, res, next) {
            console.log(req.method, req.url , req.method, req.body, req.query);
            logger.info("Requested :: " + ", req-method:" + req.method +
                ", req-url:" + req.url +
                req.method==='POST' ? ", req-body"+req.body:"," +
                req.method==='GET' ? ", req-query" + req.query: "");
            return next();
        },

發現winston並沒有輸出應有的資訊,我有使用console.log作為比對,console.log顯示為正確資訊

嘗試過的解法

我有照Sails官網的做法sails.config.log會有同樣的資訊不完整或是遺失的問題

sj82516 avatar Mar 31 '17 10:03 sj82516

抱歉我剛才發現錯誤了,忘記+的優先順序高於?判斷式,所以會導致輸出錯誤。 麻煩管理員刪除Issue,謝謝

sj82516 avatar Mar 31 '17 10:03 sj82516

sails 本身就有帶 log module 了,是可以指定輸出的 file path 的

billiebbb avatar Jan 12 '18 06:01 billiebbb