logger.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const winston = require('winston');
  2. const chalk = require('chalk');
  3. const { format, createLogger: createWinstonLogger, transports } = winston;
  4. const { Console } = transports;
  5. const { combine, printf } = format;
  6. const DEFAULT_COMMON_OPTIONS = {
  7. colorize: true,
  8. timestamp: true,
  9. };
  10. function fillDigit(num) {
  11. const str = String(num);
  12. if (str.length === 1) {
  13. return `0${str}`;
  14. }
  15. return str;
  16. }
  17. function getFormatedDate() {
  18. const date = new Date();
  19. return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`
  20. + ` ${fillDigit(date.getHours())}:${fillDigit(date.getMinutes())}`
  21. + `:${fillDigit(date.getSeconds())}`;
  22. }
  23. function createTransports() {
  24. return [
  25. new Console(Object.assign({}, DEFAULT_COMMON_OPTIONS)),
  26. ];
  27. }
  28. function colorLevel(str) {
  29. if (str === 'error') {
  30. return chalk.red(str);
  31. } else if (str === 'info') {
  32. return chalk.green(str);
  33. }
  34. return str;
  35. }
  36. function createLogger(level = 'warn') {
  37. return createWinstonLogger({
  38. format: combine(printf(info =>
  39. `${getFormatedDate()} - ${colorLevel(info.level)} ${info.message}`)),
  40. level,
  41. transports: createTransports(),
  42. });
  43. }
  44. function changeLevel(logger, level) {
  45. logger.configure({
  46. level,
  47. transports: createTransports(),
  48. });
  49. }
  50. const logger = createLogger();
  51. module.exports = {
  52. logger,
  53. createLogger,
  54. changeLevel,
  55. };