server/utils/knex.js

  1. /**
  2. * Knex-related utilities.
  3. *
  4. * @module server/utils/knex
  5. * @see http://knexjs.org
  6. */
  7. const _ = require('lodash');
  8. const config = require('../../config');
  9. const logger = config.logger('db');
  10. /**
  11. * A logger function that can be passed to knex to log all database queries.
  12. *
  13. * @function
  14. * @param {*} query - A knex query.
  15. */
  16. exports.logger = function(query) {
  17. let message = query.sql;
  18. if (query.bindings) {
  19. query.bindings.forEach((binding, i) => {
  20. message = message.replace(new RegExp(`\\$${i + 1}`), logValue(binding));
  21. });
  22. }
  23. if (!message.match(/;$/)) {
  24. message = message + ';';
  25. }
  26. logger.trace(message);
  27. }
  28. function logValue(value) {
  29. if (value === undefined) {
  30. return 'undefined';
  31. }
  32. if (value instanceof Buffer) {
  33. value = value.toString('hex');
  34. } else {
  35. value = JSON.stringify(value);
  36. }
  37. if (value.length > 50) {
  38. value = `${value.substring(0, 50)}...`;
  39. if (value.match(/^"/)) {
  40. value = `${value}"`;
  41. }
  42. }
  43. return value;
  44. }