UNPKG

3.72 kBJavaScriptView Raw
1import { Logger, transports } from 'winston'
2import partial from 'lodash/partial'
3
4export 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
15export 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
126export default attach
127
128const { assign, defineProperty } = Object
\No newline at end of file