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

Posted

技术标签:

【中文标题】Morgan Logger + Express.js:写入文件并在控制台中显示【英文标题】:Morgan Logger + Express.js: writing file AND showing in console 【发布时间】: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);
    
));

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

【问题讨论】:

【参考方案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' 以追加模式打开文件。

以上是关于Morgan Logger + Express.js:写入文件并在控制台中显示的主要内容,如果未能解决你的问题,请参考以下文章

Express的日志模块morgan

Node.js - 记录 / 使用 morgan 和 winston

需要 Morgan 和 Winston 使用 btyesize 记录 api 响应

如何在nestjs中设置morgan-body

尝试使用 Nodejs 库 morgan-body

收到请求时使用 morgan 记录 POST 正文大小