@levrbet/shared 0.2.15 → 0.2.17
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,14 +2,11 @@ import winston from "winston";
|
|
|
2
2
|
export interface LoggerOptions {
|
|
3
3
|
service?: string;
|
|
4
4
|
level?: string;
|
|
5
|
-
|
|
5
|
+
extra?: Record<string, unknown>;
|
|
6
6
|
}
|
|
7
|
-
export declare const createLogger: (
|
|
7
|
+
export declare const createLogger: ({ service, level, extra }?: LoggerOptions) => winston.Logger;
|
|
8
8
|
declare const logger: winston.Logger;
|
|
9
|
-
export declare const createStream: (loggerInstance?: winston.Logger) => {
|
|
10
|
-
write: (message: string) => void;
|
|
11
|
-
};
|
|
12
|
-
export declare const stream: {
|
|
13
|
-
write: (message: string) => void;
|
|
14
|
-
};
|
|
15
9
|
export default logger;
|
|
10
|
+
export declare const createMorganStream: (log?: winston.Logger) => {
|
|
11
|
+
write: (msg: string) => winston.Logger;
|
|
12
|
+
};
|
|
@@ -3,136 +3,58 @@ 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.createMorganStream = exports.createLogger = void 0;
|
|
7
7
|
const winston_1 = __importDefault(require("winston"));
|
|
8
8
|
const dotenv_1 = require("./dotenv");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// Or just use the default
|
|
30
|
-
import logger from "@levrbet/shared"
|
|
31
|
-
logger.info("Using default logger")
|
|
32
|
-
*
|
|
33
|
-
*/
|
|
34
|
-
const { combine, timestamp, errors, json, printf } = winston_1.default.format;
|
|
35
|
-
// Determine log level based on environment
|
|
36
|
-
const getLogLevel = () => {
|
|
37
|
-
switch (dotenv_1.LEVR_ENV) {
|
|
38
|
-
case "local":
|
|
39
|
-
return "debug";
|
|
40
|
-
case "dev":
|
|
41
|
-
return "debug";
|
|
42
|
-
case "staging":
|
|
43
|
-
return "info";
|
|
44
|
-
case "prod":
|
|
45
|
-
return "error";
|
|
46
|
-
default:
|
|
47
|
-
return "info";
|
|
9
|
+
const { combine, timestamp, errors, json, printf, colorize, splat } = winston_1.default.format;
|
|
10
|
+
const LOG_LEVEL = {
|
|
11
|
+
local: "debug",
|
|
12
|
+
dev: "debug",
|
|
13
|
+
staging: "info",
|
|
14
|
+
prod: "error",
|
|
15
|
+
}[dotenv_1.LEVR_ENV] ?? "info";
|
|
16
|
+
/// @dev more detailed console format for local development
|
|
17
|
+
const devFormat = printf(({ level, message, timestamp, service, ...meta }) => {
|
|
18
|
+
// color the level
|
|
19
|
+
const colouredLevel = winston_1.default.format.colorize().colorize(level, level.toUpperCase());
|
|
20
|
+
// base line
|
|
21
|
+
let line = `${timestamp} ${colouredLevel}`;
|
|
22
|
+
if (service)
|
|
23
|
+
line += ` [${service}]`;
|
|
24
|
+
line += ` ${message}`;
|
|
25
|
+
// print any extra meta on a new line (pretty JSON)
|
|
26
|
+
const keys = Object.keys(meta);
|
|
27
|
+
if (keys.length) {
|
|
28
|
+
line += `\n${JSON.stringify(meta, null, 2)}`;
|
|
48
29
|
}
|
|
49
|
-
|
|
50
|
-
// Color mapping for manual colorization
|
|
51
|
-
const colors = {
|
|
52
|
-
error: "\x1b[31m", // red
|
|
53
|
-
warn: "\x1b[33m", // yellow
|
|
54
|
-
info: "\x1b[36m", // cyan
|
|
55
|
-
http: "\x1b[35m", // magenta
|
|
56
|
-
verbose: "\x1b[90m", // gray
|
|
57
|
-
debug: "\x1b[34m", // blue
|
|
58
|
-
silly: "\x1b[90m", // gray
|
|
59
|
-
};
|
|
60
|
-
const reset = "\x1b[0m";
|
|
61
|
-
// Custom format for console output in non-production
|
|
62
|
-
const consoleFormat = printf((info) => {
|
|
63
|
-
const { level, message, timestamp, stack, service, ...metadata } = info;
|
|
64
|
-
const color = colors[level] || "";
|
|
65
|
-
const coloredLevel = dotenv_1.LEVR_ENV === "prod" ? level : `${color}${level}${reset}`;
|
|
66
|
-
let msg = `${timestamp} [${coloredLevel}]`;
|
|
67
|
-
if (service) {
|
|
68
|
-
msg += ` [${service}]`;
|
|
69
|
-
}
|
|
70
|
-
// Simple message handling
|
|
71
|
-
if (typeof message === "string") {
|
|
72
|
-
msg += `: ${message}`;
|
|
73
|
-
}
|
|
74
|
-
else if (message !== undefined && message !== null) {
|
|
75
|
-
try {
|
|
76
|
-
msg += `: ${JSON.stringify(message)}`;
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
msg += `: ${String(message)}`;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// Add stack trace if error
|
|
83
|
-
if (stack) {
|
|
84
|
-
msg += `\n${stack}`;
|
|
85
|
-
}
|
|
86
|
-
// Add metadata if present (this is where extra arguments go)
|
|
87
|
-
const relevantKeys = Object.keys(metadata).filter((key) => !["level", "message", "timestamp", "service", "environment", "splat"].includes(key));
|
|
88
|
-
if (relevantKeys.length > 0) {
|
|
89
|
-
const metaObj = Object.fromEntries(relevantKeys.map((key) => [key, metadata[key]]));
|
|
90
|
-
try {
|
|
91
|
-
msg += `\n${JSON.stringify(metaObj, null, 2)}`;
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
msg += `\n${String(metaObj)}`;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return msg;
|
|
30
|
+
return line;
|
|
98
31
|
});
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
32
|
+
/// @dev pure json format for otel collection
|
|
33
|
+
const prodFormat = combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), // ISO-ish
|
|
34
|
+
errors({ stack: true }), // stack traces as `error.stack`
|
|
35
|
+
splat(), // %s, %d, %j support
|
|
36
|
+
json() // final JSON string
|
|
37
|
+
);
|
|
38
|
+
const createLogger = ({ service = "unknown-levr-service", level = LOG_LEVEL, extra = {} } = {}) => {
|
|
39
|
+
return winston_1.default.createLogger({
|
|
106
40
|
level,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
defaultMeta: {
|
|
110
|
-
service,
|
|
111
|
-
environment: dotenv_1.LEVR_ENV,
|
|
112
|
-
...additionalMeta,
|
|
113
|
-
},
|
|
41
|
+
format: dotenv_1.LEVR_ENV === "local" ? combine(colorize(), devFormat) : prodFormat,
|
|
42
|
+
defaultMeta: { service, environment: dotenv_1.LEVR_ENV, ...extra },
|
|
114
43
|
transports: [
|
|
115
44
|
new winston_1.default.transports.Console({
|
|
116
|
-
stderrLevels: ["error"],
|
|
45
|
+
stderrLevels: ["error"], // error → stderr, everything else → stdout
|
|
117
46
|
}),
|
|
118
47
|
],
|
|
119
48
|
exitOnError: false,
|
|
120
49
|
});
|
|
121
|
-
return winstonLogger;
|
|
122
50
|
};
|
|
123
51
|
exports.createLogger = createLogger;
|
|
124
|
-
|
|
125
|
-
const logger = (0, exports.createLogger)();
|
|
126
|
-
// Create stream for Morgan (HTTP logging)
|
|
127
|
-
const createStream = (loggerInstance = logger) => ({
|
|
128
|
-
write: (message) => {
|
|
129
|
-
const msg = typeof message === "string" ? message.trim() : String(message);
|
|
130
|
-
if (msg.length > 0) {
|
|
131
|
-
loggerInstance.info(msg);
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
});
|
|
135
|
-
exports.createStream = createStream;
|
|
136
|
-
exports.stream = (0, exports.createStream)();
|
|
52
|
+
/// @dev default logger for general use
|
|
53
|
+
const logger = (0, exports.createLogger)({ service: "@levr/shared" });
|
|
137
54
|
exports.default = logger;
|
|
55
|
+
/// @dev Morgan stream adapter
|
|
56
|
+
const createMorganStream = (log = logger) => ({
|
|
57
|
+
write: (msg) => log.http(msg.trim()),
|
|
58
|
+
});
|
|
59
|
+
exports.createMorganStream = createMorganStream;
|
|
138
60
|
//# 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;AAEnC
|
|
1
|
+
{"version":3,"file":"winston.js","sourceRoot":"","sources":["../../../src/server/config/winston.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;AAC7B,qCAAmC;AAEnC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAA;AAEpF,MAAM,SAAS,GACX;IACI,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,OAAO;IACZ,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,OAAO;CAChB,CAAC,iBAAQ,CAAC,IAAI,MAAM,CAAA;AAEzB,2DAA2D;AAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;IACzE,kBAAkB;IAClB,MAAM,aAAa,GAAG,iBAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAEpF,YAAY;IACZ,IAAI,IAAI,GAAG,GAAG,SAAS,IAAI,aAAa,EAAE,CAAA;IAC1C,IAAI,OAAO;QAAE,IAAI,IAAI,KAAK,OAAO,GAAG,CAAA;IACpC,IAAI,IAAI,IAAI,OAAO,EAAE,CAAA;IAErB,mDAAmD;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;IAChD,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC,CAAC,CAAA;AAEF,6CAA6C;AAC7C,MAAM,UAAU,GAAG,OAAO,CACtB,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAAE,UAAU;AACxD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,gCAAgC;AACzD,KAAK,EAAE,EAAE,qBAAqB;AAC9B,IAAI,EAAE,CAAC,oBAAoB;CAC9B,CAAA;AAQM,MAAM,YAAY,GAAG,CAAC,EAAE,OAAO,GAAG,sBAAsB,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,GAAG,EAAE,KAAoB,EAAE,EAAE,EAAE;IACpH,OAAO,iBAAO,CAAC,YAAY,CAAC;QACxB,KAAK;QACL,MAAM,EAAE,iBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU;QAC1E,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAQ,EAAE,GAAG,KAAK,EAAE;QACzD,UAAU,EAAE;YACR,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC3B,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,2CAA2C;aACvE,CAAC;SACL;QACD,WAAW,EAAE,KAAK;KACrB,CAAC,CAAA;AACN,CAAC,CAAA;AAZY,QAAA,YAAY,gBAYxB;AAED,uCAAuC;AACvC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;AACxD,kBAAe,MAAM,CAAA;AAErB,8BAA8B;AACvB,MAAM,kBAAkB,GAAG,CAAC,MAAsB,MAAM,EAAE,EAAE,CAAC,CAAC;IACjE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;CAC/C,CAAC,CAAA;AAFW,QAAA,kBAAkB,sBAE7B"}
|