Add request logging

This commit is contained in:
Michael Jackson
2019-08-02 17:34:00 -07:00
parent 7af4d4dc58
commit 4774e61d50
14 changed files with 112 additions and 52 deletions

View File

@ -1,5 +0,0 @@
import corsMiddleware from 'cors';
const cors = corsMiddleware();
export default cors;

View File

@ -157,7 +157,7 @@ function searchEntries(stream, filename) {
* Redirect to the "index" file if a directory was requested.
*/
async function findEntry(req, res, next) {
const stream = await getPackage(req.packageName, req.packageVersion);
const stream = await getPackage(req.packageName, req.packageVersion, req.log);
const { foundEntry: entry, matchingEntries: entries } = await searchEntries(
stream,
req.filename

View File

@ -1,15 +0,0 @@
import morgan from 'morgan';
const logger = morgan(
process.env.NODE_ENV === 'development'
? 'dev'
: ':date[clf] - :method :url :status :res[content-length] - :response-time ms',
{
skip:
process.env.NODE_ENV === 'production'
? (req, res) => res.statusCode < 400 // Log only errors in production
: () => process.env.NODE_ENV === 'test' // Skip logging in test env
}
);
export default logger;

View File

@ -0,0 +1,71 @@
import util from 'util';
// https://cloud.google.com/appengine/docs/standard/nodejs/runtime#environment_variables
const projectId = process.env.GAE_APPLICATION;
const enableDebugging = process.env.DEBUG != null;
function noop() {}
function createLog(req) {
const traceContext = req.headers['x-cloud-trace-context'];
if (projectId && traceContext) {
const [traceId, spanId] = traceContext.split('/');
const trace = `projects/${projectId}/traces/${traceId}`;
return {
debug: enableDebugging
? (format, ...args) => {
console.log(
JSON.stringify({
severity: 'DEBUG',
'logging.googleapis.com/trace': trace,
'logging.googleapis.com/spanId': spanId,
message: util.format(format, ...args)
})
);
}
: noop,
info: (format, ...args) => {
console.log(
JSON.stringify({
severity: 'INFO',
'logging.googleapis.com/trace': trace,
'logging.googleapis.com/spanId': spanId,
message: util.format(format, ...args)
})
);
},
error: (format, ...args) => {
console.error(
JSON.stringify({
severity: 'ERROR',
'logging.googleapis.com/trace': trace,
'logging.googleapis.com/spanId': spanId,
message: util.format(format, ...args)
})
);
}
};
}
return {
debug: enableDebugging
? (format, ...args) => {
console.log(util.format(format, ...args));
}
: noop,
info: (format, ...args) => {
console.log(util.format(format, ...args));
},
error: (format, ...args) => {
console.error(util.format(format, ...args));
}
};
}
export default function requestLog(req, res, next) {
req.log = createLog(req);
next();
}

View File

@ -17,8 +17,8 @@ function semverRedirect(req, res, newVersion) {
);
}
async function resolveVersion(packageName, range) {
const versionsAndTags = await getVersionsAndTags(packageName);
async function resolveVersion(packageName, range, log) {
const versionsAndTags = await getVersionsAndTags(packageName, log);
if (versionsAndTags) {
const { versions, tags } = versionsAndTags;
@ -41,7 +41,11 @@ async function resolveVersion(packageName, range) {
* the resolved version number if necessary.
*/
async function validateVersion(req, res, next) {
const version = await resolveVersion(req.packageName, req.packageVersion);
const version = await resolveVersion(
req.packageName,
req.packageVersion,
req.log
);
if (!version) {
return res
@ -56,7 +60,8 @@ async function validateVersion(req, res, next) {
req.packageConfig = await getPackageConfig(
req.packageName,
req.packageVersion
req.packageVersion,
req.log
);
if (!req.packageConfig) {