首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >表示摩根没有将日志写入文件或STDOUT

表示摩根没有将日志写入文件或STDOUT
EN

Stack Overflow用户
提问于 2016-03-09 23:04:48
回答 4查看 6K关注 0票数 6

我有一个Express应用程序,我想将日志添加到其中。我安装了Morgan并在管理API调用的文件中设置了中间件:

/src/api/calls.js

摩根中间件被设置为将日志记录结果发送到一个文件: errors.txt

代码语言:javascript
运行
复制
    var express = require('express'),
        app = express(),
        dbConfig = require('../config/db.config'),
        connectToMongo = require('./db.js'),
        bodyParser = require("body-parser"),
        ObjectId = require('mongodb').ObjectID,
        morgan = require('morgan'),
        fs = require('fs'),
        Sb;

    //middleware
    var accessLogStream = fs.createWriteStream('../sample/errors.txt', {flags: 'a'})
    app.use(morgan('combined',  {stream: accessLogStream}));

    app.use(function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
      next();
    });
    app.use(bodyParser.urlencoded({ extended: true }));

module.exports = function apiRoutes(app) {
  app.get("/v1/api/sample/:call", function(req, res, next) {
     //route db calls and code here
  });
}

/app.js

需要将api路由放到app.js文件中,并调用apiRoutes函数:

代码语言:javascript
运行
复制
var express = require('express');
var app = express();
var config = require('./src/config/server.config');
//api and server
var http = require('http');
var server = new http.Server(app);

//load the api calls for the server
var apiRoutes = require('./src/api/calls.js');
apiRoutes(app);

问题是,当我将代码更改为STDOUT时,我不会将任何日志数据写入我的errors.txt文件,甚至不会写入控制台中。我在这里错过了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-10 00:11:35

我知道了--日志代码需要定位在app.js文件中,而不是保存api调用的文件中。我知道日志代码需要成为第一个中间件,但我没有意识到它需要在服务器的新实例实例化之后。

代码语言:javascript
运行
复制
var express = require('express'),
    app = express(),
    config = require('./src/config/server.config'),
    morgan = require('morgan'),
    fs = require('fs'),
//api and server
    http = require('http'),
    server = new http.Server(app); 

//set up the logger
var accessLogStream = fs.createWriteStream(__dirname + '/access.log', {flags: 'a'})
app.use(morgan('combined',  {"stream": accessLogStream}));


//load the api calls for the server
var apiRoutes = require('./src/api/calls.js');
apiRoutes(app);
票数 12
EN

Stack Overflow用户

发布于 2020-12-24 11:51:02

如果您正在运行/调试VS代码中的节点代码,则此问题是由VS代码引起的。

摩根通过process.stdout.write写到控制台,VS代码的调试控制台不支持它。调试控制台将只显示通过console.log编写的内容。

有两种方法可以解决这个问题。这两种方法都包括向launch.json添加实体

  • 第一个解决方案-添加"console": "integratedTerminal"
  • 第二个解决方案-添加"outputCapture": "std" (不尊重日志颜色)

我在这里找到了这样的解决方案:

票数 5
EN

Stack Overflow用户

发布于 2019-12-18 12:51:59

当我使用特快时,它对我有用。

代码语言:javascript
运行
复制
app.use(morgan('dev'));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35904450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档