From cb5d9792d7b3c99e22105e591459bc4ae420ac4e Mon Sep 17 00:00:00 2001 From: winprn Date: Tue, 29 Oct 2024 13:53:09 +0700 Subject: [PATCH] improv: abtract the log to logger package --- packages/logger/package.json | 3 ++- packages/logger/src/index.ts | 2 +- packages/logger/src/log.ts | 28 ++++++++++++++++++++++++++++ packages/logger/src/types.ts | 3 --- packages/logger/tsconfig.json | 2 +- packages/network/package.json | 2 -- packages/network/src/node.ts | 15 +++------------ 7 files changed, 35 insertions(+), 20 deletions(-) create mode 100644 packages/logger/src/log.ts delete mode 100644 packages/logger/src/types.ts diff --git a/packages/logger/package.json b/packages/logger/package.json index a6194ed8..f52dc4a1 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -27,6 +27,7 @@ "test": "vitest" }, "dependencies": { - "setimmediate": "^1.0.5" + "loglevel": "^1.9.2", + "loglevel-plugin-prefix": "^0.8.4" } } diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts index a0c4ebf2..1b9b0e17 100644 --- a/packages/logger/src/index.ts +++ b/packages/logger/src/index.ts @@ -1 +1 @@ -export * from "./types.js"; +export * from "./log.js"; diff --git a/packages/logger/src/log.ts b/packages/logger/src/log.ts new file mode 100644 index 00000000..e05507f4 --- /dev/null +++ b/packages/logger/src/log.ts @@ -0,0 +1,28 @@ +import loglevel from "loglevel"; +import prefix from "loglevel-plugin-prefix"; + +export interface LoggerOptions { + level?: loglevel.LogLevelDesc; +} + +export class Logger { + private log: loglevel.Logger; + // biome-ignore lint/suspicious/noExplicitAny: Do this to allow any method to be called on the logger + [key: string]: any; + + constructor(context: string, level: loglevel.LogLevelDesc = "info") { + this.log = loglevel.getLogger(context); + this.log.setLevel(level); + prefix.reg(loglevel); + prefix.apply(this.log, { + template: "%n", + }); + + for (const method of Object.keys(this.log)) { + const logMethod = this.log[method as keyof loglevel.Logger]; + if (typeof logMethod === "function") { + this[method as string] = logMethod.bind(this.log); + } + } + } +} diff --git a/packages/logger/src/types.ts b/packages/logger/src/types.ts deleted file mode 100644 index 738466eb..00000000 --- a/packages/logger/src/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface LoggerOptions { - level: string; -} diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json index 9cc8b37c..3dfb23cf 100644 --- a/packages/logger/tsconfig.json +++ b/packages/logger/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "outDir": "dist" }, - "include": ["src/**/*.ts"] + "include": ["src/**/*.ts", "src/**/*.js"] } diff --git a/packages/network/package.json b/packages/network/package.json index 4cf631c9..e0f5c032 100644 --- a/packages/network/package.json +++ b/packages/network/package.json @@ -54,8 +54,6 @@ "it-map": "^3.1.1", "it-pipe": "^3.0.1", "libp2p": "^2.1.6", - "loglevel": "^1.9.2", - "loglevel-plugin-prefix": "^0.8.4", "ts-proto": "^2.2.4", "uint8arrays": "^5.1.0" } diff --git a/packages/network/src/node.ts b/packages/network/src/node.ts index d60e4720..9a8096ad 100644 --- a/packages/network/src/node.ts +++ b/packages/network/src/node.ts @@ -27,17 +27,15 @@ import { webSockets } from "@libp2p/websockets"; import * as filters from "@libp2p/websockets/filters"; import { webTransport } from "@libp2p/webtransport"; import { multiaddr } from "@multiformats/multiaddr"; -import type { LoggerOptions } from "@topology-foundation/logger"; import { type Libp2p, createLibp2p } from "libp2p"; -import loglevel from "loglevel"; -import prefix from "loglevel-plugin-prefix"; import { fromString as uint8ArrayFromString } from "uint8arrays/from-string"; import { Message } from "./proto/messages_pb.js"; import { uint8ArrayToStream } from "./stream.js"; +import { Logger, type LoggerOptions } from "@topology-foundation/logger"; export * from "./stream.js"; -let log: loglevel.Logger; +let log: Logger; // snake_casing to match the JSON config export interface TopologyNetworkNodeConfig { @@ -58,14 +56,7 @@ export class TopologyNetworkNode { constructor(config?: TopologyNetworkNodeConfig) { this._config = config; - log = loglevel.getLogger("topology::network"); - log.setLevel( - (this._config?.log_config?.level as loglevel.LogLevelDesc) || "info", - ); - prefix.reg(loglevel); - prefix.apply(log, { - template: "%n", - }); + log = new Logger("topology::network", config?.log_config?.level); } async start() {