1 | import winston from 'winston'
|
2 | import DailyRotateFile from 'winston-daily-rotate-file'
|
3 |
|
4 | winston.transports.DailyRotateFile = DailyRotateFile
|
5 |
|
6 | class LoggerComponent {
|
7 | constructor (context) {
|
8 | this._context = context
|
9 | this.__logPath = '/logs/' + context
|
10 | this.init()
|
11 | }
|
12 |
|
13 | init () {
|
14 | this._logger = new winston.Logger({
|
15 | transports: [
|
16 | new winston.transports.Console({
|
17 | colorize: true,
|
18 | prettyPrint: true
|
19 | }),
|
20 | new winston.transports.DailyRotateFile({
|
21 | tailable: true,
|
22 | filename: this.__logPath + '/' + this._context,
|
23 | datePattern: '.yyyy-MM-dd.log',
|
24 | timestamp: true,
|
25 | maxFiles: 10,
|
26 | colorize: true,
|
27 | prettyPrint: true
|
28 | })
|
29 | ]
|
30 | })
|
31 | }
|
32 |
|
33 | getLogger () {
|
34 | return this._logger
|
35 | }
|
36 |
|
37 | }
|
38 |
|
39 | class DecoratedContextLogger {
|
40 | constructor (logger, logContextName) {
|
41 | this._context = logContextName
|
42 | this._logger = logger
|
43 | }
|
44 |
|
45 | log (level, log, data) {
|
46 | this._logger.log(level, '[' + this._context + '] ' + log, data)
|
47 | }
|
48 |
|
49 | view (data) {
|
50 | var dataObj = {}
|
51 | if (typeof data !== 'undefined' && data !== null) {
|
52 | dataObj.data = data
|
53 | }
|
54 | this._logger.log('info', '[' + this._context + '] ', dataObj)
|
55 | }
|
56 |
|
57 | info (log, data) {
|
58 | var dataObj = {}
|
59 | if (typeof data !== 'undefined' && data !== null) {
|
60 | dataObj.data = data
|
61 | }
|
62 | this._logger.log('info', '[' + this._context + '] ' + log, dataObj)
|
63 | }
|
64 |
|
65 | warn (log, data) {
|
66 | var dataObj = {}
|
67 | if (typeof data !== 'undefined' && data != null) {
|
68 | dataObj.data = data
|
69 | }
|
70 | this._logger.log('warn', '[' + this._context + '] ' + log, dataObj)
|
71 | }
|
72 |
|
73 | error (log, exception, data) {
|
74 | var dataObj = {}
|
75 | if (typeof data !== 'undefined' && data != null) {
|
76 | dataObj.data = data
|
77 | }
|
78 | if (typeof exception !== 'undefined' && exception != null) {
|
79 | dataObj.ex = exception
|
80 | }
|
81 | this._logger.log('error', '[' + this._context + '] ' + log, {
|
82 | stackTrace: exception.stack,
|
83 | data: dataObj.data
|
84 | })
|
85 | }
|
86 |
|
87 | debug (log, data) {
|
88 | var dataObj = {}
|
89 | if (typeof data !== 'undefined' && data != null) {
|
90 | dataObj.data = data
|
91 | }
|
92 | this._logger.log('debug', '[' + this._context + '] ' + log, dataObj)
|
93 | }
|
94 | }
|
95 |
|
96 | class LogManager {
|
97 | constructor (loggerComponent) {
|
98 | this._loggerComponent = loggerComponent
|
99 | }
|
100 |
|
101 | getLogger (logContextName) {
|
102 | var decoratedLogger = new DecoratedContextLogger(this._loggerComponent.getLogger(), logContextName)
|
103 | return decoratedLogger
|
104 | }
|
105 | }
|
106 |
|
107 | export default {
|
108 | configure: function configure (context) {
|
109 | var contextLoggerComponent = new LoggerComponent(context)
|
110 | return new LogManager(contextLoggerComponent)
|
111 | }
|
112 | }
|