@ubean/shared 0.3.4 → 0.3.6

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.
@@ -1,4 +1,4 @@
1
- import { n as getLogger } from "../logger-CG0K8cWb.js";
1
+ import { n as getLogger } from "../logger-C9j4b6yh.js";
2
2
  //#region src/logger/hono.ts
3
3
  /**
4
4
  * 判断路径是否应被跳过。
@@ -3,9 +3,11 @@ import { i as UbeanLoggerOptions, n as RequestLoggerOptions, r as UbeanLogger, t
3
3
  /**
4
4
  * 创建一个 ubean 命名的 tslog logger(默认 name 为 `ubean`)。
5
5
  *
6
- * - 未显式提供 `minLevel` 时读取 `LOG_LEVEL`/`TSLOG_LEVEL` 环境变量
7
- * - 输出格式沿用 tslog 默认:交互式终端彩色 pretty,管道/CI 自动去色;需要结构化 JSON 时显式
8
- * `{ type: 'json' }` 或设 `TSLOG_TYPE=json`
6
+ * - 未显式提供 `minLevel` 时读取 `LOG_LEVEL`/`TSLOG_LEVEL` 环境变量,
7
+ * 都没有则默认 `info`(debug/silly 需显式打开)
8
+ * - pretty 输出默认仅消息(精简模板);debug 模式或显式 `pretty.template` 时按需覆盖,
9
+ * 交互式终端彩色、管道/CI 自动去色
10
+ * - 需要结构化 JSON 时显式 `{ type: 'json' }` 或设 `TSLOG_TYPE=json`
9
11
  *
10
12
  * @example
11
13
  * ```ts
@@ -30,5 +32,18 @@ declare const logger: UbeanLogger;
30
32
  * ```
31
33
  */
32
34
  declare function getLogger(scope?: string, options?: UbeanLoggerOptions): UbeanLogger;
35
+ /**
36
+ * 切换 debug 日志模式,对所有已创建的 logger 实例(含子 logger)即时生效:
37
+ * - `true`:输出详细日志(日期 + 等级 + 调用位置 + logger 名)
38
+ * - `false`:恢复精简输出(仅消息)
39
+ *
40
+ * 供 CLI 在解析 `--debug` 后调用。
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * setDebugLogging(process.argv.includes('--debug'));
45
+ * ```
46
+ */
47
+ declare function setDebugLogging(enabled: boolean): void;
33
48
  //#endregion
34
- export { type LogLevelName, type RequestLoggerOptions, type UbeanLogger, type UbeanLoggerOptions, createUbeanLogger, getLogger, logger };
49
+ export { type LogLevelName, type RequestLoggerOptions, type UbeanLogger, type UbeanLoggerOptions, createUbeanLogger, getLogger, logger, setDebugLogging };
@@ -1,2 +1,2 @@
1
- import { n as getLogger, r as logger, t as createUbeanLogger } from "../logger-CG0K8cWb.js";
2
- export { createUbeanLogger, getLogger, logger };
1
+ import { i as setDebugLogging, n as getLogger, r as logger, t as createUbeanLogger } from "../logger-C9j4b6yh.js";
2
+ export { createUbeanLogger, getLogger, logger, setDebugLogging };
@@ -0,0 +1,134 @@
1
+ import { Logger } from "tslog";
2
+ //#region src/logger/logger.ts
3
+ const DEFAULT_NAME = "ubean";
4
+ /**
5
+ * 默认精简模板:空模板 → 仅输出消息(无日期 / 等级 / 路径),适合 CLI 日常使用。
6
+ * 需要完整上下文(日期 + 调用位置 + logger 名)时,用 `setDebugLogging(true)` 切换。
7
+ */
8
+ const DEFAULT_PRETTY_TEMPLATE = "";
9
+ /**
10
+ * debug 模式的详细模板:日期 + 等级 + 调用位置 + logger 名 + 消息。
11
+ * 仅在显式开启 debug 日志时使用(见 {@link setDebugLogging})。
12
+ */
13
+ const DEBUG_PRETTY_TEMPLATE = "{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}} {{logLevelName}} {{filePathWithLine}} {{nameWithDelimiterPrefix}} ";
14
+ /** 未显式配置时的默认等级:info(debug/silly 需通过 LOG_LEVEL 打开) */
15
+ const DEFAULT_MIN_LEVEL = "INFO";
16
+ /** 是否处于 debug 模式(输出详细模板) */
17
+ let debugMode = false;
18
+ /** 已创建的 logger 实例注册表,`setDebugLogging` 切换模板时统一更新(含子 logger) */
19
+ const instances = /* @__PURE__ */ new Set();
20
+ function registerInstance(instance) {
21
+ instances.add(instance);
22
+ return instance;
23
+ }
24
+ /**
25
+ * 运行时切换单个实例的栈捕获。
26
+ *
27
+ * tslog 在构造时一次性计算 `captureStackForMeta`(`_shouldCaptureStack()`),之后仅在每次
28
+ * 日志调用时读取该标志决定是否解析调用位置。因此运行期切换模板时,需要同步刷新这个内部
29
+ * 标志(否则 debug 模板中的 `{{filePathWithLine}}` 渲染为空)。该属性为 tslog 私有字段,
30
+ * 这里通过受控的类型断言访问——本模块是 tslog 的唯一集成点,且 tslog 版本已锁定。
31
+ */
32
+ function setStackCapture(instance, enabled) {
33
+ instance.settings = {
34
+ ...instance.settings,
35
+ stack: {
36
+ ...instance.settings.stack,
37
+ capture: enabled ? "full" : "auto"
38
+ }
39
+ };
40
+ instance.captureStackForMeta = enabled;
41
+ }
42
+ /** 按当前 debug 模式刷新单个实例的 pretty 模板与栈捕获 */
43
+ function applyDebugMode(instance) {
44
+ instance.settings = {
45
+ ...instance.settings,
46
+ pretty: {
47
+ ...instance.settings.pretty,
48
+ template: debugMode ? DEBUG_PRETTY_TEMPLATE : DEFAULT_PRETTY_TEMPLATE
49
+ }
50
+ };
51
+ setStackCapture(instance, debugMode);
52
+ }
53
+ /**
54
+ * 从环境变量解析日志等级:
55
+ * 1. `LOG_LEVEL`(ubean 约定,友好别名)
56
+ * 2. `TSLOG_LEVEL`(tslog 原生)
57
+ *
58
+ * 返回 undefined 时沿用 tslog 默认 minLevel。
59
+ */
60
+ function getLogLevelFromEnv() {
61
+ if (typeof process === "undefined" || !process.env) return void 0;
62
+ const value = process.env.LOG_LEVEL ?? process.env.TSLOG_LEVEL;
63
+ if (!value) return void 0;
64
+ return value;
65
+ }
66
+ /**
67
+ * 创建一个 ubean 命名的 tslog logger(默认 name 为 `ubean`)。
68
+ *
69
+ * - 未显式提供 `minLevel` 时读取 `LOG_LEVEL`/`TSLOG_LEVEL` 环境变量,
70
+ * 都没有则默认 `info`(debug/silly 需显式打开)
71
+ * - pretty 输出默认仅消息(精简模板);debug 模式或显式 `pretty.template` 时按需覆盖,
72
+ * 交互式终端彩色、管道/CI 自动去色
73
+ * - 需要结构化 JSON 时显式 `{ type: 'json' }` 或设 `TSLOG_TYPE=json`
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * const log = createUbeanLogger({ name: 'api' });
78
+ * log.info({ port: 3000 }, 'server started');
79
+ * ```
80
+ */
81
+ function createUbeanLogger(options = {}) {
82
+ const minLevel = options.minLevel ?? getLogLevelFromEnv() ?? DEFAULT_MIN_LEVEL;
83
+ return registerInstance(new Logger({
84
+ name: DEFAULT_NAME,
85
+ ...options,
86
+ pretty: {
87
+ template: debugMode ? DEBUG_PRETTY_TEMPLATE : DEFAULT_PRETTY_TEMPLATE,
88
+ timeZone: "local",
89
+ ...options.pretty
90
+ },
91
+ minLevel
92
+ }));
93
+ }
94
+ /** ubean 全局默认 logger(供应用侧 `import { logger } from 'ubean'` 使用) */
95
+ const logger = createUbeanLogger();
96
+ /**
97
+ * 获取命名(scope)logger。
98
+ *
99
+ * - 不传 scope 时返回全局默认 `logger`
100
+ * - 传 scope 时返回其子 logger(name 组合为 `ubean:<scope>`,如 `getLogger('cli')` → `ubean:cli`),
101
+ * 继承父 logger 的 settings/minLevel,可通过 `options` 覆盖
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * const cli = getLogger('cli');
106
+ * cli.info('building...');
107
+ * ```
108
+ */
109
+ function getLogger(scope, options = {}) {
110
+ if (!scope) return logger;
111
+ return registerInstance(logger.getSubLogger({
112
+ name: scope,
113
+ ...options
114
+ }));
115
+ }
116
+ /**
117
+ * 切换 debug 日志模式,对所有已创建的 logger 实例(含子 logger)即时生效:
118
+ * - `true`:输出详细日志(日期 + 等级 + 调用位置 + logger 名)
119
+ * - `false`:恢复精简输出(仅消息)
120
+ *
121
+ * 供 CLI 在解析 `--debug` 后调用。
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * setDebugLogging(process.argv.includes('--debug'));
126
+ * ```
127
+ */
128
+ function setDebugLogging(enabled) {
129
+ if (debugMode === enabled) return;
130
+ debugMode = enabled;
131
+ for (const instance of instances) applyDebugMode(instance);
132
+ }
133
+ //#endregion
134
+ export { setDebugLogging as i, getLogger as n, logger as r, createUbeanLogger as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubean/shared",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "Shared protocol types, errors, env and universal utilities for ubean",
5
5
  "files": [
6
6
  "dist"
@@ -1,61 +0,0 @@
1
- import { Logger } from "tslog";
2
- //#region src/logger/logger.ts
3
- const DEFAULT_NAME = "ubean";
4
- /**
5
- * 从环境变量解析日志等级:
6
- * 1. `LOG_LEVEL`(ubean 约定,友好别名)
7
- * 2. `TSLOG_LEVEL`(tslog 原生)
8
- *
9
- * 返回 undefined 时沿用 tslog 默认 minLevel。
10
- */
11
- function getLogLevelFromEnv() {
12
- if (typeof process === "undefined" || !process.env) return void 0;
13
- const value = process.env.LOG_LEVEL ?? process.env.TSLOG_LEVEL;
14
- if (!value) return void 0;
15
- return value;
16
- }
17
- /**
18
- * 创建一个 ubean 命名的 tslog logger(默认 name 为 `ubean`)。
19
- *
20
- * - 未显式提供 `minLevel` 时读取 `LOG_LEVEL`/`TSLOG_LEVEL` 环境变量
21
- * - 输出格式沿用 tslog 默认:交互式终端彩色 pretty,管道/CI 自动去色;需要结构化 JSON 时显式
22
- * `{ type: 'json' }` 或设 `TSLOG_TYPE=json`
23
- *
24
- * @example
25
- * ```ts
26
- * const log = createUbeanLogger({ name: 'api' });
27
- * log.info({ port: 3000 }, 'server started');
28
- * ```
29
- */
30
- function createUbeanLogger(options = {}) {
31
- const minLevel = options.minLevel ?? getLogLevelFromEnv();
32
- return new Logger({
33
- name: DEFAULT_NAME,
34
- ...options,
35
- minLevel
36
- });
37
- }
38
- /** ubean 全局默认 logger(供应用侧 `import { logger } from 'ubean'` 使用) */
39
- const logger = createUbeanLogger();
40
- /**
41
- * 获取命名(scope)logger。
42
- *
43
- * - 不传 scope 时返回全局默认 `logger`
44
- * - 传 scope 时返回其子 logger(name 组合为 `ubean:<scope>`,如 `getLogger('cli')` → `ubean:cli`),
45
- * 继承父 logger 的 settings/minLevel,可通过 `options` 覆盖
46
- *
47
- * @example
48
- * ```ts
49
- * const cli = getLogger('cli');
50
- * cli.info('building...');
51
- * ```
52
- */
53
- function getLogger(scope, options = {}) {
54
- if (!scope) return logger;
55
- return logger.getSubLogger({
56
- name: scope,
57
- ...options
58
- });
59
- }
60
- //#endregion
61
- export { getLogger as n, logger as r, createUbeanLogger as t };