Winston未在Google Cloud Compute Engine上托管的Node.js应用程序的产品版本中记录事件
我正在使用winston在我的应用程序中记录一些事件。当我在本地使用Winston未在Google Cloud Compute Engine上托管的Node.js应用程序的产品版本中记录事件,node.js,google-app-engine,logging,google-compute-engine,winston,Node.js,Google App Engine,Logging,Google Compute Engine,Winston,我正在使用winston在我的应用程序中记录一些事件。当我在本地使用node app.js运行代码时,winston会很好地记录事件。但当我将代码推送到服务器时(gcloud preview app deploy app.yaml),甚至在本地生产环境中运行它(gcloud preview app run app.yaml),它不会记录任何事件。winston在本地创建general.log和request.log,并根据需要对其进行编辑,但在生产模式下不执行任何操作 这是我的logging.j
node app.js
运行代码时,winston会很好地记录事件。但当我将代码推送到服务器时(gcloud preview app deploy app.yaml
),甚至在本地生产环境中运行它(gcloud preview app run app.yaml
),它不会记录任何事件。winston在本地创建general.log
和request.log
,并根据需要对其进行编辑,但在生产模式下不执行任何操作
这是我的logging.js代码
"use strict";
var fs = require('fs');
var path = require('path');
var winston = require('winston');
var expressWinston = require('express-winston');
module.exports = function(logPath) {
// Create logging directory if necessary.
if (!fs.existsSync(logPath)) {
fs.mkdirSync(logPath);
}
/*
Logger to capture all requests and output them to the console
as well as request.log.
*/
// [START requests]
var requestLogger = expressWinston.logger({
transports: [
new winston.transports.Console({
json: false
}),
new winston.transports.File({
filename: path.join(logPath, 'request.log'),
})
],
expressFormat: true
});
// [END requests]
/*
Logger to capture any top-level errors from requests and
output them in error.log
*/
// [START errors]
var errorLogger = expressWinston.errorLogger({
transports: [
new winston.transports.Console({
json: false
}),
new winston.transports.File({
filename: path.join(logPath, 'error.log'),
})
]
});
// [END errors]
/*
General logger used for .log, .info, etc. Outputs all logs
to the console as well as general.log.
*/
// [START general]
winston.add(winston.transports.File, {
filename: path.join(logPath, 'general.log')
});
// [END general]
return {
requestLogger: requestLogger,
errorLogger: errorLogger,
error: winston.error,
warn: winston.warn,
info: winston.info,
log: winston.log,
verbose: winston.verbose,
debug: winston.debug,
silly: winston.silly
};
};
下面是我在app.js中记录的一个示例(不重要)事件,用于测试目的
var logging = require('./lib/logging')(process.env.LOG_PATH || './');
app.use(logging.requestLogger);
app.use(logging.errorLogger);
logging.info("Sample test log");
为什么这段代码不能在生产模式下工作
我按照这里的步骤设置了这个代码
您的NodeJ实际上是在Google Compute Engine托管虚拟机上的Docker容器中运行的 您必须使用SSH连接到托管VM并连接到容器
sudo docker ps
这将输出4个容器:
gunicorn和nginx用于代理,fluentd是登录到应用程序引擎的连接器,最后npm start是您的节点应用程序
sudo docker exec -it <ID of the container running npm start> bash
sudo docker exec-it bash
这会在容器上给出提示,您应该能够从那里看到日志文件。
请注意,如果您想在App Engine Web控制台上查看日志(您应该将这些文件放在文件夹“/var/log/App\u Engine/custom\u logs/*.log”中)
在我写这篇文章的时候,在谷歌云上创建和查看日志确实不容易。 我想建议您在使用谷歌云时使用另一种登录方式。您可能想尝试使用winston和papertrail 您可以使用
winston express
和winston papertrail
节点模块记录您的请求。papertrail提供了丰富多彩的界面,可以快速分析日志
查看有关如何配置的详细信息。谢谢!我使用SSH连接到我的实例并尝试导航到custom_logs目录。但路径如下:'/var/log/app_engine/app/custom_logs/*.log',当我使用该路径运行时,应用程序会中断,当我使用您提供的路径运行时,不会发生任何事情,是的,我想查看我的日志在Web控制台中。默认情况下,文件夹“custom_logs”不存在,但我认为您在调用记录器时创建了它。您提供的日志路径是什么?它应该是“/var/log/app_engine/custom_logs/”