log filter
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,3 +2,4 @@ node_modules/
|
|||||||
.env
|
.env
|
||||||
certs/
|
certs/
|
||||||
logs/
|
logs/
|
||||||
|
capturedDataReference
|
||||||
42
server.js
42
server.js
@@ -35,6 +35,25 @@ function truncateUrl(url) {
|
|||||||
return `${url.slice(0, CONSOLE_URL_MAX_LENGTH)}...`;
|
return `${url.slice(0, CONSOLE_URL_MAX_LENGTH)}...`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const lastInitState = { url: '', result: '', timestamp: 0 };
|
||||||
|
|
||||||
|
function shouldLogInit(url, statusCode, durationMs, responseBody) {
|
||||||
|
if (statusCode !== 200) return true;
|
||||||
|
if (durationMs > 400) return true;
|
||||||
|
|
||||||
|
const now = Date.now();
|
||||||
|
const timeSinceLast = now - lastInitState.timestamp;
|
||||||
|
|
||||||
|
if (timeSinceLast < 30_000 && url === lastInitState.url && responseBody === lastInitState.result) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastInitState.url = url;
|
||||||
|
lastInitState.result = responseBody;
|
||||||
|
lastInitState.timestamp = now;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function formatBody(buffer) {
|
function formatBody(buffer) {
|
||||||
if (!buffer.length) {
|
if (!buffer.length) {
|
||||||
return '(empty)';
|
return '(empty)';
|
||||||
@@ -68,16 +87,20 @@ const loggedJtlHandler = async (req, res) => {
|
|||||||
|
|
||||||
const responseBody = formatBody(responseBuffer);
|
const responseBody = formatBody(responseBuffer);
|
||||||
const durationMs = Date.now() - started;
|
const durationMs = Date.now() - started;
|
||||||
logger.info(`${req.socket.remoteAddress} ${req.method} ${truncateUrl(req.url)} ${res.statusCode} ${durationMs}ms`);
|
const isInit = req.url.startsWith('/api/v1/init');
|
||||||
|
|
||||||
logRequest({
|
if (!isInit || shouldLogInit(req.url, res.statusCode, durationMs, responseBody)) {
|
||||||
remoteAddress: req.socket.remoteAddress,
|
logger.info(`${req.socket.remoteAddress} ${req.method} ${truncateUrl(req.url)} ${res.statusCode} ${durationMs}ms`);
|
||||||
method: req.method,
|
|
||||||
url: req.url,
|
logRequest({
|
||||||
statusCode: res.statusCode,
|
remoteAddress: req.socket.remoteAddress,
|
||||||
durationMs,
|
method: req.method,
|
||||||
response: responseBody,
|
url: req.url,
|
||||||
});
|
statusCode: res.statusCode,
|
||||||
|
durationMs,
|
||||||
|
response: responseBody,
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const httpsServer = https.createServer(
|
const httpsServer = https.createServer(
|
||||||
@@ -102,7 +125,6 @@ async function start() {
|
|||||||
logger.info(`Certificate: ${certPath}`);
|
logger.info(`Certificate: ${certPath}`);
|
||||||
logger.info(`Pairing code: ${PAIRING_CODE}`);
|
logger.info(`Pairing code: ${PAIRING_CODE}`);
|
||||||
logger.info(`Auth token: ${AUTH_TOKEN}`);
|
logger.info(`Auth token: ${AUTH_TOKEN}`);
|
||||||
logger.info('Import cert.pem into JTL POS trust store if required.');
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user