dateFile.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. 'use strict';
  2. const streams = require('streamroller');
  3. const os = require('os');
  4. const eol = os.EOL || '\n';
  5. /**
  6. * File appender that rolls files according to a date pattern.
  7. * @filename base filename.
  8. * @pattern the format that will be added to the end of filename when rolling,
  9. * also used to check when to roll files - defaults to '.yyyy-MM-dd'
  10. * @layout layout function for log messages - defaults to basicLayout
  11. * @timezoneOffset optional timezone offset in minutes - defaults to system local
  12. */
  13. function appender(
  14. filename,
  15. pattern,
  16. layout,
  17. options,
  18. timezoneOffset
  19. ) {
  20. // the options for file appender use maxLogSize, but the docs say any file appender
  21. // options should work for dateFile as well.
  22. options.maxSize = options.maxLogSize;
  23. const logFile = new streams.DateRollingFileStream(
  24. filename,
  25. pattern,
  26. options
  27. );
  28. const app = function (logEvent) {
  29. logFile.write(layout(logEvent, timezoneOffset) + eol, 'utf8');
  30. };
  31. app.shutdown = function (complete) {
  32. logFile.write('', 'utf-8', () => {
  33. logFile.end(complete);
  34. });
  35. };
  36. return app;
  37. }
  38. function configure(config, layouts) {
  39. let layout = layouts.basicLayout;
  40. if (config.layout) {
  41. layout = layouts.layout(config.layout.type, config.layout);
  42. }
  43. if (!config.alwaysIncludePattern) {
  44. config.alwaysIncludePattern = false;
  45. }
  46. return appender(
  47. config.filename,
  48. config.pattern,
  49. layout,
  50. config,
  51. config.timezoneOffset
  52. );
  53. }
  54. module.exports.configure = configure;