Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. const path = require('path');
  2. const util = require('util');
  3. const { createLogger, format, transports } = require('winston');
  4.  
  5. const dbConfig = require('./config').mongodb;
  6.  
  7. const betterSplat = format((info, opts) => {
  8. let argsArray = info[Symbol.for('splat')];
  9. if(argsArray) {
  10. let i = 0;
  11. while(info.message.indexOf('%s') !== -1 && argsArray[i])
  12. info.message = info.message.replace('%s', util.inspect(argsArray[i++]));
  13. for(; i < argsArray.length; ++i)
  14. info.message += ' ' + util.inspect(argsArray[i]);
  15. }
  16.  
  17. return info;
  18. });
  19.  
  20. const infoKeys = [
  21. 'level',
  22. 'message',
  23. 'timestamp',
  24. 'label',
  25. 'stack'
  26. ];
  27.  
  28. let transport;
  29. let exitOnError;
  30. const formats = [
  31. format.timestamp({ format: 'DD/MM HH:mm:ss' }),
  32. format.label({ label: path.basename(process.mainModule.filename) }),
  33. format.errors({ stack: true }),
  34. format.splat(),
  35. //betterSplat(),
  36. format.printf(info => {
  37. // console.debug(info);
  38. // for(let k in info)
  39. // if(infoKeys.indexOf(k) === -1)
  40. // info.message += ' ' + util.inspect({[k]: info[k]});
  41. info.message = typeof info.message === 'object' ? util.inspect(info.message) : info.message;
  42. return `${info.timestamp} ${info.level} [${info.label}] ${info.message} ${info.stack || ''}`;
  43. })
  44. //format.json()
  45. ];
  46.  
  47. if (process.env.NODE_ENV == 'production' || process.env.NODE_ENV == 'prod') {
  48. require('winston-mongodb');
  49. transport = new transports.MongoDB({
  50. level: 'debug',
  51. db: dbConfig.url + '/' + dbConfig.db,
  52. collection: dbConfig.collection,
  53. username: dbConfig.username,
  54. password: dbConfig.password,
  55. label: path.basename(process.mainModule.filename),
  56. handleExceptions: true,
  57. format: format.metadata({ fillWith: ['stack'] })
  58. });
  59. exitOnError = false;
  60. } else {
  61. formats.unshift(format.colorize());
  62. transport = new transports.Console({
  63. level: process.env.NODE_ENV == 'debug' ? 'debug' : 'info',
  64. handleExceptions: true
  65. });
  66. exitOnError = true;
  67. }
  68.  
  69. const logger = createLogger({
  70. level: 'debug',
  71. exitOnError,
  72. transports: [transport],
  73. format: format.combine(...formats)
  74. });
  75.  
  76. module.exports = logger;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement