Add request logging
This commit is contained in:
@ -1,5 +0,0 @@
|
||||
import corsMiddleware from 'cors';
|
||||
|
||||
const cors = corsMiddleware();
|
||||
|
||||
export default cors;
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
71
modules/middleware/requestLog.js
Normal file
71
modules/middleware/requestLog.js
Normal 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();
|
||||
}
|
||||
@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user