【问题标题】:Morgan Logger + Express.js: writing file AND showing in consoleMorgan Logger + Express.js:写入文件并在控制台中显示
【发布时间】:2015-01-29 13:47:49
【问题描述】:

我正在尝试使用 Morgan 和 Express.js 来编写日志文件,同时也在控制台上显示我的日志。 我正在使用此代码:

var logger = require('morgan');
var accessLogStream = fs.createWriteStream('./access.log', {flags: 'a'});
app.use(logger("dev",{stream: accessLogStream}));

但通过这种方式,我只能获取控制台日志,而我的 access.log 文件仍然为空。

如果我这样做(不指定“dev”):

var logger = require('morgan');
var accessLogStream = fs.createWriteStream('./access.log', {flags: 'a'});
app.use(logger({stream: accessLogStream}));

我在我的文件中获得了日志,但在控制台上却没有。

如何同时获取控制台和文件上的日志?

提前谢谢你!

编辑: 此刻我找到了这个解决方案:

app.use(logger({format:"[:date[clf]] :method :url :status :response-time ms",stream: {
    write: function(str)
    {
        accessLogStream.write(str);
        console.log(str);
    }
}}));

但如果你有更好的……不客气!

【问题讨论】:

    标签: javascript node.js logging express


    【解决方案1】:

    兄弟,加油!它几乎使用了你提供的一切。 100% 工作测试结果。

    //Logger: production as well as dev. You can set morgan to log differently depending on your environment
    
     if(app.get("env")=="production") {
    
            var accessLogStream = fs.createWriteStream(__dirname + '/logs/' + "access.log", {flags: 'a'});
            app.use(morgan({stream: accessLogStream}));
        }
         else {
            app.use(morgan("dev")); //log to console on development
        }
    

    注意,我已经创建了日志文件夹,并且我在那里有 access.log 文件:)。

    如果您想测试 BOOT YOU NODEJS AS NODE_ENV=production

    【讨论】:

      【解决方案2】:

      来自github

      var logger = require('morgan');
      
      app.use(logger('common', {
          stream: fs.createWriteStream('./access.log', {flags: 'a'})
      }));
      app.use(logger('dev'));
      

      【讨论】:

      • 抱歉没有检查答案
      • @Juan 上面的例子 console.log 信息。 flags: 'a' 以追加模式打开文件。
      猜你喜欢
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      相关资源
      最近更新 更多