Morgan Logger + Express.js:在控制台中写入文件和显示

时间:2014-12-01 14:19:36

标签: javascript node.js logging express

我尝试使用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);
    }
}}));

但如果你有一个更好的......欢迎你!

2 个答案:

答案 0 :(得分:14)

来自github

var logger = require('morgan');

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

答案 1 :(得分:0)

在这里你去兄弟!它几乎使用你提供的一切。 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
    }

N.B我创建了日志文件夹,我有access.log文件:)。

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