Node.js 如何在nginx中正确使用morgan? 服务器:Ubuntu 18.04 节点:9.11.2 净现值:6.6.0 摩根:1.9.1 温斯顿:3.1.0 Nginx:1.14.0(Ubuntu)

Node.js 如何在nginx中正确使用morgan? 服务器:Ubuntu 18.04 节点:9.11.2 净现值:6.6.0 摩根:1.9.1 温斯顿:3.1.0 Nginx:1.14.0(Ubuntu),node.js,express,nginx,winston,morgan,Node.js,Express,Nginx,Winston,Morgan,我在ubuntu服务器上有一个使用nginx的nodejs应用程序。 为错误日志安装winston和morgan,但我的应用程序不使用winston,它只在我的nginx access.log文件(var/log/nginx/access.log)中注册http请求。 它也不会生成我需要的app.log文件。 我的申请似乎出于某种原因忽略了摩根和温斯顿的关系 我的app.js var express = require('express'); var compression = require(

我在ubuntu服务器上有一个使用nginx的nodejs应用程序。 为错误日志安装winston和morgan,但我的应用程序不使用winston,它只在我的nginx access.log文件(var/log/nginx/access.log)中注册http请求。 它也不会生成我需要的app.log文件。 我的申请似乎出于某种原因忽略了摩根和温斯顿的关系

我的app.js

var express = require('express');
var compression = require('compression')
var path = require('path');
var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var author = require('./routes/author');
var post = require('./routes/post');
var user = require('./routes/user');
var photo = require('./routes/photo');

var winston = require('./lib/config/winston');

var app = express();

app.use(morgan('combined', { stream: winston.stream }));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(compression());

var PAGING_COUNT = 10;
var MAX_PAGING_COUNT = 50;

app.use(function(req, res, next) {
  var s, c;
  if(!req.query) {
    s = 0;
    c = PAGING_COUNT;
  }
  else {
    var s = parseInt(req.query.s);
    var c = parseInt(req.query.c);
    if(!s) s = 0;
    if(!c) c = PAGING_COUNT;
  }
  if(c > MAX_PAGING_COUNT) {
    var err = new Error('Limit Request');
    err.status = 400;
    return next(err);
  }
  req.paging = { start: s, count: c};
  next();
});

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, api_key, Authorization");
  res.header("Access-Control-Expose-Headers", "Origin, X-Requested-With, Content-Type, Accept, api_key, Authorization");
  res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE");
  next();
});

app.use('/author', author);
app.use('/post', post);
app.use('/user', user);
app.use('/photo', photo);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500).send(err.message);
});

module.exports = app;
My winston.js(./lib/config/winston.js)

我的nginx服务器配置

server {
    listen 80;
    listen [::]:80;

    #your subdomain
    server_name api.mydomain.com;

    location /v1/ {
        rewrite ^/v1/?(.*) /$1 break;
        proxy_buffering off;
        #your aplication port
        proxy_pass http://localhost:9000;
    }

    location /start/ {
        rewrite ^/start/?(.*) /$1 break;
        proxy_buffering off;
        #your aplication port
        proxy_pass http://localhost:8080;
    }
}
server {
    server_name storage.mydomain.com;
    root /home/ubuntu/app-backend/public/;
    index index.html;
    location /files {
        try_files $uri =404;
    }
}
server {
    listen 80;
    listen [::]:80;
    #point to build directory
    root /home/ubuntu/app-frontend/build;
    index index.html index.htm;

    server_name admin.mydomain.com;
    location / {
        root /home/ubuntu/app-frontend/build;
        try_files $uri $uri/ /index.html;
    }
}
在我的本地服务器上,我得到以下信息

{"message":"::1 - - [23/Jan/2019:04:36:41 +0000] \"PUT /author/push/012c2cab HTTP/1.1\" 200 17 \"http://localhost:3000/home/page/1\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36\"\n","level":"info"}
MY_IP - - [23/Jan/2019:06:35:33 +0000] "PUT /v1/author/push/6a839012 HTTP/1.1" 500 20 "http://admin.mydomain.com/home/page/1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
在我的生产服务器中,我得到以下信息

{"message":"::1 - - [23/Jan/2019:04:36:41 +0000] \"PUT /author/push/012c2cab HTTP/1.1\" 200 17 \"http://localhost:3000/home/page/1\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36\"\n","level":"info"}
MY_IP - - [23/Jan/2019:06:35:33 +0000] "PUT /v1/author/push/6a839012 HTTP/1.1" 500 20 "http://admin.mydomain.com/home/page/1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
我的文件:

您既不为摩根也不为温斯顿使用stream

你必须使用

然后将
accessLogStream
用于
morgan

app.use(morgan('combined',{stream:accessLogStream}))