我设法使用以下命令设置日志记录graphQL错误:
app.use('/graphql', graphqlHTTP(request => {
return {
schema,
rootValue: {
request
},
formatError: error => {
const params = {
message : error.message,
locations: error.locations,
stack : error.stack
};
winston.error(`message: "${error.message}", QUERY: "${request.body.query}"`);
// Optional ${request.body.operationName} ${request.body.variables}
return (params);
}
}
}));
我如何设置一个通用函数来访问请求和响应,即使没有错误?
编辑:我已经设法通过以下方式记录所有请求:
function loggingMiddleware(req, res, next) {
if (req.url.startsWith('/graphql')) {
winston.debug('REQUEST: ', req.body);
}
next();
}
app.use(loggingMiddleware);
在我调用app.use('/graphql')
之前,我仍然不知道如何运行"post graphql处理“处理程序来记录响应。
发布于 2017-01-07 05:53:25
您可以在express中代理req.send()
函数。
app.use(function (req, res, next) {
let originalSend = res.send;
res.send = function (data) {
console.log(data);
originalSend.apply(res, Array.from(arguments));
}
next();
})
这只是为了向你展示如何实现这样的事情。
我知道你用的是winston,所以我建议你用express-winston。
另外,请查看this。
发布于 2019-06-21 03:26:22
我正在使用这个包来实现您想要的:https://github.com/withspectrum/graphql-log
我还使用了debug,并添加了一个日期作为日志的前缀,下面是一个示例代码:
if (process.env.NODE_ENV === 'development') {
const createGraphQLLogger = require('graphql-log');
const debug = require('debug')('server:resolvers');
debug.enabled = true;
const logExecutions = createGraphQLLogger({
prefix: new Date(),
logger: debug
})
logExecutions(resolvers);
}
发布于 2020-04-14 15:16:08
这很简单。express-graphql
提供了一种extensions
机制,它直接将result
作为参数之一提供给您。
app.use('/graphql', graphQLHTTP(request => {
return {
schema: ...,
extensions({
result,
}) {
console.log(result.data);
},
};
}));
https://stackoverflow.com/questions/41142471
复制相似问题