UNPKG

3.32 kBJavaScriptView Raw
1'use strict';
2
3const bunyan = require('bunyan');
4
5const runnerVersion = getRunnerVersion();
6const config = require('./config');
7
8const isLocal = 'false';
9
10
11const loggerConfig = {
12 privateKey: 'd0eb01da-f966-1663-63c6-8871225d7c39',
13 applicationName: 'testim',
14 subsystemName: 'runner',
15};
16
17function getRunnerVersion() {
18 try {
19 const pack = require(`${__dirname}/../package.json`);
20 return pack.version;
21 } catch (err) {
22 return '';
23 }
24}
25
26function getStreamsAndWaitForFlushPromise() {
27 const level = config.LOGGER_DEBUG ? 'debug' : 'info';
28 const streams = [];
29
30 let waitForFlush = () => Promise.resolve();
31
32 if (!config.IS_ON_PREM) {
33 const CoralogixBunyan = require('../lib/coralogix-bunyan.stream');
34
35 waitForFlush = CoralogixBunyan.CoralogixStream.waitForFlush;
36
37 CoralogixBunyan.CoralogixStream.configure(loggerConfig);
38 streams.push({
39 level,
40 stream: new CoralogixBunyan.CoralogixStream({ category: 'ROOT' }),
41 type: 'raw',
42 });
43 }
44
45 if (config.LOGGER_CONSOLE) {
46 const PrettyStream = require('bunyan-prettystream');
47 const prettyStdOut = new PrettyStream();
48 prettyStdOut.pipe(process.stdout);
49 streams.push({
50 level,
51 stream: prettyStdOut,
52 type: 'raw',
53 });
54 }
55 return [streams, waitForFlush];
56}
57
58const [streams, waitForFlush] = getStreamsAndWaitForFlushPromise();
59
60const bunyanMainLogger = bunyan.createLogger({
61 name: 'runner',
62 streams,
63});
64
65let executionId = null;
66let projectId = null;
67
68function setExecutionId(execId) {
69 executionId = execId;
70}
71
72function setProjectId(projId) {
73 projectId = projId;
74}
75
76function releaseFlags() {
77 return {
78 release: true,
79 branch: 'production',
80 };
81}
82
83function devFlags() {
84 return {
85 release: false,
86 branch: 'test',
87 };
88}
89
90function localFlags() {
91 return {
92 release: false,
93 branch: 'local',
94 };
95}
96
97function addExecutionId(logData = {}) {
98 if (executionId && !logData.executionId) {
99 logData.executionId = executionId;
100 }
101
102 logData.runnerVersion = runnerVersion;
103 logData.projectId = projectId;
104 logData.nodeVersion = process.version;
105
106 if (isLocal.indexOf('@echo') === -1) {
107 Object.assign(logData, devFlags());
108
109
110 return logData;
111 }
112
113 Object.assign(logData, localFlags());
114 return logData;
115}
116
117class Logger {
118 constructor(logger) {
119 this._logger = logger;
120 }
121
122 trace(msg, data = {}) {
123 this._logger.trace(addExecutionId(data), msg);
124 }
125
126 debug(msg, data = {}) {
127 this._logger.debug(addExecutionId(data), msg);
128 }
129
130 info(msg, data = {}) {
131 this._logger.info(addExecutionId(data), msg);
132 }
133
134 warn(msg, data = {}) {
135 this._logger.warn(addExecutionId(data), msg);
136 }
137
138 error(msg, data = {}) {
139 this._logger.error(addExecutionId(data), msg);
140 }
141
142 fatal(msg, data = {}) {
143 this._logger.fatal(addExecutionId(data), msg);
144 }
145
146 waitForFlush() {
147 return waitForFlush();
148 }
149}
150
151function getLogger(loggerName) {
152 return new Logger(bunyanMainLogger.child({ category: loggerName }));
153}
154
155module.exports = {
156 getLogger,
157 setExecutionId,
158 setProjectId,
159};