1 | import { Logger, transports } from 'winston'
|
2 | import partial from 'lodash/partial'
|
3 |
|
4 | export function use(options = {}, context = {}, next) {
|
5 | const { project = this } = context
|
6 |
|
7 | if (project.logger) {
|
8 | next && next()
|
9 | } else {
|
10 | attach.call(this, options, context)
|
11 | next && next()
|
12 | }
|
13 | }
|
14 |
|
15 | export function attach(options = {}, context = {}) {
|
16 | const { project = this } = context
|
17 |
|
18 | const {
|
19 | debug = !!project.get('environment.DEBUG', !!project.get('argv.debug', false)),
|
20 | enableConsole = !!(project.get('environment.SKYPAGER_CONSOLE_LOGGING', project.get('argv.enableConsole', false))),
|
21 | logPath = project.get('argv.logPath', project.resolve(project.paths.logs)),
|
22 | name = project.getOption('logName', project.get('environment.SKYPAGER_LOG_NAME', 'project')),
|
23 | timestamp = !!project.get('argv.logTimestamps', true),
|
24 | json = !!(project.get('environment.SKYPAGER_JSON_LOGGING', project.get('argv.jsonLogging', false))),
|
25 | prettyPrint = !!(project.get('environment.SKYPAGER_PRETTY_LOGGING', project.get('argv.prettyLogging', true))),
|
26 | streamLogs = project.getOption('streamLogs', project.get('argv.streamLogs', project.get('environment.SKYPAGER_STREAM_LOGS', false))),
|
27 | } = options
|
28 |
|
29 | let _transports = [
|
30 | new transports.File({
|
31 | name,
|
32 | filename: project.resolve(logPath, `${name}.${project.env}.log`),
|
33 | timestamp,
|
34 | json,
|
35 | prettyPrint,
|
36 | maxSize: 1024
|
37 | })
|
38 | ]
|
39 |
|
40 | if (enableConsole) {
|
41 | _transports.push(
|
42 | new transports.Console({
|
43 | name: 'console',
|
44 | colorize: true,
|
45 | prettyPrint,
|
46 | level: debug ? 'debug' : 'info'
|
47 | })
|
48 | )
|
49 | }
|
50 |
|
51 | project.hide(
|
52 | 'logger',
|
53 | new Logger({ level: 'debug', transports: _transports }),
|
54 | true
|
55 | )
|
56 |
|
57 | if(streamLogs) {
|
58 | project.hide(
|
59 | 'streamer',
|
60 | new Logger({ level: 'debug', transports: [
|
61 | new transports.File({
|
62 | name: `json`,
|
63 | filename: project.resolve(logPath, `${project.env}-${project.name}.json.log`),
|
64 | timestamp,
|
65 | json,
|
66 | prettyPrint,
|
67 | }),
|
68 | new transports.File({
|
69 | name: `pretty-json-stream`,
|
70 | filename: project.resolve(logPath, `${project.env}-${project.name}.pretty.json.log`),
|
71 | timestamp: true,
|
72 | json: true,
|
73 | prettyPrint: true,
|
74 | colorize: true,
|
75 | })
|
76 | ]}),
|
77 | true
|
78 | )
|
79 | }
|
80 |
|
81 | project.lazy('ensureLogsDir', () => project.mkdirpSync(logPath))
|
82 |
|
83 | project.hide('info', (...args) => {
|
84 | project.ensureLogsDir
|
85 | project.logger.info(...args)
|
86 | streamLogs && project.streamInfo(...args)
|
87 | })
|
88 |
|
89 |
|
90 | project.hide('error', (...args) => {
|
91 | project.ensureLogsDir
|
92 | project.logger.error(...args)
|
93 | streamLogs && project.streamError(...args)
|
94 | })
|
95 |
|
96 | project.hide('debug', (...args) => {
|
97 | project.ensureLogsDir
|
98 | project.logger.debug(...args)
|
99 | streamLogs && project.streamDebug(...args)
|
100 | })
|
101 |
|
102 | project.hide('log', (...args) => {
|
103 | project.ensureLogsDir
|
104 | project.logger.info(...args)
|
105 | streamLogs && project.streamDebug(...args)
|
106 | })
|
107 |
|
108 | project.hide('warn', (...args) => {
|
109 | project.ensureLogsDir
|
110 | project.logger.warn(...args)
|
111 | streamLogs && project.streamWarning(...args)
|
112 | })
|
113 |
|
114 | if (streamLogs) {
|
115 | project.ensureLogsDir
|
116 | project.hide('streamInfo', (...args) => project.streamer.info(...args))
|
117 | project.hide('streamDebug', (...args) => project.streamer.debug(...args))
|
118 | project.hide('streamLog', (...args) => project.streamer.log(...args))
|
119 | project.hide('streamError', (...args) => project.streamer.error(...args))
|
120 | project.hide('streamWarning', (...args) => project.streamer.warn(...args))
|
121 | }
|
122 |
|
123 | return project
|
124 | }
|
125 |
|
126 | export default attach
|
127 |
|
128 | const { assign, defineProperty } = Object |
\ | No newline at end of file |