@subsquid/logger 0.0.1

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/README.md ADDED
@@ -0,0 +1,71 @@
1
+ # @subsquid/logger
2
+
3
+ Lightweight structured logger for squid framework.
4
+
5
+ ## Usage
6
+
7
+ ```typescript
8
+ import {createLogger} from "@subsquid/logger"
9
+
10
+ const log = createLogger('sqd:demo')
11
+
12
+ log.info('message with severity info')
13
+ log.debug('message with severity debug')
14
+
15
+ log.info({foo: 1, bar: 2}, 'message and some additional attributes')
16
+
17
+ // info message consisting only of attributes
18
+ log.info({a: 1, b: 2, c: 3, array: [4, 5]})
19
+
20
+ // pass an Error object inplace of attributes
21
+ log.warn(new Error('Some error occured'))
22
+
23
+ // Error together with some other attributes and message
24
+ log.error({err: new Error('Another error'), a: 1, b: 2}, 'weird')
25
+
26
+ // create a child logger instance with namespace `sqd:demo:sql`
27
+ // and `req: 1` attribute attached to every log record
28
+ const sqlLog = log.child('sql', {req: 1})
29
+ sqlLog.debug('connecting to database')
30
+ sqlLog.debug({sql: 'SELECT max(id) FROM status'})
31
+ ```
32
+
33
+ ## Configuration
34
+
35
+ There are 6 log levels available: `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`.
36
+
37
+ The log level of each logger instance is solely determined by its namespace and specified
38
+ via set of `SQD_TRACE`, ..., `SQD_FATAL` environment variables.
39
+ The default log level is `INFO`.
40
+
41
+ Users override the default log level by setting in appropriate
42
+ environment variable a pattern which matches the logger's namespace.
43
+
44
+ * `SQD_DEBUG=*` - sets the log level to `DEBUG` for all loggers.
45
+ * `SQD_DEBUG=foo` - loggers `foo`, `foo:bar`, `foo:a:b`, etc will have a `DEBUG` level.
46
+ * `SQD_DEBUG=a:b*:c,d` - loggers `a:b:c`, `a:baz:c`, `a:baz:c:foo`, `d`, etc will have a `DEBUG` level, logger `a:z:c` will not.
47
+
48
+ When logger is matched by multiple `SQD_*` variables, the match with the highest specificity wins.
49
+ When specificities are equal, the most verbose matched log level will be effective.
50
+
51
+ Specificity is computed as a number of namespace characters
52
+ which are not matched by wildcards and which are not part of a child namespace.
53
+ For example, given a pattern `foo*bar`, the specificity of `foo:bar:baz:qux`, `foobar` and `foobazbar` is `6`.
54
+
55
+ ## Output
56
+
57
+ The logger always writes to `stderr`.
58
+
59
+ When `stderr` is connected to a terminal, log records will be pretty printed.
60
+
61
+ ![Pretty printed log records](img.png)
62
+
63
+ Otherwise, log records will be written as JSON lines.
64
+
65
+ ```
66
+ {"level":2,"time":1650875498437,"ns":"sqd:demo","msg":"message with severity info"}
67
+ {"level":2,"time":1650875498437,"ns":"sqd:demo","msg":"message and some additional attributes","foo":1,"bar":2}
68
+ {"level":2,"time":1650875498437,"ns":"sqd:demo","a":1,"b":2,"c":3,"array":[4,5]}
69
+ {"level":3,"time":1650875498437,"ns":"sqd:demo","err":{"stack":"Error: Some error occured\n at Object.<anonymous> (/Users/eldar/dev/squid/util/logger/lib/demo.js:11:10)\n at Module._compile (node:internal/modules/cjs/loader:1103:14)\n at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)\n at Module.load (node:internal/modules/cjs/loader:981:32)\n at Function.Module._load (node:internal/modules/cjs/loader:822:12)\n at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)\n at node:internal/main/run_main_module:17:47"}}
70
+ {"level":4,"time":1650875498438,"ns":"sqd:demo","msg":"weird","err":{"stack":"Error: Another error\n at Object.<anonymous> (/Users/eldar/dev/squid/util/logger/lib/demo.js:13:18)\n at Module._compile (node:internal/modules/cjs/loader:1103:14)\n at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)\n at Module.load (node:internal/modules/cjs/loader:981:32)\n at Function.Module._load (node:internal/modules/cjs/loader:822:12)\n at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)\n at node:internal/main/run_main_module:17:47"},"a":1,"b":2}
71
+ ```
package/lib/demo.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":""}
package/lib/demo.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("./index");
4
+ const log = (0, index_1.createLogger)('sqd:demo');
5
+ log.info('message with severity info');
6
+ log.debug('message with severity debug');
7
+ log.info({ foo: 1, bar: 2 }, 'message and some additional attributes');
8
+ // info message consisting only of attributes
9
+ log.info({ a: 1, b: 2, c: 3, array: [4, 5, { a: 1, b: 2, c: { foo: 'foo', bar: 'bar' } }, { a: 3, b: 4 }] });
10
+ // pass an Error object inplace of attributes
11
+ log.warn(new Error('Some error occured'));
12
+ // Error together with some other attributes and message
13
+ log.error({ err: new Error('Another error'), a: 1, b: 2 }, 'weird');
14
+ // create a child logger instance with namespace `sqd:demo:sql`
15
+ // and `req: 1` attribute attached to every log record
16
+ const sqlLog = log.child('sql', { req: 1 });
17
+ sqlLog.debug('connecting to database');
18
+ sqlLog.debug({ sql: 'SELECT max(id) FROM status' });
19
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":";;AAAA,mCAAoC;AAEpC,MAAM,GAAG,GAAG,IAAA,oBAAY,EAAC,UAAU,CAAC,CAAA;AAEpC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;AACtC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;AAExC,GAAG,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC,EAAE,wCAAwC,CAAC,CAAA;AAEpE,6CAA6C;AAC7C,GAAG,CAAC,IAAI,CAAC,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAC,EAAC,EAAE,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,CAAA;AAEpG,6CAA6C;AAC7C,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;AAEzC,wDAAwD;AACxD,GAAG,CAAC,KAAK,CAAC,EAAC,GAAG,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,EAAE,OAAO,CAAC,CAAA;AAEjE,+DAA+D;AAC/D,sDAAsD;AACtD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAA;AACzC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;AACtC,MAAM,CAAC,KAAK,CAAC,EAAC,GAAG,EAAE,4BAA4B,EAAC,CAAC,CAAA"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { Logger } from "./logger";
2
+ export { LogLevel } from "./level";
3
+ export * from "./logger";
4
+ export declare function createLogger(ns: string, attributes?: object): Logger;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAI/B,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAA;AAChC,cAAc,UAAU,CAAA;AASxB,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpE"}
package/lib/index.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.createLogger = exports.LogLevel = void 0;
14
+ const logger_1 = require("./logger");
15
+ const json_1 = require("./sinks/json");
16
+ const pretty_1 = require("./sinks/pretty");
17
+ var level_1 = require("./level");
18
+ Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return level_1.LogLevel; } });
19
+ __exportStar(require("./logger"), exports);
20
+ const ROOT = new logger_1.Logger(process.stderr.isTTY ? pretty_1.prettyStderrSink : json_1.jsonLinesStderrSink, '');
21
+ function createLogger(ns, attributes) {
22
+ return ROOT.child(ns, attributes);
23
+ }
24
+ exports.createLogger = createLogger;
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAA+B;AAC/B,uCAAgD;AAChD,2CAA+C;AAE/C,iCAAgC;AAAxB,iGAAA,QAAQ,OAAA;AAChB,2CAAwB;AAGxB,MAAM,IAAI,GAAG,IAAI,eAAM,CACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAgB,CAAC,CAAC,CAAC,0BAAmB,EAC7D,EAAE,CACL,CAAA;AAGD,SAAgB,YAAY,CAAC,EAAU,EAAE,UAAmB;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;AACrC,CAAC;AAFD,oCAEC"}
package/lib/level.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export declare enum LogLevel {
2
+ TRACE = 0,
3
+ DEBUG = 1,
4
+ INFO = 2,
5
+ WARN = 3,
6
+ ERROR = 4,
7
+ FATAL = 5
8
+ }
9
+ export declare class Levels {
10
+ private cache;
11
+ private levels;
12
+ get(ns: string): LogLevel;
13
+ private determineLevel;
14
+ configure(level: LogLevel, config: string): void;
15
+ }
16
+ export declare const LEVELS: Levels;
17
+ //# sourceMappingURL=level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../src/level.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAChB,KAAK,IAAI;IACT,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,KAAK,IAAI;CACZ;AA+CD,qBAAa,MAAM;IACf,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAA6E;IAE3F,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IASzB,OAAO,CAAC,cAAc;IAatB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAInD;AAGD,eAAO,MAAM,MAAM,QAAe,CAGjC"}
package/lib/level.js ADDED
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LEVELS = exports.Levels = exports.LogLevel = void 0;
4
+ var LogLevel;
5
+ (function (LogLevel) {
6
+ LogLevel[LogLevel["TRACE"] = 0] = "TRACE";
7
+ LogLevel[LogLevel["DEBUG"] = 1] = "DEBUG";
8
+ LogLevel[LogLevel["INFO"] = 2] = "INFO";
9
+ LogLevel[LogLevel["WARN"] = 3] = "WARN";
10
+ LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
11
+ LogLevel[LogLevel["FATAL"] = 5] = "FATAL";
12
+ })(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
13
+ function compileLevelConfig(config) {
14
+ let variants = config.split(',').map(ns => {
15
+ ns = ns.trim();
16
+ let regex = new RegExp('^' + ns.split('*').map(escapeRegex).join('(.*)') + '(:.*)?$');
17
+ return function match(ns) {
18
+ let m = regex.exec(ns);
19
+ if (!m)
20
+ return 0;
21
+ let specificity = ns.length + 1;
22
+ for (let i = 1; i < m.length; i++) {
23
+ specificity -= m[i]?.length || 0;
24
+ }
25
+ return specificity;
26
+ };
27
+ });
28
+ return function matchLevel(ns) {
29
+ let specificity = 0;
30
+ for (let i = 0; i < variants.length; i++) {
31
+ specificity = Math.max(specificity, variants[i](ns));
32
+ }
33
+ return specificity;
34
+ };
35
+ }
36
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
37
+ function escapeRegex(s) {
38
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
39
+ }
40
+ function noMatch(ns) {
41
+ return 0;
42
+ }
43
+ class Levels {
44
+ constructor() {
45
+ this.cache = {};
46
+ this.levels = [noMatch, noMatch, noMatch, noMatch, noMatch, noMatch];
47
+ }
48
+ get(ns) {
49
+ let level = this.cache[ns];
50
+ if (level == null) {
51
+ return this.cache[ns] = this.determineLevel(ns);
52
+ }
53
+ else {
54
+ return level;
55
+ }
56
+ }
57
+ determineLevel(ns) {
58
+ let specificity = 0;
59
+ let level = LogLevel.INFO;
60
+ for (let i = 0; i < this.levels.length; i++) {
61
+ let s = this.levels[i](ns);
62
+ if (s > specificity) {
63
+ level = i;
64
+ specificity = s;
65
+ }
66
+ }
67
+ return level;
68
+ }
69
+ configure(level, config) {
70
+ this.levels[level] = compileLevelConfig(config);
71
+ this.cache = {};
72
+ }
73
+ }
74
+ exports.Levels = Levels;
75
+ exports.LEVELS = new Levels();
76
+ ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL'].forEach((name, level) => {
77
+ let env = process.env[`SQD_${name}`];
78
+ if (env) {
79
+ exports.LEVELS.configure(level, env);
80
+ }
81
+ });
82
+ //# sourceMappingURL=level.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level.js","sourceRoot":"","sources":["../src/level.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=level.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level.test.d.ts","sourceRoot":"","sources":["../src/level.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const level_1 = require("./level");
8
+ function suite(config, tests) {
9
+ let name = config.map(([level, pattern]) => level_1.LogLevel[level] + '=' + pattern).join('; ');
10
+ describe(name ? 'with ' + name : 'by default', function () {
11
+ let levels = new level_1.Levels();
12
+ config.forEach(([level, pattern]) => {
13
+ levels.configure(level, pattern);
14
+ });
15
+ tests.forEach(([ns, level]) => {
16
+ it(ns + '=' + level_1.LogLevel[level], () => {
17
+ assert_1.default.strictEqual(levels.get(ns), level);
18
+ });
19
+ });
20
+ });
21
+ }
22
+ describe("levels", function () {
23
+ suite([], [
24
+ ['foo', level_1.LogLevel.INFO]
25
+ ]);
26
+ suite([
27
+ [level_1.LogLevel.DEBUG, '*']
28
+ ], [
29
+ ['foo', level_1.LogLevel.DEBUG],
30
+ ['bar', level_1.LogLevel.DEBUG]
31
+ ]);
32
+ suite([
33
+ [level_1.LogLevel.DEBUG, 'foo']
34
+ ], [
35
+ ['foo', level_1.LogLevel.DEBUG],
36
+ ['foo:bar', level_1.LogLevel.DEBUG],
37
+ ['foobar', level_1.LogLevel.INFO]
38
+ ]);
39
+ suite([
40
+ [level_1.LogLevel.DEBUG, 'foo:*']
41
+ ], [
42
+ ['foo', level_1.LogLevel.INFO],
43
+ ['foo:bar', level_1.LogLevel.DEBUG],
44
+ ['foobar', level_1.LogLevel.INFO]
45
+ ]);
46
+ suite([
47
+ [level_1.LogLevel.DEBUG, 'foo*bar']
48
+ ], [
49
+ ['foobar', level_1.LogLevel.DEBUG],
50
+ ['foo:bar', level_1.LogLevel.DEBUG],
51
+ ['foo:baz:bar:qux', level_1.LogLevel.DEBUG],
52
+ ['foobaz', level_1.LogLevel.INFO]
53
+ ]);
54
+ suite([
55
+ [level_1.LogLevel.DEBUG, '*'],
56
+ [level_1.LogLevel.WARN, 'foo'],
57
+ [level_1.LogLevel.ERROR, 'foo:*:bar']
58
+ ], [
59
+ ['bar', level_1.LogLevel.DEBUG],
60
+ ['foo', level_1.LogLevel.WARN],
61
+ ['foo:bar', level_1.LogLevel.WARN],
62
+ ['foo:qux:bar', level_1.LogLevel.ERROR]
63
+ ]);
64
+ suite([
65
+ [level_1.LogLevel.DEBUG, 'foo, foo:*:baz'],
66
+ [level_1.LogLevel.WARN, 'foo:*']
67
+ ], [
68
+ ['foo', level_1.LogLevel.DEBUG],
69
+ ['foo:bar:baz', level_1.LogLevel.DEBUG],
70
+ ['foo:bar', level_1.LogLevel.WARN]
71
+ ]);
72
+ });
73
+ //# sourceMappingURL=level.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level.test.js","sourceRoot":"","sources":["../src/level.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { LogLevel } from "./level";
2
+ export interface LogRecord {
3
+ time: number;
4
+ level: LogLevel;
5
+ ns: string;
6
+ msg?: string;
7
+ err?: Error;
8
+ }
9
+ export declare type Sink = (rec: LogRecord) => void;
10
+ export declare class Logger {
11
+ private sink;
12
+ private ns;
13
+ private attributes?;
14
+ constructor(sink: Sink, ns: string, attributes?: object | undefined);
15
+ get level(): LogLevel;
16
+ child(attributes: object): Logger;
17
+ child(ns: string, attributes?: object): Logger;
18
+ write(level: LogLevel, msg?: string): void;
19
+ write(level: LogLevel, attributes?: object, msg?: string): void;
20
+ trace(msg?: string): void;
21
+ trace(attributes?: object, msg?: string): void;
22
+ debug(msg?: string): void;
23
+ debug(attributes?: object, msg?: string): void;
24
+ info(msg?: string): void;
25
+ info(attributes?: object, msg?: string): void;
26
+ warn(msg?: string): void;
27
+ warn(attributes?: object, msg?: string): void;
28
+ error(msg?: string): void;
29
+ error(attributes?: object, msg?: string): void;
30
+ fatal(msg?: string | null): void;
31
+ fatal(attributes?: object | null, msg?: string): void;
32
+ isTrace(): boolean;
33
+ isDebug(): boolean;
34
+ isInfo(): boolean;
35
+ isWarn(): boolean;
36
+ isError(): boolean;
37
+ isFatal(): boolean;
38
+ }
39
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAC,MAAM,SAAS,CAAA;AAGxC,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,KAAK,CAAA;CACd;AAGD,oBAAY,IAAI,GAAG,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAA;AAG3C,qBAAa,MAAM;IAEX,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU,CAAC;gBAFX,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,oBAAQ;IAI/B,IAAI,KAAK,IAAI,QAAQ,CAEpB;IAED,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IACjC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAkB9C,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAC1C,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAsB/D,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IACzB,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9C,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IACzB,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9C,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IACxB,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAK7C,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IACxB,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAK7C,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IACzB,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9C,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAChC,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrD,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,OAAO;IAIlB,MAAM,IAAI,OAAO;IAIjB,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,OAAO;CAGrB"}
package/lib/logger.js ADDED
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = void 0;
4
+ const level_1 = require("./level");
5
+ class Logger {
6
+ constructor(sink, ns, attributes) {
7
+ this.sink = sink;
8
+ this.ns = ns;
9
+ this.attributes = attributes;
10
+ }
11
+ get level() {
12
+ return level_1.LEVELS.get(this.ns);
13
+ }
14
+ child(nsOrAttributes, attributes) {
15
+ let ns = this.ns;
16
+ if (typeof nsOrAttributes == 'string') {
17
+ ns = ns ? `${ns}:${nsOrAttributes}` : nsOrAttributes;
18
+ }
19
+ else {
20
+ attributes = nsOrAttributes;
21
+ }
22
+ if (this.attributes) {
23
+ if (attributes) {
24
+ attributes = { ...this.attributes, ...attributes };
25
+ }
26
+ else {
27
+ attributes = this.attributes;
28
+ }
29
+ }
30
+ return new Logger(this.sink, ns, attributes);
31
+ }
32
+ write(level, attributes, msg) {
33
+ if (attributes == null)
34
+ return;
35
+ if (level < this.level)
36
+ return;
37
+ if (typeof attributes == 'string') {
38
+ msg = attributes;
39
+ attributes = null;
40
+ }
41
+ if (attributes instanceof Error) {
42
+ attributes = { err: attributes };
43
+ }
44
+ let rec = {
45
+ level,
46
+ time: Date.now(),
47
+ ns: this.ns,
48
+ msg
49
+ };
50
+ addAttributes(this.attributes, rec);
51
+ addAttributes(attributes, rec);
52
+ this.sink(rec);
53
+ }
54
+ trace(attributes, msg) {
55
+ this.write(level_1.LogLevel.TRACE, attributes, msg);
56
+ }
57
+ debug(attributes, msg) {
58
+ this.write(level_1.LogLevel.DEBUG, attributes, msg);
59
+ }
60
+ info(attributes, msg) {
61
+ this.write(level_1.LogLevel.INFO, attributes, msg);
62
+ }
63
+ warn(attributes, msg) {
64
+ this.write(level_1.LogLevel.WARN, attributes, msg);
65
+ }
66
+ error(attributes, msg) {
67
+ this.write(level_1.LogLevel.ERROR, attributes, msg);
68
+ }
69
+ fatal(attributes, msg) {
70
+ this.write(level_1.LogLevel.FATAL, attributes, msg);
71
+ }
72
+ isTrace() {
73
+ return this.level <= level_1.LogLevel.TRACE;
74
+ }
75
+ isDebug() {
76
+ return this.level <= level_1.LogLevel.DEBUG;
77
+ }
78
+ isInfo() {
79
+ return this.level <= level_1.LogLevel.INFO;
80
+ }
81
+ isWarn() {
82
+ return this.level <= level_1.LogLevel.WARN;
83
+ }
84
+ isError() {
85
+ return this.level <= level_1.LogLevel.ERROR;
86
+ }
87
+ isFatal() {
88
+ return this.level <= level_1.LogLevel.FATAL;
89
+ }
90
+ }
91
+ exports.Logger = Logger;
92
+ function addAttributes(src, target) {
93
+ for (let key in src) {
94
+ let val = src[key];
95
+ switch (key) {
96
+ case 'time':
97
+ case 'level':
98
+ case 'ns':
99
+ case 'msg':
100
+ break;
101
+ default:
102
+ target[key] = val;
103
+ }
104
+ }
105
+ }
106
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { LogRecord } from "../logger";
2
+ export declare function jsonLinesStderrSink(rec: LogRecord): void;
3
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/sinks/json.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AAGnC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAExD"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonLinesStderrSink = void 0;
4
+ const util_internal_json_1 = require("@subsquid/util-internal-json");
5
+ const level_1 = require("../level");
6
+ function jsonLinesStderrSink(rec) {
7
+ process.stderr.write(stringify(rec) + '\n');
8
+ }
9
+ exports.jsonLinesStderrSink = jsonLinesStderrSink;
10
+ function stringify(rec) {
11
+ try {
12
+ return JSON.stringify((0, util_internal_json_1.toJSON)(rec));
13
+ }
14
+ catch (e) {
15
+ return stringify({
16
+ ns: 'sys',
17
+ time: Date.now(),
18
+ level: level_1.LogLevel.ERROR,
19
+ msg: `Failed to serialize log record from ${rec.ns}`,
20
+ err: { stack: e.stack || e.toString() }
21
+ });
22
+ }
23
+ }
24
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/sinks/json.ts"],"names":[],"mappings":";;;AAAA,qEAAmD;AACnD,oCAAiC;AAIjC,SAAgB,mBAAmB,CAAC,GAAc;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAC/C,CAAC;AAFD,kDAEC;AAGD,SAAS,SAAS,CAAC,GAAc;IAC7B,IAAI;QACA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAA,2BAAM,EAAC,GAAG,CAAC,CAAC,CAAA;KACrC;IAAC,OAAM,CAAM,EAAE;QACZ,OAAO,SAAS,CAAC;YACb,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;YAChB,KAAK,EAAE,gBAAQ,CAAC,KAAK;YACrB,GAAG,EAAE,uCAAuC,GAAG,CAAC,EAAE,EAAE;YACpD,GAAG,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAU;SACjD,CAAC,CAAA;KACL;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { LogRecord } from "../logger";
2
+ export declare class Printer {
3
+ private out;
4
+ private hasColor;
5
+ private prefix?;
6
+ private visited;
7
+ private style?;
8
+ private seenRecursion;
9
+ constructor(out: (line: string) => void, hasColor: boolean);
10
+ private line;
11
+ private text;
12
+ private begin;
13
+ private end;
14
+ private property;
15
+ print(rec: LogRecord): void;
16
+ reset(): void;
17
+ }
18
+ export declare function prettyStderrSink(rec: LogRecord): void;
19
+ //# sourceMappingURL=pretty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretty.d.ts","sourceRoot":"","sources":["../../src/sinks/pretty.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AAGnC,qBAAa,OAAO;IAMJ,OAAO,CAAC,GAAG;IAA0B,OAAO,CAAC,QAAQ;IALjE,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,KAAK,CAAC,CAA+B;IAC7C,OAAO,CAAC,aAAa,CAAQ;gBAET,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAU,QAAQ,EAAE,OAAO;IAE1E,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,QAAQ;IAmEhB,KAAK,CAAC,GAAG,EAAE,SAAS;IAiCpB,KAAK,IAAI,IAAI;CAMhB;AAkFD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAcrD"}