Gre*_*een 97 logging node.js express
我无法登录摩根.它不会将信息记录到控制台.该文档没有说明如何使用它.
我想看看变量是什么.这是来自response.jsexpressjs框架文件的代码:
var logger = require("morgan");
res.render = function(view, options, fn){
options = options || {};
var self = this;
var req = this.req;
var app = req.app;
// support callback function as second arg
if ('function' == typeof options) {
fn = options, options = {};
}
// merge res.locals
options._locals = self.locals;
// default callback to respond
fn = fn || function(err, str){
if (err) return req.next(err);
self.send(str);
};
// Here I want to see what fn is
// But it doesn't show me anything in console
// How to use it?
logger(fn);
// render
app.render(view, options, fn);
};
Run Code Online (Sandbox Code Playgroud)
如何使用摩根?
Nik*_*pal 104
似乎你也和我一样困惑,我偶然发现了这个问题.我认为我们将日志与手动日志关联,就像我们在Java中用log4j(如果你知道java)那样我们实例化一个Logger并说log'this'.
然后我挖了摩根代码,原来它不是那种记录器,它是用于自动记录请求,响应和相关数据.当作为中间件添加到express/connect应用程序时,默认情况下它应该将语句记录到stdout,显示以下详细信息:远程ip,请求方法,http版本,响应状态,用户代理等.它允许您使用令牌修改日志或通过定义'dev'或甚至注销到输出流(如文件)来为它们添加颜色.
出于我们认为我们可以使用它的目的,在这种情况下,我们仍然必须使用:
console.log(..);
Run Code Online (Sandbox Code Playgroud)
或者,如果您想为对象创建漂亮的输出:
var util = require("util");
console.log(util.inspect(..));
Run Code Online (Sandbox Code Playgroud)
mfl*_*999 54
我想我有一种方法可能无法得到你想要的东西,但是你可以将Morgan的日志记录与log4js集成 - 换句话说,你所有的日志记录活动都可以到达同一个地方.我希望Express服务器的这个摘要或多或少不言自明:
var express = require("express");
var log4js = require("log4js");
var morgan = require("morgan");
...
var theAppLog = log4js.getLogger();
var theHTTPLog = morgan({
"format": "default",
"stream": {
write: function(str) { theAppLog.debug(str); }
}
});
....
var theServer = express();
theServer.use(theHTTPLog);
Run Code Online (Sandbox Code Playgroud)
现在你可以把你想要的任何东西写到AppLog上,Morgan会把它想要的东西写到同一个地方,使用相同的appenders等等.当然,你可以在流包装器而不是debug()中调用info()或任何你喜欢的东西. - 这只反映了您希望为Morgan的req/res日志记录提供的日志记录级别.
Bil*_*ill 32
摩根不应该习惯以你描述的方式登录.Morgan的构建方式是以Apache和Nginx等服务器登录error_log或access_log的方式进行日志记录.作为参考,这是你如何使用摩根:
var express = require('express'),
app = express(),
morgan = require('morgan'); // Require morgan before use
// You can set morgan to log differently depending on your environment
if (app.get('env') == 'production') {
app.use(morgan('common', { skip: function(req, res) { return res.statusCode < 400 }, stream: __dirname + '/../morgan.log' }));
} else {
app.use(morgan('dev'));
}
Run Code Online (Sandbox Code Playgroud)
请注意您看到morgan使用选项哈希调用的生产线 {skip: ..., stream: __dirname + '/../morgan.log'}
该stream对象的属性确定记录器输出的位置.默认情况下它是STDOUT(您的控制台,就像您想要的那样),但它只会记录请求数据.它不会做什么console.log().
如果您想动态检查内容,请使用内置util库:
var util = require('util');
console.log(util.inspect(anyObject)); // Will give you more details than console.log
Run Code Online (Sandbox Code Playgroud)
所以你的问题的答案就是你提出了错误的问题.但是,如果您仍然想使用Morgan来记录请求,那么就去吧.
akr*_*smv 15
我之前遇到过同样的问题,而是使用了温斯顿.如上所述,摩根用于自动记录请求/响应.Winston的配置方式与log4Net/log4J几乎相同,具有严重性级别,可以记录的不同流等.
例如:
npm install winston
然后,如果您在应用程序初始化的某处调用以下代码:
var winston = require('winston');
// setup default logger (no category)
winston.loggers.add('default', {
console: {
colorize: 'true',
handleExceptions: true,
json: false,
level: 'silly',
label: 'default',
},
file: {
filename: 'some/path/where/the/log/file/reside/default.log',
level: 'silly',
json: false,
handleExceptions: true,
},
});
//
// setup logger for category `usersessions`
// you can define as many looggers as you like
//
winston.loggers.add('usersessions', {
console: {
level: 'silly',
colorize: 'true',
label: 'usersessions',
json: false,
handleExceptions: true,
},
file: {
filename: 'some/path/where/the/log/file/reside/usersessions.log',
level: 'silly',
json: false,
handleExceptions: true,
},
});
Run Code Online (Sandbox Code Playgroud)
注意:在调用上面的代码之前,winston.loggers是空的,即你还没有配置任何记录器.非常类似于Log4Net/J XmlConfigure方法 - 您需要先调用它们,以初始化您的日志记录.
然后,稍后您可以在应用程序服务器端代码中执行以下操作:
var winston = require('winston');
// log instances as defined in first snippet
var defaultLog = winston.loggers.get('default');
var userSessionsLog = winston.loggers.get('usersessions');
defaultLog.info('this goes to file default.log');
userSessionsLog.debug('this goes to file usersessions.log')
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
有关进一步的文档参考:https://www.npmjs.com/package/winston
小智 9
摩根: - 摩根是一个中间件,可以帮助我们识别访问我们应用程序的客户.基本上是记录器.
要使用摩根,我们需要遵循以下步骤: -
npm install --save morgan
这将把morgan添加到json.package文件中
var morgan = require('morgan');
3> //创建写入流(在追加模式下)
var accessLogStream = fs.createWriteStream(
path.join(__dirname, 'access.log'), {flags: 'a'}
);
// setup the logger
app.use(morgan('combined', {stream: accessLogStream}));
Run Code Online (Sandbox Code Playgroud)
注意:确保您不要盲目地检查以上,确保您拥有所需的所有条件.
一旦用户访问您的应用,上面将自动创建一个access.log文件到您的root.
小智 7
var express = require('express');
var fs = require('fs');
var morgan = require('morgan')
var app = express();
// create a write stream (in append mode)
var accessLogStream = fs.createWriteStream(__dirname + '/access.log',{flags: 'a'});
// setup the logger
app.use(morgan('combined', {stream: accessLogStream}))
app.get('/', function (req, res) {
res.send('hello, world!')
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124640 次 |
| 最近记录: |