@trojs/logger 0.5.1 → 0.5.3
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/package.json +15 -23
- package/src/helpers/stackdriver.js +21 -21
- package/src/logger.js +21 -21
- package/src/loggers/combined-file.js +3 -3
- package/src/loggers/console.js +21 -18
- package/src/loggers/error-file.js +4 -4
- package/src/loggers/index.js +22 -22
- package/src/loggers/sentry.js +16 -16
- package/src/models/enums/level.js +8 -7
- package/src/models/logger.js +24 -24
- package/src/models/mutators/logger.js +6 -6
- package/src/models/schemas/logger.js +14 -14
package/package.json
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trojs/logger",
|
|
3
3
|
"description": "Winston logger for TroJS",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.3",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Pieter Wigboldus",
|
|
7
7
|
"url": "https://trojs.org/"
|
|
8
8
|
},
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"scripts": {
|
|
11
|
-
"lint": "eslint
|
|
12
|
-
"lint:report": "eslint src/*.js
|
|
13
|
-
"lint:fix": "eslint
|
|
14
|
-
"
|
|
11
|
+
"lint": "eslint",
|
|
12
|
+
"lint:report": "eslint src/*.js -f json -o report.json",
|
|
13
|
+
"lint:fix": "eslint --fix",
|
|
14
|
+
"lint:rules": "eslint --print-config file.js > eslintconfig.json",
|
|
15
|
+
"test": "node --test --experimental-test-coverage --test-reporter=spec --test-reporter=lcov --test-reporter-destination=stdout --test-reporter-destination=./coverage/lcov.info",
|
|
16
|
+
"test:watch": "node --watch --test --experimental-test-coverage --test-reporter=spec --test-reporter=lcov --test-reporter-destination=stdout --test-reporter-destination=./coverage/lcov.info",
|
|
15
17
|
"cpd": "node_modules/jscpd/bin/jscpd src",
|
|
16
18
|
"vulnerabilities": "npm audit --omit=dev"
|
|
17
19
|
},
|
|
@@ -31,20 +33,10 @@
|
|
|
31
33
|
],
|
|
32
34
|
"main": "src/logger.js",
|
|
33
35
|
"devDependencies": {
|
|
34
|
-
"@
|
|
35
|
-
"@trojs/
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"eslint-config-airbnb-base": "^15.0.0",
|
|
39
|
-
"eslint-config-prettier": "^9.1.0",
|
|
40
|
-
"eslint-plugin-html": "^8.1.1",
|
|
41
|
-
"eslint-plugin-import": "^2.29.1",
|
|
42
|
-
"eslint-plugin-jsdoc": "^50.0.0",
|
|
43
|
-
"eslint-plugin-jsx-a11y": "^6.9.0",
|
|
44
|
-
"eslint-plugin-n": "^17.9.0",
|
|
45
|
-
"eslint-plugin-prettier": "^5.2.1",
|
|
46
|
-
"eslint-plugin-promise": "^7.0.0",
|
|
47
|
-
"eslint-plugin-sonarjs": "^0.25.1",
|
|
36
|
+
"@trojs/error": "^4.0.0",
|
|
37
|
+
"@trojs/lint": "^0.2.13",
|
|
38
|
+
"eslint": "^9.24.0",
|
|
39
|
+
"globals": "^16.0.0",
|
|
48
40
|
"jscpd": "^4.0.0",
|
|
49
41
|
"prettier": "^3.3.3"
|
|
50
42
|
},
|
|
@@ -53,7 +45,7 @@
|
|
|
53
45
|
"url": "https://github.com/trojs/logger"
|
|
54
46
|
},
|
|
55
47
|
"engines": {
|
|
56
|
-
"node": ">=
|
|
48
|
+
"node": ">= 20"
|
|
57
49
|
},
|
|
58
50
|
"keywords": [
|
|
59
51
|
"javascript",
|
|
@@ -65,9 +57,9 @@
|
|
|
65
57
|
"@sentry/integrations": "^7.117.0",
|
|
66
58
|
"@sentry/node": "^7.117.0",
|
|
67
59
|
"@sentry/tracing": "^7.117.0",
|
|
68
|
-
"@trojs/enum": "^
|
|
69
|
-
"@trojs/mutator": "^0.
|
|
70
|
-
"@trojs/objects": "^
|
|
60
|
+
"@trojs/enum": "^4.0.0",
|
|
61
|
+
"@trojs/mutator": "^1.0.0",
|
|
62
|
+
"@trojs/objects": "^9.0.0",
|
|
71
63
|
"compression": "^1.7.4",
|
|
72
64
|
"cors": "^2.8.5",
|
|
73
65
|
"dotenv": "^16.0.3",
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import os from 'node:os'
|
|
1
|
+
import os from 'node:os'
|
|
2
2
|
|
|
3
3
|
const levelToSeverity = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
4
|
+
trace: 'DEBUG',
|
|
5
|
+
debug: 'DEBUG',
|
|
6
|
+
info: 'INFO',
|
|
7
|
+
warn: 'WARNING',
|
|
8
|
+
error: 'ERROR',
|
|
9
|
+
fatal: 'CRITICAL'
|
|
10
|
+
}
|
|
11
11
|
|
|
12
12
|
const levels = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
13
|
+
trace: 10,
|
|
14
|
+
debug: 20,
|
|
15
|
+
info: 30,
|
|
16
|
+
warn: 40,
|
|
17
|
+
error: 50,
|
|
18
|
+
fatal: 60
|
|
19
|
+
}
|
|
20
20
|
|
|
21
|
-
const stackdriver
|
|
22
|
-
({ level, defaultLevel }) =>
|
|
23
|
-
|
|
21
|
+
const stackdriver
|
|
22
|
+
= ({ level, defaultLevel }) =>
|
|
23
|
+
(info) => ({
|
|
24
24
|
...info,
|
|
25
25
|
severity: levelToSeverity[level] || levelToSeverity[defaultLevel],
|
|
26
26
|
level: levels[level] || levels[defaultLevel],
|
|
27
27
|
time: Date.now(),
|
|
28
28
|
pid: process.pid,
|
|
29
|
-
hostname: os.hostname()
|
|
30
|
-
|
|
29
|
+
hostname: os.hostname()
|
|
30
|
+
})
|
|
31
31
|
|
|
32
|
-
export default stackdriver
|
|
32
|
+
export default stackdriver
|
package/src/logger.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import winston from 'winston'
|
|
2
|
-
import makeLoggers from './loggers/index.js'
|
|
1
|
+
import winston from 'winston'
|
|
2
|
+
import makeLoggers from './loggers/index.js'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @typedef {import('./models/schemas/logger.js').Logger} LoggerType
|
|
@@ -8,19 +8,19 @@ import makeLoggers from './loggers/index.js';
|
|
|
8
8
|
|
|
9
9
|
/** @type {LoggerType[]} */
|
|
10
10
|
const defaultLoggers = [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
]
|
|
11
|
+
{
|
|
12
|
+
type: 'console'
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
15
|
|
|
16
16
|
const levels = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
17
|
+
fatal: 0,
|
|
18
|
+
error: 1,
|
|
19
|
+
warn: 2,
|
|
20
|
+
info: 3,
|
|
21
|
+
debug: 4,
|
|
22
|
+
trace: 5
|
|
23
|
+
}
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Create the logger
|
|
@@ -31,12 +31,12 @@ const levels = {
|
|
|
31
31
|
* @returns {winston.Logger}
|
|
32
32
|
*/
|
|
33
33
|
export default ({ loggers = defaultLoggers, level = 'info', meta = {} }) => {
|
|
34
|
-
|
|
34
|
+
const winstonLoggers = makeLoggers({ winston, loggers })
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
36
|
+
return winston.createLogger({
|
|
37
|
+
level,
|
|
38
|
+
levels,
|
|
39
|
+
defaultMeta: meta,
|
|
40
|
+
transports: winstonLoggers
|
|
41
|
+
})
|
|
42
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export default ({ winston, logger }) =>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
new winston.transports.File({
|
|
3
|
+
filename: logger?.location || 'combined.log'
|
|
4
|
+
})
|
package/src/loggers/console.js
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import stackDriver from '../helpers/stackdriver.js'
|
|
1
|
+
import stackDriver from '../helpers/stackdriver.js'
|
|
2
2
|
|
|
3
3
|
export default ({ winston, logger }) => {
|
|
4
|
-
|
|
4
|
+
const defaultLevel = 'trace'
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const jsonFormatter = winston.format.combine(
|
|
7
|
+
winston.format.errors({ stack: logger?.debug ?? false }),
|
|
8
|
+
winston.format(
|
|
9
|
+
stackDriver({ level: logger?.level, defaultLevel })
|
|
10
|
+
)(),
|
|
11
|
+
winston.format.json()
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
const defaultFormatter = winston.format.combine(
|
|
15
|
+
winston.format.errors({ stack: logger?.debug ?? false }),
|
|
16
|
+
winston.format.simple()
|
|
17
|
+
)
|
|
18
|
+
return new winston.transports.Console({
|
|
19
|
+
level: logger?.level || defaultLevel,
|
|
20
|
+
format:
|
|
9
21
|
logger.format === 'json'
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
)(),
|
|
15
|
-
winston.format.json()
|
|
16
|
-
)
|
|
17
|
-
: winston.format.combine(
|
|
18
|
-
winston.format.errors({ stack: logger?.debug ?? false }),
|
|
19
|
-
winston.format.simple()
|
|
20
|
-
),
|
|
21
|
-
});
|
|
22
|
-
};
|
|
22
|
+
? jsonFormatter
|
|
23
|
+
: defaultFormatter
|
|
24
|
+
})
|
|
25
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export default ({ winston, logger }) =>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
new winston.transports.File({
|
|
3
|
+
filename: logger?.location || 'error.log',
|
|
4
|
+
level: logger?.level || 'error'
|
|
5
|
+
})
|
package/src/loggers/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import makeErrorFileLogger from './error-file.js'
|
|
2
|
-
import makeCombinedFileLogger from './combined-file.js'
|
|
3
|
-
import makeSentryLogger from './sentry.js'
|
|
4
|
-
import makeConsoleLogger from './console.js'
|
|
1
|
+
import makeErrorFileLogger from './error-file.js'
|
|
2
|
+
import makeCombinedFileLogger from './combined-file.js'
|
|
3
|
+
import makeSentryLogger from './sentry.js'
|
|
4
|
+
import makeConsoleLogger from './console.js'
|
|
5
5
|
|
|
6
|
-
import Logger from '../models/logger.js'
|
|
6
|
+
import Logger from '../models/logger.js'
|
|
7
7
|
|
|
8
8
|
const winstonLoggers = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
9
|
+
sentry: makeSentryLogger,
|
|
10
|
+
errorFile: makeErrorFileLogger,
|
|
11
|
+
combinedFile: makeCombinedFileLogger,
|
|
12
|
+
console: makeConsoleLogger
|
|
13
|
+
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* @typedef {import('../models/schemas/logger.js').Logger} LoggerType
|
|
@@ -25,18 +25,18 @@ const winstonLoggers = {
|
|
|
25
25
|
* @returns {TransportStream[]}
|
|
26
26
|
*/
|
|
27
27
|
const makeLoggers = ({ winston, loggers }) =>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
Logger.createAll(loggers).map((logger) => {
|
|
29
|
+
const loggerFn = winstonLoggers[logger.type]
|
|
30
|
+
if (!loggerFn) {
|
|
31
|
+
throw new Error(`Unknown logger type: ${logger.type}`)
|
|
32
|
+
}
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const opts = {
|
|
35
|
+
logger,
|
|
36
|
+
winston
|
|
37
|
+
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
return loggerFn(opts)
|
|
40
|
+
})
|
|
41
41
|
|
|
42
|
-
export default makeLoggers
|
|
42
|
+
export default makeLoggers
|
package/src/loggers/sentry.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import SentryPackage from 'winston-transport-sentry-node'
|
|
1
|
+
import SentryPackage from 'winston-transport-sentry-node'
|
|
2
2
|
|
|
3
|
-
const Sentry = SentryPackage?.default || SentryPackage
|
|
3
|
+
const Sentry = SentryPackage?.default || SentryPackage
|
|
4
4
|
|
|
5
5
|
export default ({ logger }) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
const options = {
|
|
7
|
+
sentry: {
|
|
8
|
+
dsn: logger?.location,
|
|
9
|
+
environment: logger?.environment || 'production',
|
|
10
|
+
serverName: logger?.serverName || 'localhost',
|
|
11
|
+
release: logger?.release || 'unknown',
|
|
12
|
+
debug: logger?.debug || false,
|
|
13
|
+
sampleRate: logger?.sampleRate || 1,
|
|
14
|
+
tracesSampleRate: logger?.tracesSampleRate || 1
|
|
15
|
+
},
|
|
16
|
+
level: logger?.level || 'info'
|
|
17
|
+
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
}
|
|
19
|
+
return new Sentry(options)
|
|
20
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable sonarjs/public-static-readonly */
|
|
2
|
+
import { Enum } from '@trojs/enum'
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* @typedef LevelType
|
|
@@ -17,15 +18,15 @@ import { Enum } from '@trojs/enum';
|
|
|
17
18
|
* @enum { LevelType }
|
|
18
19
|
*/
|
|
19
20
|
export default class Level extends Enum {
|
|
20
|
-
|
|
21
|
+
static info = 'info'
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
static fatal = 'fatal'
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
static error = 'error'
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
static warn = 'warn'
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
static debug = 'debug'
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
static trace = 'trace'
|
|
31
32
|
}
|
package/src/models/logger.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { Obj } from '@trojs/objects'
|
|
2
|
-
import loggerSchema from './schemas/logger.js'
|
|
3
|
-
import LoggerMutator from './mutators/logger.js'
|
|
1
|
+
import { Obj } from '@trojs/objects'
|
|
2
|
+
import loggerSchema from './schemas/logger.js'
|
|
3
|
+
import LoggerMutator from './mutators/logger.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @typedef {import('./schemas/logger.js').Logger} LoggerType
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
const LoggerObject = Obj({ schema: loggerSchema })
|
|
9
|
+
const LoggerObject = Obj({ schema: loggerSchema })
|
|
10
10
|
|
|
11
11
|
export default class Logger {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Create logger objects
|
|
24
|
-
* @param {LoggerType[]} data
|
|
25
|
-
* @returns {LoggerType[]}
|
|
26
|
-
*/
|
|
27
|
-
static createAll(data) {
|
|
28
|
-
if (!data || data.length === 0) {
|
|
29
|
-
return [];
|
|
30
|
-
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a logger object
|
|
14
|
+
* @param {LoggerType} data
|
|
15
|
+
* @returns {LoggerType}
|
|
16
|
+
*/
|
|
17
|
+
static create (data) {
|
|
18
|
+
const logger = LoggerMutator.create(data)
|
|
19
|
+
return LoggerObject.create(logger)
|
|
20
|
+
}
|
|
31
21
|
|
|
32
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Create logger objects
|
|
24
|
+
* @param {LoggerType[]} data
|
|
25
|
+
* @returns {LoggerType[]}
|
|
26
|
+
*/
|
|
27
|
+
static createAll (data) {
|
|
28
|
+
if (!data || data.length === 0) {
|
|
29
|
+
return []
|
|
33
30
|
}
|
|
31
|
+
|
|
32
|
+
return data.map((loggerData) => Logger.create(loggerData))
|
|
33
|
+
}
|
|
34
34
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import DefaultMutator from '@trojs/mutator'
|
|
2
|
-
import LevelEnum from '../enums/level.js'
|
|
1
|
+
import DefaultMutator from '@trojs/mutator'
|
|
2
|
+
import LevelEnum from '../enums/level.js'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Logger mutator
|
|
6
6
|
* @augments DefaultMutator
|
|
7
7
|
*/
|
|
8
8
|
class Logger extends DefaultMutator {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
setLevelAttribute (level) {
|
|
10
|
+
return LevelEnum.fromKey(level)
|
|
11
|
+
}
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
export default Logger
|
|
14
|
+
export default Logger
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Level from '../enums/level.js'
|
|
1
|
+
import Level from '../enums/level.js'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @typedef {import('../enums/level.js').LevelType} LevelType
|
|
@@ -22,16 +22,16 @@ import Level from '../enums/level.js';
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
export default {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
25
|
+
type: String,
|
|
26
|
+
'location?': String,
|
|
27
|
+
'level?': Level,
|
|
28
|
+
'key?': String,
|
|
29
|
+
'credentials?': Object,
|
|
30
|
+
'environment?': String,
|
|
31
|
+
'serverName?': String,
|
|
32
|
+
'release?': String,
|
|
33
|
+
'debug?': Boolean,
|
|
34
|
+
'sampleRate?': Number,
|
|
35
|
+
'tracesSampleRate?': Number,
|
|
36
|
+
'format?': String
|
|
37
|
+
}
|