@levrbet/shared 0.2.17 → 0.2.18
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.
|
@@ -2,11 +2,14 @@ import winston from "winston";
|
|
|
2
2
|
export interface LoggerOptions {
|
|
3
3
|
service?: string;
|
|
4
4
|
level?: string;
|
|
5
|
-
|
|
5
|
+
additionalMeta?: Record<string, unknown>;
|
|
6
6
|
}
|
|
7
|
-
export declare const createLogger: (
|
|
7
|
+
export declare const createLogger: (options?: LoggerOptions) => winston.Logger;
|
|
8
8
|
declare const logger: winston.Logger;
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
export declare const createStream: (loggerInstance?: winston.Logger) => {
|
|
10
|
+
write: (message: string) => void;
|
|
11
|
+
};
|
|
12
|
+
export declare const stream: {
|
|
13
|
+
write: (message: string) => void;
|
|
12
14
|
};
|
|
15
|
+
export default logger;
|
|
@@ -3,58 +3,143 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.stream = exports.createStream = exports.createLogger = void 0;
|
|
7
7
|
const winston_1 = __importDefault(require("winston"));
|
|
8
8
|
const dotenv_1 = require("./dotenv");
|
|
9
|
-
const
|
|
9
|
+
const types_1 = require("../../core/types");
|
|
10
|
+
const util_1 = __importDefault(require("util"));
|
|
11
|
+
const SPLAT = Symbol.for("splat");
|
|
12
|
+
/**
|
|
13
|
+
* @dev exporting a configured Winston logger instance
|
|
14
|
+
*
|
|
15
|
+
* In another service using the library:
|
|
16
|
+
import { createLogger, createStream } from "@levrbet/shared"
|
|
17
|
+
|
|
18
|
+
// Create a custom logger
|
|
19
|
+
const logger = createLogger({
|
|
20
|
+
service: "levr-oracle-core",
|
|
21
|
+
additionalMeta: {
|
|
22
|
+
version: "1.0.0",
|
|
23
|
+
region: "ap-south-1"
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
// Use with Morgan for HTTP request logging
|
|
28
|
+
import morgan from "express"
|
|
29
|
+
const morganStream = createStream(logger)
|
|
30
|
+
app.use(morgan("combined", { stream: morganStream }))
|
|
31
|
+
|
|
32
|
+
// Or just use the default
|
|
33
|
+
import logger from "@levrbet/shared"
|
|
34
|
+
logger.info("Using default logger")
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
const { combine, timestamp, errors, json, splat, colorize, printf } = winston_1.default.format;
|
|
38
|
+
// Determine log level based on environment
|
|
10
39
|
const LOG_LEVEL = {
|
|
11
40
|
local: "debug",
|
|
12
41
|
dev: "debug",
|
|
13
42
|
staging: "info",
|
|
14
43
|
prod: "error",
|
|
15
|
-
}[dotenv_1.LEVR_ENV]
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
44
|
+
}[dotenv_1.LEVR_ENV];
|
|
45
|
+
const KEY_COLOR = "\x1b[33m"; // yellow
|
|
46
|
+
const RESET_COLOR = "\x1b[0m";
|
|
47
|
+
const readableFormat = printf((info) => {
|
|
48
|
+
const { level, message, timestamp, service, stack, ...rest } = info;
|
|
49
|
+
const ts = typeof timestamp === "string" ? timestamp : new Date().toISOString();
|
|
50
|
+
const lvl = typeof level === "string" ? level : "info";
|
|
51
|
+
const svc = typeof service === "string" ? service : undefined;
|
|
52
|
+
let msgStr = typeof message === "string" ? message : util_1.default.inspect(message, { depth: 4 });
|
|
53
|
+
const splatArgs = Array.isArray(info[SPLAT]) ? info[SPLAT] : [];
|
|
54
|
+
const metaToPrint = {};
|
|
55
|
+
for (const arg of splatArgs) {
|
|
56
|
+
if (typeof arg === "string" || typeof arg === "number" || typeof arg === "boolean") {
|
|
57
|
+
msgStr += " " + String(arg);
|
|
58
|
+
}
|
|
59
|
+
else if (Array.isArray(arg)) {
|
|
60
|
+
if (!metaToPrint["args"]) {
|
|
61
|
+
metaToPrint["args"] = [];
|
|
62
|
+
}
|
|
63
|
+
;
|
|
64
|
+
metaToPrint["args"].push(arg);
|
|
65
|
+
}
|
|
66
|
+
else if (arg && typeof arg === "object") {
|
|
67
|
+
if (!metaToPrint["args"]) {
|
|
68
|
+
metaToPrint["args"] = [];
|
|
69
|
+
}
|
|
70
|
+
;
|
|
71
|
+
metaToPrint["args"].push(arg);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
if (!metaToPrint["args"]) {
|
|
75
|
+
metaToPrint["args"] = [];
|
|
76
|
+
}
|
|
77
|
+
;
|
|
78
|
+
metaToPrint["args"].push(arg);
|
|
79
|
+
}
|
|
29
80
|
}
|
|
30
|
-
|
|
81
|
+
for (const [key, value] of Object.entries(rest)) {
|
|
82
|
+
if (["service", "environment", "level", "message", "timestamp"].includes(key))
|
|
83
|
+
continue;
|
|
84
|
+
if (/^\d+$/.test(key))
|
|
85
|
+
continue;
|
|
86
|
+
metaToPrint[key] = value;
|
|
87
|
+
}
|
|
88
|
+
let output = `${ts} ${lvl}`;
|
|
89
|
+
if (svc) {
|
|
90
|
+
output += ` [${svc}]`;
|
|
91
|
+
}
|
|
92
|
+
output += `: ${msgStr}`;
|
|
93
|
+
if (stack && typeof stack === "string") {
|
|
94
|
+
output += `\n ${stack.split("\n").join("\n ")}`;
|
|
95
|
+
}
|
|
96
|
+
if (Object.keys(metaToPrint).length > 0) {
|
|
97
|
+
const inspectOpts = { depth: 6, colors: false, compact: false, maxArrayLength: 100 };
|
|
98
|
+
// Later:
|
|
99
|
+
const pretty = util_1.default.inspect(metaToPrint, inspectOpts);
|
|
100
|
+
// Expand regex to catch more key forms:
|
|
101
|
+
const coloured = pretty.replace(/(^\s*)(["']?)([^"'\s]+)\2(?=\s*[:])/gm, (_match, indent, quote, key) => `${indent}${KEY_COLOR}${quote}${key}${quote}${RESET_COLOR}`);
|
|
102
|
+
output += `\n ${coloured.split("\n").join("\n ")}`;
|
|
103
|
+
}
|
|
104
|
+
return output;
|
|
31
105
|
});
|
|
32
|
-
/// @dev
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
splat(),
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
return winston_1.default.createLogger({
|
|
106
|
+
/// @dev Production format (structured JSON for OTEL)
|
|
107
|
+
const productionFormat = combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss.SSS" }), errors({ stack: true }), splat(), json());
|
|
108
|
+
// Local development format (human-readable with colors)
|
|
109
|
+
const developmentFormat = combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss.SSS" }), errors({ stack: true }), splat(), colorize({ all: false, level: true, message: false }), readableFormat);
|
|
110
|
+
const createLogger = (options = {}) => {
|
|
111
|
+
const { service = "@levrbet/shared", level = LOG_LEVEL, additionalMeta = {} } = options;
|
|
112
|
+
const winstonLogger = winston_1.default.createLogger({
|
|
40
113
|
level,
|
|
41
|
-
|
|
42
|
-
|
|
114
|
+
levels: winston_1.default.config.npm.levels,
|
|
115
|
+
format: dotenv_1.LEVR_ENV === types_1.LevrEnv.PROD ? productionFormat : developmentFormat,
|
|
116
|
+
defaultMeta: {
|
|
117
|
+
service,
|
|
118
|
+
environment: dotenv_1.LEVR_ENV,
|
|
119
|
+
...additionalMeta,
|
|
120
|
+
},
|
|
43
121
|
transports: [
|
|
44
122
|
new winston_1.default.transports.Console({
|
|
45
|
-
stderrLevels: ["error"],
|
|
123
|
+
stderrLevels: ["error"],
|
|
46
124
|
}),
|
|
47
125
|
],
|
|
48
126
|
exitOnError: false,
|
|
49
127
|
});
|
|
128
|
+
return winstonLogger;
|
|
50
129
|
};
|
|
51
130
|
exports.createLogger = createLogger;
|
|
52
|
-
|
|
53
|
-
const logger = (0, exports.createLogger)(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
131
|
+
// Default logger instance
|
|
132
|
+
const logger = (0, exports.createLogger)();
|
|
133
|
+
// Create stream for Morgan (HTTP logging)
|
|
134
|
+
const createStream = (loggerInstance = logger) => ({
|
|
135
|
+
write: (message) => {
|
|
136
|
+
const msg = typeof message === "string" ? message.trim() : String(message);
|
|
137
|
+
if (msg.length > 0) {
|
|
138
|
+
loggerInstance.info(msg);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
58
141
|
});
|
|
59
|
-
exports.
|
|
142
|
+
exports.createStream = createStream;
|
|
143
|
+
exports.stream = (0, exports.createStream)();
|
|
144
|
+
exports.default = logger;
|
|
60
145
|
//# sourceMappingURL=winston.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winston.js","sourceRoot":"","sources":["../../../src/server/config/winston.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;AAC7B,qCAAmC;
|
|
1
|
+
{"version":3,"file":"winston.js","sourceRoot":"","sources":["../../../src/server/config/winston.ts"],"names":[],"mappings":"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"}
|