@iobroker/js-controller-common 4.0.21 → 4.1.0-alpha.0-20220819-74ceeddc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.d.ts +5 -0
- package/build/index.js +34 -0
- package/build/lib/common/exitCodes.d.ts +59 -0
- package/build/lib/common/exitCodes.d.ts.map +1 -0
- package/build/lib/common/exitCodes.js +63 -0
- package/build/lib/common/exitCodes.js.map +1 -0
- package/build/lib/common/logger.d.ts +14 -0
- package/build/lib/common/logger.d.ts.map +1 -0
- package/{lib → build/lib}/common/logger.js +191 -193
- package/build/lib/common/logger.js.map +1 -0
- package/build/lib/common/maybeCallback.d.ts +17 -0
- package/build/lib/common/maybeCallback.d.ts.map +1 -0
- package/build/lib/common/maybeCallback.js +65 -0
- package/build/lib/common/maybeCallback.js.map +1 -0
- package/build/lib/common/password.d.ts +37 -0
- package/build/lib/common/password.d.ts.map +1 -0
- package/{lib → build/lib}/common/password.js +26 -46
- package/build/lib/common/password.js.map +1 -0
- package/build/lib/common/tools.d.ts +559 -0
- package/build/lib/common/tools.d.ts.map +1 -0
- package/{lib → build/lib}/common/tools.js +1122 -1501
- package/build/lib/common/tools.js.map +1 -0
- package/package.json +30 -14
- package/index.js +0 -6
- package/lib/common/exitCodes.js +0 -65
|
@@ -1,85 +1,110 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.logger = void 0;
|
|
30
|
+
const winston_1 = __importDefault(require("winston"));
|
|
31
|
+
const winston_daily_rotate_file_1 = __importDefault(require("winston-daily-rotate-file"));
|
|
32
|
+
const fs_1 = __importDefault(require("fs"));
|
|
33
|
+
const path_1 = __importDefault(require("path"));
|
|
34
|
+
const os_1 = __importDefault(require("os"));
|
|
35
|
+
const tools = __importStar(require("./tools"));
|
|
36
|
+
const winston_transport_1 = __importDefault(require("winston-transport"));
|
|
37
|
+
const triple_beam_1 = require("triple-beam");
|
|
38
|
+
const deep_clone_1 = __importDefault(require("deep-clone"));
|
|
13
39
|
const hostname = tools.getHostName();
|
|
14
|
-
const Transport = require('winston-transport');
|
|
15
|
-
const { LEVEL } = require('triple-beam');
|
|
16
|
-
const deepClone = require('deep-clone');
|
|
17
|
-
|
|
18
40
|
let SysLog;
|
|
19
41
|
try {
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
20
43
|
SysLog = require('winston-syslog').Syslog;
|
|
21
|
-
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
22
46
|
//console.log('No syslog support');
|
|
23
47
|
}
|
|
24
|
-
|
|
25
48
|
let Seq;
|
|
26
49
|
try {
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
27
51
|
Seq = require('@datalust/winston-seq').SeqTransport;
|
|
28
|
-
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
29
54
|
//console.log('No seq support');
|
|
30
55
|
}
|
|
31
|
-
|
|
32
56
|
// We must check if SysLog is defined before extending it
|
|
33
|
-
const IoSysLog =
|
|
34
|
-
SysLog &&
|
|
57
|
+
const IoSysLog = SysLog &&
|
|
35
58
|
class extends SysLog {
|
|
36
59
|
constructor(options) {
|
|
37
60
|
super(options);
|
|
38
61
|
}
|
|
39
|
-
|
|
40
62
|
log(info, callback) {
|
|
63
|
+
var _a;
|
|
41
64
|
// we need to map the ioBroker loglevels to the Syslog ones
|
|
42
65
|
const ioInfo = info;
|
|
43
|
-
if (ioInfo[LEVEL] === 'warn') {
|
|
44
|
-
ioInfo[LEVEL] = 'warning';
|
|
66
|
+
if (ioInfo[triple_beam_1.LEVEL] === 'warn') {
|
|
67
|
+
ioInfo[triple_beam_1.LEVEL] = 'warning';
|
|
45
68
|
}
|
|
46
|
-
if (ioInfo[LEVEL] === 'info') {
|
|
47
|
-
ioInfo[LEVEL] = 'notice';
|
|
69
|
+
if (ioInfo[triple_beam_1.LEVEL] === 'info') {
|
|
70
|
+
ioInfo[triple_beam_1.LEVEL] = 'notice';
|
|
48
71
|
}
|
|
49
|
-
if (ioInfo[LEVEL] === 'debug') {
|
|
50
|
-
ioInfo[LEVEL] = 'info';
|
|
72
|
+
if (ioInfo[triple_beam_1.LEVEL] === 'debug') {
|
|
73
|
+
ioInfo[triple_beam_1.LEVEL] = 'info';
|
|
51
74
|
}
|
|
52
|
-
if (ioInfo[LEVEL] === 'silly') {
|
|
53
|
-
ioInfo[LEVEL] = 'debug';
|
|
75
|
+
if (ioInfo[triple_beam_1.LEVEL] === 'silly') {
|
|
76
|
+
ioInfo[triple_beam_1.LEVEL] = 'debug';
|
|
54
77
|
}
|
|
55
|
-
|
|
78
|
+
// No clue why log could ever be undefined, but hey...
|
|
79
|
+
(_a = super.log) === null || _a === void 0 ? void 0 : _a.call(this, ioInfo, callback);
|
|
56
80
|
}
|
|
57
81
|
};
|
|
58
|
-
|
|
59
82
|
// We want to enhance some data for Seq
|
|
60
|
-
const IoSeq =
|
|
61
|
-
Seq &&
|
|
83
|
+
const IoSeq = Seq &&
|
|
62
84
|
class extends Seq {
|
|
63
85
|
log(info, callback) {
|
|
64
|
-
const ioInfo =
|
|
86
|
+
const ioInfo = (0, deep_clone_1.default)(info);
|
|
65
87
|
ioInfo.props = ioInfo.props || {};
|
|
66
|
-
|
|
67
88
|
// map our log levels to Seq levels
|
|
68
89
|
const level = (ioInfo.level || '').toLowerCase();
|
|
69
90
|
if (level.includes('error')) {
|
|
70
91
|
ioInfo.level = 'Error';
|
|
71
|
-
}
|
|
92
|
+
}
|
|
93
|
+
else if (level.includes('warn')) {
|
|
72
94
|
ioInfo.level = 'Warning';
|
|
73
|
-
}
|
|
95
|
+
}
|
|
96
|
+
else if (level.includes('info')) {
|
|
74
97
|
ioInfo.level = 'Information';
|
|
75
|
-
}
|
|
98
|
+
}
|
|
99
|
+
else if (level.includes('debug')) {
|
|
76
100
|
ioInfo.level = 'Debug';
|
|
77
|
-
}
|
|
101
|
+
}
|
|
102
|
+
else if (level.includes('silly')) {
|
|
78
103
|
ioInfo.level = 'Verbose';
|
|
79
|
-
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
80
106
|
ioInfo.level = 'Information';
|
|
81
107
|
}
|
|
82
|
-
|
|
83
108
|
// we add own properties
|
|
84
109
|
ioInfo.props.Hostname = tools.getHostName();
|
|
85
110
|
if (ioInfo.message) {
|
|
@@ -88,24 +113,23 @@ const IoSeq =
|
|
|
88
113
|
if (msgParts) {
|
|
89
114
|
ioInfo.props.Source = msgParts[1];
|
|
90
115
|
ioInfo.props.Pid = msgParts[2];
|
|
91
|
-
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
92
118
|
ioInfo.props.Source = 'js-controller';
|
|
93
119
|
}
|
|
94
120
|
}
|
|
95
121
|
super.log(ioInfo, callback);
|
|
96
122
|
}
|
|
97
123
|
};
|
|
98
|
-
|
|
99
124
|
// Class used to inform adapter about new log entry
|
|
100
|
-
class NotifierTransport extends
|
|
125
|
+
class NotifierTransport extends winston_transport_1.default {
|
|
101
126
|
constructor(opts) {
|
|
102
127
|
super(opts);
|
|
103
128
|
this.name = 'NT'; // NotifierTransport
|
|
104
129
|
}
|
|
105
|
-
|
|
106
130
|
log(info, callback) {
|
|
107
131
|
const msg = {
|
|
108
|
-
severity: info[LEVEL],
|
|
132
|
+
severity: info[triple_beam_1.LEVEL],
|
|
109
133
|
ts: new Date(info.timestamp).getTime(),
|
|
110
134
|
message: info.message
|
|
111
135
|
};
|
|
@@ -113,93 +137,74 @@ class NotifierTransport extends Transport {
|
|
|
113
137
|
callback();
|
|
114
138
|
}
|
|
115
139
|
}
|
|
116
|
-
|
|
117
|
-
const logger = function (level, files, noStdout, prefix) {
|
|
118
|
-
let userOptions = {};
|
|
140
|
+
function logger(level, files, noStdout, prefix) {
|
|
119
141
|
const options = {
|
|
120
142
|
transports: []
|
|
121
143
|
};
|
|
122
|
-
|
|
123
144
|
//var defaultMaxSize;// = 10 * 1024 * 1024;
|
|
124
|
-
|
|
125
145
|
if (typeof files === 'string') {
|
|
126
146
|
files = [files];
|
|
127
147
|
}
|
|
128
|
-
|
|
129
|
-
const formatter = info => `${timestamp(info.timestamp)} - ${info.level}: ${info.message}`;
|
|
130
|
-
|
|
148
|
+
const formatter = (info) => `${timestamp(info.timestamp)} - ${info.level}: ${info.message}`;
|
|
131
149
|
files = files || [];
|
|
132
|
-
|
|
133
150
|
// indicator which is used to determine the log dir for developing, where it should be inside the repository
|
|
134
151
|
const isNpm = !__dirname
|
|
135
152
|
.replace(/\\/g, '/')
|
|
136
153
|
.toLowerCase()
|
|
137
|
-
.includes(tools.appName.toLowerCase()
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
userOptions = deepClone(level);
|
|
141
|
-
|
|
154
|
+
.includes(`${tools.appName.toLowerCase()}.js-controller/packages/`);
|
|
155
|
+
if (tools.isObject(level)) {
|
|
156
|
+
const userOptions = (0, deep_clone_1.default)(level);
|
|
142
157
|
level = userOptions.level;
|
|
143
|
-
prefix = userOptions.prefix;
|
|
158
|
+
prefix = userOptions.prefix || '';
|
|
144
159
|
noStdout = userOptions.noStdout;
|
|
145
|
-
|
|
146
160
|
const winstonFormats = [];
|
|
147
|
-
|
|
161
|
+
/** @ts-expect-error formatter arg wrongly documented */
|
|
162
|
+
winstonFormats.push(winston_1.default.format.timestamp({ format: timestamp }));
|
|
148
163
|
if (userOptions.json === undefined || userOptions.json) {
|
|
149
|
-
winstonFormats.push(
|
|
164
|
+
winstonFormats.push(winston_1.default.format.json());
|
|
150
165
|
}
|
|
151
166
|
if (prefix) {
|
|
152
|
-
winstonFormats.push(
|
|
167
|
+
winstonFormats.push(winston_1.default.format.label({ label: prefix }));
|
|
153
168
|
}
|
|
154
169
|
if (userOptions.colorize === undefined || userOptions.colorize) {
|
|
155
|
-
winstonFormats.push(
|
|
170
|
+
winstonFormats.push(winston_1.default.format.colorize());
|
|
156
171
|
}
|
|
157
|
-
options.format =
|
|
158
|
-
|
|
172
|
+
options.format = winston_1.default.format.combine.apply(null, winstonFormats);
|
|
159
173
|
if (userOptions.prefix !== undefined) {
|
|
160
174
|
delete userOptions.prefix;
|
|
161
175
|
}
|
|
162
|
-
|
|
163
176
|
if (userOptions.transport) {
|
|
164
177
|
let fName = 0;
|
|
165
|
-
const isWindows =
|
|
178
|
+
const isWindows = os_1.default.platform().startsWith('win');
|
|
166
179
|
Object.keys(userOptions.transport).forEach(f => {
|
|
167
180
|
const transport = userOptions.transport[f];
|
|
168
|
-
|
|
169
181
|
transport._defaultConfigLoglevel = transport.level; // remember Loglevel if set
|
|
170
182
|
transport.level = transport.level || level;
|
|
171
|
-
|
|
172
183
|
if (transport.type === 'file' && transport.enabled !== false) {
|
|
173
184
|
transport.filename = transport.filename || 'log/' + tools.appName;
|
|
174
|
-
|
|
175
185
|
if (!transport.fileext && transport.filename.indexOf('.log') === -1) {
|
|
176
186
|
transport.fileext = '.log';
|
|
177
187
|
}
|
|
178
|
-
|
|
179
188
|
if (!fName) {
|
|
180
189
|
transport.systemLog = true;
|
|
181
190
|
}
|
|
182
|
-
|
|
183
191
|
transport.handleExceptions = false;
|
|
184
|
-
transport.name =
|
|
192
|
+
transport.name = fName ? `dailyRotateFile${fName}` : tools.appName;
|
|
185
193
|
fName++;
|
|
186
194
|
transport.filename = transport.filename.replace(/\\/g, '/');
|
|
187
195
|
if (transport.filename.match(/^\w:\/|^\//)) {
|
|
188
|
-
transport.filename =
|
|
189
|
-
} else {
|
|
190
|
-
transport.filename = path.normalize(
|
|
191
|
-
`${tools.getControllerDir()}${isNpm ? '/../../' : '/'}${transport.filename}`
|
|
192
|
-
);
|
|
196
|
+
transport.filename = path_1.default.normalize(transport.filename);
|
|
193
197
|
}
|
|
194
|
-
|
|
195
|
-
|
|
198
|
+
else {
|
|
199
|
+
transport.filename = path_1.default.normalize(`${tools.getControllerDir()}${isNpm ? '/../../' : '/'}${transport.filename}`);
|
|
200
|
+
}
|
|
201
|
+
transport.auditFile = `${transport.filename}-audit.json`;
|
|
196
202
|
transport.createSymlink =
|
|
197
203
|
transport.createSymlink !== undefined ? transport.createSymlink : !isWindows;
|
|
198
204
|
transport.symlinkName =
|
|
199
205
|
transport.symlinkName !== undefined
|
|
200
206
|
? transport.symlinkName
|
|
201
|
-
:
|
|
202
|
-
|
|
207
|
+
: path_1.default.basename(`${transport.filename}.current.log`);
|
|
203
208
|
transport.filename += '.%DATE%' + (transport.fileext || '');
|
|
204
209
|
//transport.label = prefix || ''; //TODO format.label()
|
|
205
210
|
// transport.json = (transport.json !== undefined) ? transport.json : false; // TODO format.json(), new Default!!
|
|
@@ -209,35 +214,35 @@ const logger = function (level, files, noStdout, prefix) {
|
|
|
209
214
|
transport.localTime !== undefined
|
|
210
215
|
? transport.localTime
|
|
211
216
|
: userOptions.localTime === undefined
|
|
212
|
-
|
|
213
|
-
|
|
217
|
+
? true
|
|
218
|
+
: userOptions.localTime;
|
|
214
219
|
transport.datePattern = 'YYYY-MM-DD';
|
|
215
|
-
transport.format =
|
|
220
|
+
transport.format = winston_1.default.format.combine(winston_1.default.format.printf(formatter));
|
|
216
221
|
/*transport.logException = function (message, info, next, err) {
|
|
217
222
|
console.error(message);
|
|
218
223
|
};*/
|
|
219
224
|
transport.zippedArchive = isWindows
|
|
220
225
|
? false
|
|
221
226
|
: transport.zippedArchive !== undefined
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
227
|
+
? transport.zippedArchive
|
|
228
|
+
: true;
|
|
225
229
|
if (transport.maxFiles === null && userOptions.maxDays) {
|
|
226
230
|
transport.maxFiles = userOptions.maxDays + 'd';
|
|
227
231
|
}
|
|
228
|
-
|
|
229
232
|
try {
|
|
230
|
-
const _log = new
|
|
233
|
+
const _log = new winston_daily_rotate_file_1.default(transport);
|
|
231
234
|
options.transports.push(_log);
|
|
232
|
-
}
|
|
235
|
+
}
|
|
236
|
+
catch (e) {
|
|
233
237
|
if (e.code === 'EACCES') {
|
|
234
238
|
// modify error code to make it unique for handling
|
|
235
239
|
e.code = 'EACCES_LOG';
|
|
236
240
|
}
|
|
237
241
|
throw e;
|
|
238
242
|
}
|
|
239
|
-
}
|
|
240
|
-
|
|
243
|
+
}
|
|
244
|
+
else if (transport.type === 'syslog' && transport.enabled !== false) {
|
|
245
|
+
if (!IoSysLog) {
|
|
241
246
|
console.error('Syslog configured, but not installed! Ignore');
|
|
242
247
|
return;
|
|
243
248
|
}
|
|
@@ -252,88 +257,93 @@ const logger = function (level, files, noStdout, prefix) {
|
|
|
252
257
|
// app_name: The name of the application (Default: process.title).
|
|
253
258
|
// eol: The end of line character to be added to the end of the message (Default: Message without modifications).
|
|
254
259
|
// replace the used by syslog attribute "type" with own "sysLogType"
|
|
255
|
-
|
|
256
260
|
// If no name defined, use hostname as name
|
|
257
261
|
transport.localhost = transport.localhost || hostname;
|
|
258
|
-
transport.format =
|
|
262
|
+
transport.format = winston_1.default.format.combine(winston_1.default.format.printf(formatter));
|
|
259
263
|
if (transport.sysLogType) {
|
|
260
264
|
transport.type = transport.sysLogType;
|
|
261
265
|
delete transport.sysLogType;
|
|
262
|
-
}
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
263
268
|
delete transport.type;
|
|
264
269
|
}
|
|
265
270
|
try {
|
|
266
271
|
options.transports.push(new IoSysLog(transport));
|
|
267
|
-
}
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
268
274
|
console.log(`Cannot activate Syslog: ${err.message}`);
|
|
269
275
|
}
|
|
270
|
-
}
|
|
276
|
+
}
|
|
277
|
+
else if (transport.type === 'http' && transport.enabled !== false) {
|
|
271
278
|
// host: (Default: localhost) Remote host of the HTTP logging endpoint
|
|
272
279
|
// port: (Default: 80 or 443) Remote port of the HTTP logging endpoint
|
|
273
280
|
// path: (Default: /) Remote URI of the HTTP logging endpoint
|
|
274
281
|
// auth: (Default: None) An object representing the username and password for HTTP Basic Auth
|
|
275
282
|
// ssl: (Default: false) Value indicating if we should use HTTPS
|
|
276
|
-
|
|
277
283
|
// If no name defined, use hostname as name
|
|
278
284
|
transport.host = transport.host || 'localhost';
|
|
279
|
-
|
|
280
285
|
try {
|
|
281
|
-
options.transports.push(new
|
|
282
|
-
}
|
|
286
|
+
options.transports.push(new winston_1.default.transports.Http(transport));
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
283
289
|
console.log(`Cannot activate HTTP: ${err.message}`);
|
|
284
290
|
}
|
|
285
|
-
}
|
|
291
|
+
}
|
|
292
|
+
else if (transport.type === 'stream' && transport.enabled !== false) {
|
|
286
293
|
// stream: any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written.
|
|
287
294
|
// level: Level of messages that this transport should log (default: level set on parent logger).
|
|
288
295
|
// silent: Boolean flag indicating whether to suppress output (default false).
|
|
289
296
|
// eol: Line-ending character to use. (default: os.EOL).
|
|
290
|
-
|
|
291
297
|
// If no name defined, use hostname as name
|
|
292
298
|
transport.host = transport.host || 'localhost';
|
|
293
|
-
|
|
294
299
|
try {
|
|
295
300
|
if (typeof transport.stream === 'string') {
|
|
296
|
-
transport.stream =
|
|
297
|
-
transport.stream.on('error', err => {
|
|
298
|
-
console.log(`Error in Stream: ${err}`);
|
|
301
|
+
transport.stream = fs_1.default.createWriteStream(transport.stream);
|
|
302
|
+
transport.stream.on('error', (err) => {
|
|
303
|
+
console.log(`Error in Stream: ${err.message}`);
|
|
299
304
|
});
|
|
300
305
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
console.log(`Cannot activate Stream: ${err}`);
|
|
306
|
+
options.transports.push(new winston_1.default.transports.Stream(transport));
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
console.log(`Cannot activate Stream: ${err.message}`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else if (transport.type === 'seq' && transport.enabled !== false) {
|
|
313
|
+
if (!IoSeq) {
|
|
314
|
+
console.error('Seq configured, but not installed! Ignore');
|
|
315
|
+
return;
|
|
305
316
|
}
|
|
306
|
-
} else if (transport.type === 'seq' && transport.enabled !== false) {
|
|
307
317
|
// serverUrl?: string;
|
|
308
318
|
// apiKey?: string;
|
|
309
319
|
// maxBatchingTime?: number;
|
|
310
320
|
// eventSizeLimit?: number;
|
|
311
321
|
// batchSizeLimit?: number;
|
|
312
|
-
|
|
313
322
|
// Add only if serverUrl is configured at least
|
|
314
323
|
if (transport.serverUrl) {
|
|
315
324
|
try {
|
|
316
|
-
transport.onError = e => {
|
|
317
|
-
console.log(`SEQ error: ${e}`);
|
|
325
|
+
transport.onError = (e) => {
|
|
326
|
+
console.log(`SEQ error: ${e.message}`);
|
|
318
327
|
};
|
|
319
328
|
const seqLogger = new IoSeq(transport);
|
|
320
329
|
options.transports.push(seqLogger);
|
|
321
|
-
}
|
|
330
|
+
}
|
|
331
|
+
catch (err) {
|
|
322
332
|
console.log(`Cannot activate SEQ: ${err.message}`);
|
|
323
333
|
}
|
|
324
|
-
}
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
325
336
|
console.log('Cannot activate SEQ: No serverUrl specified');
|
|
326
337
|
}
|
|
327
338
|
}
|
|
328
339
|
});
|
|
329
340
|
}
|
|
330
|
-
}
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
331
343
|
for (let i = 0; i < files.length; i++) {
|
|
332
344
|
const opt = {
|
|
333
345
|
name: i ? 'dailyRotateFile' + i : tools.appName,
|
|
334
|
-
filename:
|
|
335
|
-
isNpm ? `${__dirname}/../../../log/${files[i]}` : `${__dirname}/../log/${files[i]}`
|
|
336
|
-
),
|
|
346
|
+
filename: path_1.default.normalize(isNpm ? `${__dirname}/../../../log/${files[i]}` : `${__dirname}/../log/${files[i]}`),
|
|
337
347
|
extension: '.log',
|
|
338
348
|
datePattern: 'YYYY-MM-DD',
|
|
339
349
|
//json: false, // If true, messages will be logged as JSON (default true). TODO format.json()
|
|
@@ -346,80 +356,82 @@ const logger = function (level, files, noStdout, prefix) {
|
|
|
346
356
|
handleExceptions: false
|
|
347
357
|
//maxSize: defaultMaxSize
|
|
348
358
|
};
|
|
349
|
-
|
|
350
|
-
options.transports.push(new DailyRotateFile(opt));
|
|
359
|
+
options.transports.push(new winston_daily_rotate_file_1.default(opt));
|
|
351
360
|
}
|
|
352
361
|
}
|
|
353
|
-
|
|
354
362
|
if (!noStdout) {
|
|
355
|
-
options.transports.push(
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
})
|
|
364
|
-
);
|
|
363
|
+
options.transports.push(new winston_1.default.transports.Console({
|
|
364
|
+
level,
|
|
365
|
+
silent: false,
|
|
366
|
+
format: winston_1.default.format.combine(winston_1.default.format.printf(formatter))
|
|
367
|
+
//colorize: (userOptions.colorize === undefined) ? true : userOptions.colorize, // TODO format.colorize()
|
|
368
|
+
//timestamp: timestamp, // TODO: format.timestamp()
|
|
369
|
+
//label: prefix || '' // TODO format.label()
|
|
370
|
+
}));
|
|
365
371
|
}
|
|
366
|
-
|
|
367
372
|
// Must be registered, for adapter.js notification about new logs
|
|
368
|
-
options.transports.push(
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
const log = winston.createLogger(options);
|
|
376
|
-
|
|
373
|
+
options.transports.push(new NotifierTransport({
|
|
374
|
+
level,
|
|
375
|
+
silent: false
|
|
376
|
+
}));
|
|
377
|
+
const log = winston_1.default.createLogger(options);
|
|
378
|
+
/** @ts-expect-error why do we override/add method to foreign instance? TODO */
|
|
377
379
|
log.getFileName = function () {
|
|
380
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
378
381
|
let transport = this.transports.find(t => (t.transport && t.transport.dirname) || t.dirname);
|
|
379
382
|
if (transport) {
|
|
383
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
380
384
|
transport = transport.transport ? transport.transport : transport;
|
|
385
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
381
386
|
return transport.dirname + '/' + transport.filename.replace('%DATE%', getDate());
|
|
382
|
-
}
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
383
389
|
return '';
|
|
384
390
|
}
|
|
385
391
|
};
|
|
386
|
-
|
|
387
392
|
log.on('error', error => {
|
|
388
393
|
console.log('Logger error: ' + error);
|
|
389
394
|
});
|
|
390
|
-
|
|
391
395
|
// This cannot be deleted, because file rotate works with the size of files and not with the time
|
|
392
396
|
// TODO research and open new issue in winston-daily-rotate-file repo
|
|
397
|
+
/** @ts-expect-error why do we override/add method to foreign instance? TODO */
|
|
393
398
|
log.activateDateChecker = function (isEnabled, daysCount) {
|
|
399
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
394
400
|
if (!isEnabled && this._fileChecker) {
|
|
401
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
395
402
|
clearInterval(this._fileChecker);
|
|
396
|
-
|
|
403
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
404
|
+
}
|
|
405
|
+
else if (isEnabled && !this._fileChecker) {
|
|
397
406
|
if (!daysCount) {
|
|
398
407
|
daysCount = 3;
|
|
399
408
|
}
|
|
400
|
-
|
|
401
409
|
// Check every hour
|
|
410
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
402
411
|
this._fileChecker = setInterval(() => {
|
|
403
412
|
this.transports.forEach(transport => {
|
|
404
413
|
if (
|
|
405
|
-
|
|
414
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
415
|
+
transport.name !== 'dailyRotateFile' ||
|
|
416
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
406
417
|
!transport.options ||
|
|
407
|
-
|
|
408
|
-
|
|
418
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
419
|
+
transport.options.name !== tools.appName) {
|
|
409
420
|
return;
|
|
410
421
|
}
|
|
411
|
-
|
|
412
|
-
if (transport &&
|
|
422
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
423
|
+
if (transport && fs_1.default.existsSync(transport.dirname)) {
|
|
413
424
|
let files;
|
|
414
425
|
try {
|
|
415
|
-
|
|
416
|
-
|
|
426
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
427
|
+
files = fs_1.default.readdirSync(transport.dirname);
|
|
428
|
+
}
|
|
429
|
+
catch (err) {
|
|
417
430
|
console.log(`host.${hostname} Cannot read log directory: ${err}`);
|
|
418
431
|
return;
|
|
419
432
|
}
|
|
420
433
|
const forXdays = new Date();
|
|
421
434
|
forXdays.setDate(forXdays.getDate() - daysCount - 1); // normally winston now takes care, for old or on errors make sure fallback works a day later
|
|
422
|
-
|
|
423
435
|
for (let i = 0; i < files.length; i++) {
|
|
424
436
|
const match = files[i].match(/.+\.(\d+-\d+-\d+)/);
|
|
425
437
|
if (match) {
|
|
@@ -432,20 +444,20 @@ const logger = function (level, files, noStdout, prefix) {
|
|
|
432
444
|
message: `host.${hostname} Delete log file ${files[i]}`
|
|
433
445
|
});
|
|
434
446
|
console.log(`host.${hostname} Delete log file ${files[i]}`);
|
|
435
|
-
|
|
436
|
-
|
|
447
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
448
|
+
fs_1.default.unlinkSync(transport.dirname + '/' + files[i]);
|
|
449
|
+
}
|
|
450
|
+
catch (e) {
|
|
437
451
|
// there is a bug under windows, that file stays opened and cannot be deleted
|
|
438
452
|
this.log({
|
|
439
|
-
level:
|
|
440
|
-
message: `host.${hostname} Cannot delete file "${
|
|
441
|
-
|
|
442
|
-
)}": ${e}`
|
|
453
|
+
level: os_1.default.platform().startsWith('win') ? 'info' : 'error',
|
|
454
|
+
message: `host.${hostname} Cannot delete file "${path_1.default.normalize(
|
|
455
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
456
|
+
transport.dirname + '/' + files[i])}": ${e}`
|
|
443
457
|
});
|
|
444
|
-
console.log(
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
)}": ${e}`
|
|
448
|
-
);
|
|
458
|
+
console.log(`host.${hostname} Cannot delete file "${path_1.default.normalize(
|
|
459
|
+
/** @ts-expect-error we use undocumented stuff here TODO */
|
|
460
|
+
transport.dirname + '/' + files[i])}": ${e.message}`);
|
|
449
461
|
}
|
|
450
462
|
}
|
|
451
463
|
}
|
|
@@ -455,23 +467,19 @@ const logger = function (level, files, noStdout, prefix) {
|
|
|
455
467
|
}, 3600000); // every hour
|
|
456
468
|
}
|
|
457
469
|
};
|
|
458
|
-
|
|
459
470
|
//winston.unhandleExceptions();
|
|
460
471
|
//log.unexceptions.handle();
|
|
461
|
-
|
|
462
472
|
return log;
|
|
463
|
-
}
|
|
464
|
-
|
|
473
|
+
}
|
|
474
|
+
exports.logger = logger;
|
|
465
475
|
function getDate() {
|
|
466
476
|
const ts = new Date();
|
|
467
477
|
let result = ts.getFullYear() + '-';
|
|
468
|
-
/** @type {number | string} */
|
|
469
478
|
let value = ts.getMonth() + 1;
|
|
470
479
|
if (value < 10) {
|
|
471
480
|
value = '0' + value;
|
|
472
481
|
}
|
|
473
482
|
result += value + '-';
|
|
474
|
-
|
|
475
483
|
value = ts.getDate();
|
|
476
484
|
if (value < 10) {
|
|
477
485
|
value = '0' + value;
|
|
@@ -479,52 +487,42 @@ function getDate() {
|
|
|
479
487
|
result += value;
|
|
480
488
|
return result;
|
|
481
489
|
}
|
|
482
|
-
|
|
483
490
|
function timestamp(date) {
|
|
484
491
|
const ts = date ? new Date(date) : new Date();
|
|
485
492
|
let result = ts.getFullYear() + '-';
|
|
486
|
-
|
|
487
|
-
/** @type {number | string} */
|
|
488
493
|
let value = ts.getMonth() + 1;
|
|
489
494
|
if (value < 10) {
|
|
490
495
|
value = '0' + value;
|
|
491
496
|
}
|
|
492
497
|
result += value + '-';
|
|
493
|
-
|
|
494
498
|
value = ts.getDate();
|
|
495
499
|
if (value < 10) {
|
|
496
500
|
value = '0' + value;
|
|
497
501
|
}
|
|
498
502
|
result += value + ' ';
|
|
499
|
-
|
|
500
503
|
value = ts.getHours();
|
|
501
504
|
if (value < 10) {
|
|
502
505
|
value = '0' + value;
|
|
503
506
|
}
|
|
504
507
|
result += value + ':';
|
|
505
|
-
|
|
506
508
|
value = ts.getMinutes();
|
|
507
509
|
if (value < 10) {
|
|
508
510
|
value = '0' + value;
|
|
509
511
|
}
|
|
510
512
|
result += value + ':';
|
|
511
|
-
|
|
512
513
|
value = ts.getSeconds();
|
|
513
514
|
if (value < 10) {
|
|
514
515
|
value = '0' + value;
|
|
515
516
|
}
|
|
516
517
|
result += value + '.';
|
|
517
|
-
|
|
518
518
|
value = ts.getMilliseconds();
|
|
519
519
|
if (value < 10) {
|
|
520
520
|
value = '00' + value;
|
|
521
|
-
}
|
|
521
|
+
}
|
|
522
|
+
else if (value < 100) {
|
|
522
523
|
value = '0' + value;
|
|
523
524
|
}
|
|
524
|
-
|
|
525
525
|
result += value + ' ';
|
|
526
|
-
|
|
527
526
|
return result;
|
|
528
527
|
}
|
|
529
|
-
|
|
530
|
-
module.exports = logger;
|
|
528
|
+
//# sourceMappingURL=logger.js.map
|