@qianxude/logger 0.1.4
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 +352 -0
- package/dist/env.d.ts +174 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +219 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/index.d.ts +5 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +2 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/pino-factory.d.ts +96 -0
- package/dist/pino-factory.d.ts.map +1 -0
- package/dist/pino-factory.js +167 -0
- package/dist/pino-factory.js.map +1 -0
- package/dist/pino-logger.d.ts +59 -0
- package/dist/pino-logger.d.ts.map +1 -0
- package/dist/pino-logger.js +98 -0
- package/dist/pino-logger.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/pino-roll.d.ts +40 -0
- package/dist/types/pino-roll.d.ts.map +1 -0
- package/dist/types/pino-roll.js +10 -0
- package/dist/types/pino-roll.js.map +1 -0
- package/package.json +38 -0
package/dist/env.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variable parsing for logger options.
|
|
3
|
+
*
|
|
4
|
+
* This module provides conventions and parsing functions for configuring
|
|
5
|
+
* logger options via environment variables.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Environment variable names for logger configuration.
|
|
9
|
+
*/
|
|
10
|
+
export const LOG_ENV_VARS = {
|
|
11
|
+
// Common/Pretty options
|
|
12
|
+
LOG_LEVEL: 'LOG_LEVEL',
|
|
13
|
+
LOG_COLORIZE: 'LOG_COLORIZE',
|
|
14
|
+
LOG_TRANSLATE_TIME: 'LOG_TRANSLATE_TIME',
|
|
15
|
+
// File roll options
|
|
16
|
+
LOG_FILE: 'LOG_FILE',
|
|
17
|
+
LOG_FILE_SIZE: 'LOG_FILE_SIZE',
|
|
18
|
+
LOG_FILE_FREQUENCY: 'LOG_FILE_FREQUENCY',
|
|
19
|
+
LOG_FILE_EXTENSION: 'LOG_FILE_EXTENSION',
|
|
20
|
+
LOG_FILE_SYMLINK: 'LOG_FILE_SYMLINK',
|
|
21
|
+
LOG_FILE_LIMIT_COUNT: 'LOG_FILE_LIMIT_COUNT',
|
|
22
|
+
LOG_FILE_DATE_FORMAT: 'LOG_FILE_DATE_FORMAT',
|
|
23
|
+
LOG_FILE_MKDIR: 'LOG_FILE_MKDIR',
|
|
24
|
+
};
|
|
25
|
+
/** Valid log levels for validation */
|
|
26
|
+
const VALID_LOG_LEVELS = ['fatal', 'error', 'warn', 'info', 'debug', 'trace'];
|
|
27
|
+
/**
|
|
28
|
+
* Parse a boolean from environment variable string.
|
|
29
|
+
*
|
|
30
|
+
* @param value - The environment variable value
|
|
31
|
+
* @param defaultValue - Default value if not set
|
|
32
|
+
* @returns The parsed boolean
|
|
33
|
+
*/
|
|
34
|
+
function parseEnvBoolean(value, defaultValue) {
|
|
35
|
+
if (value === undefined) {
|
|
36
|
+
return defaultValue;
|
|
37
|
+
}
|
|
38
|
+
const normalized = value.toLowerCase();
|
|
39
|
+
if (normalized === 'true') {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
if (normalized === 'false') {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`Invalid boolean value '${value}'. Must be 'true' or 'false'.`);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse a number from environment variable string.
|
|
49
|
+
*
|
|
50
|
+
* @param value - The environment variable value
|
|
51
|
+
* @param defaultValue - Default value if not set (undefined means optional)
|
|
52
|
+
* @returns The parsed number or undefined if not set and no default
|
|
53
|
+
*/
|
|
54
|
+
function parseEnvNumber(value, defaultValue) {
|
|
55
|
+
if (value === undefined) {
|
|
56
|
+
return defaultValue;
|
|
57
|
+
}
|
|
58
|
+
const parsed = Number(value);
|
|
59
|
+
if (Number.isNaN(parsed)) {
|
|
60
|
+
throw new Error(`Invalid number value '${value}'. Must be a valid number.`);
|
|
61
|
+
}
|
|
62
|
+
return parsed;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parse a log level from environment variable string.
|
|
66
|
+
*
|
|
67
|
+
* @param value - The environment variable value
|
|
68
|
+
* @returns The validated LogLevel or undefined if not set
|
|
69
|
+
* @throws Error if value is invalid
|
|
70
|
+
*/
|
|
71
|
+
function parseEnvLogLevel(value) {
|
|
72
|
+
if (value === undefined) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const normalized = value.toLowerCase();
|
|
76
|
+
if (!VALID_LOG_LEVELS.includes(normalized)) {
|
|
77
|
+
throw new Error(`Invalid LOG_LEVEL value '${value}'. Must be one of: ${VALID_LOG_LEVELS.join(', ')}.`);
|
|
78
|
+
}
|
|
79
|
+
return normalized;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Parse frequency option from environment variable string.
|
|
83
|
+
*
|
|
84
|
+
* @param value - The environment variable value
|
|
85
|
+
* @returns The parsed frequency value or undefined if not set
|
|
86
|
+
* @throws Error if value is invalid
|
|
87
|
+
*/
|
|
88
|
+
function parseEnvFrequency(value) {
|
|
89
|
+
if (value === undefined) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const normalized = value.toLowerCase();
|
|
93
|
+
if (normalized === 'daily' || normalized === 'hourly') {
|
|
94
|
+
return normalized;
|
|
95
|
+
}
|
|
96
|
+
// Try to parse as number (milliseconds)
|
|
97
|
+
const parsed = Number(value);
|
|
98
|
+
if (Number.isNaN(parsed)) {
|
|
99
|
+
throw new Error(`Invalid LOG_FILE_FREQUENCY value '${value}'. Must be 'daily', 'hourly', or a number (milliseconds).`);
|
|
100
|
+
}
|
|
101
|
+
return parsed;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Parse file size option from environment variable string.
|
|
105
|
+
*
|
|
106
|
+
* Accepts formats like '10m', '100k', '1g', or plain number (MB).
|
|
107
|
+
*
|
|
108
|
+
* @param value - The environment variable value
|
|
109
|
+
* @returns The parsed size value or undefined if not set
|
|
110
|
+
*/
|
|
111
|
+
function parseEnvSize(value) {
|
|
112
|
+
if (value === undefined) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
// Check if it's a string with unit suffix (k, m, g)
|
|
116
|
+
const match = value.match(/^(\d+(?:\.\d+)?)([kmg])?$/i);
|
|
117
|
+
if (!match) {
|
|
118
|
+
throw new Error(`Invalid LOG_FILE_SIZE value '${value}'. Must be a number or string like '10m', '100k', '1g'.`);
|
|
119
|
+
}
|
|
120
|
+
// If has suffix, return as string; otherwise return as number
|
|
121
|
+
if (match[2]) {
|
|
122
|
+
return value.toLowerCase();
|
|
123
|
+
}
|
|
124
|
+
return Number(value);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Parse PrettyPinoOptions from environment variables.
|
|
128
|
+
*
|
|
129
|
+
* All environment variables are optional.
|
|
130
|
+
*
|
|
131
|
+
* ## Optional Environment Variables
|
|
132
|
+
*
|
|
133
|
+
* - `LOG_LEVEL`: Log level ('fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace'), default: 'info'
|
|
134
|
+
* - `LOG_COLORIZE`: Enable colorized output ('true' | 'false'), default: true
|
|
135
|
+
* - `LOG_TRANSLATE_TIME`: Time format string, default: 'SYS:standard'
|
|
136
|
+
*
|
|
137
|
+
* @param env - Environment variables object (defaults to process.env)
|
|
138
|
+
* @returns Partial PrettyPinoOptions parsed from environment
|
|
139
|
+
* @throws Error if any environment variable value is invalid
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* const options = parsePrettyPinoOptionsEnv(process.env);
|
|
144
|
+
* const logger = createPrettyPino(options);
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export function parsePrettyPinoOptionsEnv(env = process.env) {
|
|
148
|
+
const options = {};
|
|
149
|
+
const level = parseEnvLogLevel(env[LOG_ENV_VARS.LOG_LEVEL]);
|
|
150
|
+
if (level !== undefined) {
|
|
151
|
+
options.level = level;
|
|
152
|
+
}
|
|
153
|
+
// For boolean options, only set if the env var is defined
|
|
154
|
+
if (env[LOG_ENV_VARS.LOG_COLORIZE] !== undefined) {
|
|
155
|
+
options.colorize = parseEnvBoolean(env[LOG_ENV_VARS.LOG_COLORIZE], true);
|
|
156
|
+
}
|
|
157
|
+
if (env[LOG_ENV_VARS.LOG_TRANSLATE_TIME] !== undefined) {
|
|
158
|
+
options.translateTime = env[LOG_ENV_VARS.LOG_TRANSLATE_TIME];
|
|
159
|
+
}
|
|
160
|
+
return options;
|
|
161
|
+
}
|
|
162
|
+
export function parsePinoRollOptionsEnv(env = process.env, options) {
|
|
163
|
+
const result = {};
|
|
164
|
+
const invalidVars = [];
|
|
165
|
+
const logFile = env[LOG_ENV_VARS.LOG_FILE];
|
|
166
|
+
if (logFile !== undefined && logFile !== '') {
|
|
167
|
+
result.file = logFile;
|
|
168
|
+
}
|
|
169
|
+
const size = parseEnvSize(env[LOG_ENV_VARS.LOG_FILE_SIZE]);
|
|
170
|
+
if (size !== undefined) {
|
|
171
|
+
result.size = size;
|
|
172
|
+
}
|
|
173
|
+
const frequency = parseEnvFrequency(env[LOG_ENV_VARS.LOG_FILE_FREQUENCY]);
|
|
174
|
+
if (frequency !== undefined) {
|
|
175
|
+
result.frequency = frequency;
|
|
176
|
+
}
|
|
177
|
+
if (env[LOG_ENV_VARS.LOG_FILE_EXTENSION] !== undefined) {
|
|
178
|
+
result.extension = env[LOG_ENV_VARS.LOG_FILE_EXTENSION];
|
|
179
|
+
}
|
|
180
|
+
if (env[LOG_ENV_VARS.LOG_FILE_SYMLINK] !== undefined) {
|
|
181
|
+
result.symlink = parseEnvBoolean(env[LOG_ENV_VARS.LOG_FILE_SYMLINK], true);
|
|
182
|
+
}
|
|
183
|
+
const limitCount = parseEnvNumber(env[LOG_ENV_VARS.LOG_FILE_LIMIT_COUNT]);
|
|
184
|
+
if (limitCount !== undefined) {
|
|
185
|
+
result.limit = { count: limitCount };
|
|
186
|
+
}
|
|
187
|
+
if (env[LOG_ENV_VARS.LOG_FILE_DATE_FORMAT] !== undefined) {
|
|
188
|
+
result.dateFormat = env[LOG_ENV_VARS.LOG_FILE_DATE_FORMAT];
|
|
189
|
+
}
|
|
190
|
+
if (env[LOG_ENV_VARS.LOG_FILE_MKDIR] !== undefined) {
|
|
191
|
+
result.mkdir = parseEnvBoolean(env[LOG_ENV_VARS.LOG_FILE_MKDIR], true);
|
|
192
|
+
}
|
|
193
|
+
// Validate required env var: LOG_FILE
|
|
194
|
+
if (result.file === undefined) {
|
|
195
|
+
invalidVars.push(LOG_ENV_VARS.LOG_FILE);
|
|
196
|
+
}
|
|
197
|
+
// Handle missing required vars
|
|
198
|
+
if (invalidVars.length > 0) {
|
|
199
|
+
if (options?.noThrow) {
|
|
200
|
+
result._invalid = true;
|
|
201
|
+
result._invalidVars = invalidVars;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
throw new Error(`Missing required environment variable(s): ${invalidVars.join(', ')}. ` +
|
|
205
|
+
`LOG_FILE is required for file-based logging.`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
export function parseDuoTargetPinoOptionsEnv(env = process.env, options) {
|
|
211
|
+
const prettyOptions = parsePrettyPinoOptionsEnv(env);
|
|
212
|
+
const rollOptions = parsePinoRollOptionsEnv(env, options ?? {});
|
|
213
|
+
const result = {
|
|
214
|
+
...prettyOptions,
|
|
215
|
+
...rollOptions,
|
|
216
|
+
};
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @qianxude/logger
|
|
3
|
+
*
|
|
4
|
+
* Production-ready pino-based logger implementations for qianxude stack.
|
|
5
|
+
*/
|
|
6
|
+
export { createPrettyPino, createDuoTargetPino, createPino, createRollFilePino, type PrettyPinoOptions, type DuoTargetPinoOptions, } from './pino-factory.js';
|
|
7
|
+
export { PinoLogger, wrapPinoLogger } from './pino-logger.js';
|
|
8
|
+
export type { PinoRollOptions, PinoRollLimitOptions } from './types/index.js';
|
|
9
|
+
export { parsePrettyPinoOptionsEnv, parsePinoRollOptionsEnv, parseDuoTargetPinoOptionsEnv, LOG_ENV_VARS, } from './env.js';
|
|
10
|
+
export type { ParseEnvOptions, ParseEnvMeta, ParsedPinoRollOptions, ParsedDuoTargetPinoOptions, } from './env.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG9D,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG9E,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,YAAY,GACb,MAAM,UAAU,CAAC;AAGlB,YAAY,EACV,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @qianxude/logger
|
|
3
|
+
*
|
|
4
|
+
* Production-ready pino-based logger implementations for qianxude stack.
|
|
5
|
+
*/
|
|
6
|
+
// Factory functions for creating raw pino loggers
|
|
7
|
+
export { createPrettyPino, createDuoTargetPino, createPino, createRollFilePino, } from './pino-factory.js';
|
|
8
|
+
// PinoLogger class and wrapper function
|
|
9
|
+
export { PinoLogger, wrapPinoLogger } from './pino-logger.js';
|
|
10
|
+
// Environment variable parsing
|
|
11
|
+
export { parsePrettyPinoOptionsEnv, parsePinoRollOptionsEnv, parseDuoTargetPinoOptionsEnv, LOG_ENV_VARS, } from './env.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kDAAkD;AAClD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC;AAE3B,wCAAwC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAK9D,+BAA+B;AAC/B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,YAAY,GACb,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
import type { PrettyOptions } from 'pino-pretty';
|
|
3
|
+
import type { LogLevel } from '@qianxude/shared';
|
|
4
|
+
import type { PinoRollOptions } from './types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Options for creating a pretty console pino logger.
|
|
7
|
+
*/
|
|
8
|
+
export interface PrettyPinoOptions {
|
|
9
|
+
/** Minimum log level (default: 'info') */
|
|
10
|
+
level?: LogLevel;
|
|
11
|
+
/** Enable colorized output (default: true) */
|
|
12
|
+
colorize?: boolean;
|
|
13
|
+
/** Time format for timestamps (default: 'SYS:standard') */
|
|
14
|
+
translateTime?: string;
|
|
15
|
+
/** Custom pino-pretty options */
|
|
16
|
+
prettyOptions?: PrettyOptions;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Options for creating a duo-target pino logger (console + file with rotation).
|
|
20
|
+
*/
|
|
21
|
+
export interface DuoTargetPinoOptions extends PrettyPinoOptions, PinoRollOptions {
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a pretty console pino logger for development.
|
|
25
|
+
*
|
|
26
|
+
* @param options - Configuration options
|
|
27
|
+
* @returns A pino.Logger instance configured for pretty console output
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* import { createPrettyPino } from '@qianxude/logger';
|
|
32
|
+
*
|
|
33
|
+
* const logger = createPrettyPino({ level: 'debug' });
|
|
34
|
+
* logger.info({ userId: 123 }, 'User logged in');
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function createPrettyPino(options?: PrettyPinoOptions): pino.Logger;
|
|
38
|
+
/**
|
|
39
|
+
* Create a duo-target pino logger that outputs to both console (pretty) and file (with rotation).
|
|
40
|
+
*
|
|
41
|
+
* @param options - Configuration options including file path and rotation settings
|
|
42
|
+
* @returns A pino.Logger instance configured for dual output
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { createDuoTargetPino } from '@qianxude/logger';
|
|
47
|
+
*
|
|
48
|
+
* const logger = createDuoTargetPino({
|
|
49
|
+
* level: 'info',
|
|
50
|
+
* file: './logs/app.log',
|
|
51
|
+
* frequency: 'daily',
|
|
52
|
+
* limit: { count: 7 }, // Keep 7 days of logs
|
|
53
|
+
* });
|
|
54
|
+
* logger.info({ userId: 123 }, 'User logged in');
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function createDuoTargetPino(options: DuoTargetPinoOptions): pino.Logger;
|
|
58
|
+
/**
|
|
59
|
+
* Create a pino logger with custom configuration.
|
|
60
|
+
*
|
|
61
|
+
* @param options - Pino logger options
|
|
62
|
+
* @returns A pino.Logger instance
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* import { createPino } from '@qianxude/logger';
|
|
67
|
+
*
|
|
68
|
+
* const logger = createPino({
|
|
69
|
+
* level: 'debug',
|
|
70
|
+
* base: { service: 'my-service' },
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function createPino(options?: pino.LoggerOptions): pino.Logger;
|
|
75
|
+
/**
|
|
76
|
+
* Create a pino logger with a single file transport (with rotation).
|
|
77
|
+
*
|
|
78
|
+
* @param options - Configuration options including file path and rotation settings
|
|
79
|
+
* @returns A pino.Logger instance configured for file output only
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* import { createRollFilePino } from '@qianxude/logger';
|
|
84
|
+
*
|
|
85
|
+
* const logger = createRollFilePino({
|
|
86
|
+
* level: 'info',
|
|
87
|
+
* file: './logs/app.log',
|
|
88
|
+
* frequency: 'daily',
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function createRollFilePino(options: PinoRollOptions & {
|
|
93
|
+
level?: LogLevel;
|
|
94
|
+
file: string;
|
|
95
|
+
}): pino.Logger;
|
|
96
|
+
//# sourceMappingURL=pino-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pino-factory.d.ts","sourceRoot":"","sources":["../src/pino-factory.ts"],"names":[],"mappings":"AAAA,OAAO,IAAgC,MAAM,MAAM,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAkBxD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB,EAAE,eAAe;CAAG;AAenF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI,CAAC,MAAM,CAmB7E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAiD9E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,IAAI,CAAC,aAAkB,GAAG,IAAI,CAAC,MAAM,CAExE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,GAAG;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5D,IAAI,CAAC,MAAM,CA4Bb"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a transport target to its absolute path.
|
|
4
|
+
* Required for Bun workspace compatibility where pino's default resolution fails
|
|
5
|
+
* due to symlinked node_modules structure.
|
|
6
|
+
*
|
|
7
|
+
* @param target - The transport target package name or path
|
|
8
|
+
* @returns The resolved absolute path, or the original target if resolution fails
|
|
9
|
+
*/
|
|
10
|
+
function resolveTransportTarget(target) {
|
|
11
|
+
try {
|
|
12
|
+
return import.meta.resolve(target);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return target; // fallback to original if resolution fails (e.g., already absolute path)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Pino level mapping to match our LogLevel.
|
|
20
|
+
* Pino uses numeric levels: trace=10, debug=20, info=30, warn=40, error=50, fatal=60.
|
|
21
|
+
*/
|
|
22
|
+
const LOG_LEVEL_MAP = {
|
|
23
|
+
trace: 'trace',
|
|
24
|
+
debug: 'debug',
|
|
25
|
+
info: 'info',
|
|
26
|
+
warn: 'warn',
|
|
27
|
+
error: 'error',
|
|
28
|
+
fatal: 'fatal',
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Create a pretty console pino logger for development.
|
|
32
|
+
*
|
|
33
|
+
* @param options - Configuration options
|
|
34
|
+
* @returns A pino.Logger instance configured for pretty console output
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* import { createPrettyPino } from '@qianxude/logger';
|
|
39
|
+
*
|
|
40
|
+
* const logger = createPrettyPino({ level: 'debug' });
|
|
41
|
+
* logger.info({ userId: 123 }, 'User logged in');
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function createPrettyPino(options = {}) {
|
|
45
|
+
const { level = 'info', colorize = true, translateTime = 'SYS:standard', prettyOptions = {}, } = options;
|
|
46
|
+
return pino({
|
|
47
|
+
level: LOG_LEVEL_MAP[level],
|
|
48
|
+
transport: {
|
|
49
|
+
target: resolveTransportTarget('pino-pretty'),
|
|
50
|
+
options: {
|
|
51
|
+
colorize,
|
|
52
|
+
translateTime,
|
|
53
|
+
...prettyOptions,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create a duo-target pino logger that outputs to both console (pretty) and file (with rotation).
|
|
60
|
+
*
|
|
61
|
+
* @param options - Configuration options including file path and rotation settings
|
|
62
|
+
* @returns A pino.Logger instance configured for dual output
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* import { createDuoTargetPino } from '@qianxude/logger';
|
|
67
|
+
*
|
|
68
|
+
* const logger = createDuoTargetPino({
|
|
69
|
+
* level: 'info',
|
|
70
|
+
* file: './logs/app.log',
|
|
71
|
+
* frequency: 'daily',
|
|
72
|
+
* limit: { count: 7 }, // Keep 7 days of logs
|
|
73
|
+
* });
|
|
74
|
+
* logger.info({ userId: 123 }, 'User logged in');
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export function createDuoTargetPino(options) {
|
|
78
|
+
const { level = 'info', file, colorize = true, translateTime = 'SYS:standard', frequency, size, mkdir = true, symlink = true, limit, prettyOptions = {}, } = options;
|
|
79
|
+
// Build pino-roll options
|
|
80
|
+
const rollOptions = {
|
|
81
|
+
file,
|
|
82
|
+
mkdir,
|
|
83
|
+
symlink,
|
|
84
|
+
...(frequency !== undefined && { frequency }),
|
|
85
|
+
...(size !== undefined && { size }),
|
|
86
|
+
...(limit !== undefined && { limit }),
|
|
87
|
+
};
|
|
88
|
+
const prettyTargetOptions = {
|
|
89
|
+
target: resolveTransportTarget('pino-pretty'),
|
|
90
|
+
level: LOG_LEVEL_MAP[level],
|
|
91
|
+
options: {
|
|
92
|
+
colorize,
|
|
93
|
+
translateTime,
|
|
94
|
+
...prettyOptions,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
const rollTargetOptions = {
|
|
98
|
+
target: resolveTransportTarget('pino-roll'),
|
|
99
|
+
level: LOG_LEVEL_MAP[level],
|
|
100
|
+
options: rollOptions,
|
|
101
|
+
};
|
|
102
|
+
return pino({
|
|
103
|
+
level: LOG_LEVEL_MAP[level],
|
|
104
|
+
transport: {
|
|
105
|
+
targets: [
|
|
106
|
+
prettyTargetOptions,
|
|
107
|
+
rollTargetOptions,
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create a pino logger with custom configuration.
|
|
114
|
+
*
|
|
115
|
+
* @param options - Pino logger options
|
|
116
|
+
* @returns A pino.Logger instance
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```ts
|
|
120
|
+
* import { createPino } from '@qianxude/logger';
|
|
121
|
+
*
|
|
122
|
+
* const logger = createPino({
|
|
123
|
+
* level: 'debug',
|
|
124
|
+
* base: { service: 'my-service' },
|
|
125
|
+
* });
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export function createPino(options = {}) {
|
|
129
|
+
return pino(options);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Create a pino logger with a single file transport (with rotation).
|
|
133
|
+
*
|
|
134
|
+
* @param options - Configuration options including file path and rotation settings
|
|
135
|
+
* @returns A pino.Logger instance configured for file output only
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* import { createRollFilePino } from '@qianxude/logger';
|
|
140
|
+
*
|
|
141
|
+
* const logger = createRollFilePino({
|
|
142
|
+
* level: 'info',
|
|
143
|
+
* file: './logs/app.log',
|
|
144
|
+
* frequency: 'daily',
|
|
145
|
+
* });
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export function createRollFilePino(options) {
|
|
149
|
+
const { level = 'info', file, frequency, size, mkdir = true, symlink = true, limit, } = options;
|
|
150
|
+
// Build pino-roll options
|
|
151
|
+
const rollOptions = {
|
|
152
|
+
file,
|
|
153
|
+
mkdir,
|
|
154
|
+
symlink,
|
|
155
|
+
...(frequency !== undefined && { frequency }),
|
|
156
|
+
...(size !== undefined && { size }),
|
|
157
|
+
...(limit !== undefined && { limit }),
|
|
158
|
+
};
|
|
159
|
+
return pino({
|
|
160
|
+
level: LOG_LEVEL_MAP[level],
|
|
161
|
+
transport: {
|
|
162
|
+
target: resolveTransportTarget('pino-roll'),
|
|
163
|
+
options: rollOptions,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=pino-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pino-factory.js","sourceRoot":"","sources":["../src/pino-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type pino from 'pino';
|
|
2
|
+
import { BaseLogger, type LogSupport, type Context } from '@qianxude/shared';
|
|
3
|
+
/**
|
|
4
|
+
* Pino-backed logger that extends BaseLogger.
|
|
5
|
+
* Wraps a pino.Logger instance and provides stack-standard logging methods.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { createPrettyPino, PinoLogger } from '@qianxude/logger';
|
|
10
|
+
*
|
|
11
|
+
* const rawPino = createPrettyPino({ level: 'debug' });
|
|
12
|
+
* const logger = new PinoLogger(rawPino, { service: 'my-app' });
|
|
13
|
+
*
|
|
14
|
+
* logger.info('Application started');
|
|
15
|
+
* logger.error({ err: new Error('Oops') }, 'Something went wrong');
|
|
16
|
+
*
|
|
17
|
+
* const childLogger = logger.spawn({ requestId: 'abc-123' });
|
|
18
|
+
* childLogger.info('Processing request');
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class PinoLogger extends BaseLogger {
|
|
22
|
+
protected _pino: pino.Logger;
|
|
23
|
+
protected _delegate: LogSupport;
|
|
24
|
+
/**
|
|
25
|
+
* Create a new PinoLogger wrapping a pino instance.
|
|
26
|
+
*
|
|
27
|
+
* @param pinoInstance - The underlying pino.Logger to wrap
|
|
28
|
+
* @param ctx - Initial context to attach to all log messages
|
|
29
|
+
*/
|
|
30
|
+
constructor(pinoInstance: pino.Logger, ctx?: Context);
|
|
31
|
+
/**
|
|
32
|
+
* Get the underlying pino logger instance.
|
|
33
|
+
* Useful for advanced pino-specific operations.
|
|
34
|
+
*/
|
|
35
|
+
get pino(): pino.Logger;
|
|
36
|
+
/**
|
|
37
|
+
* Create a child logger that extends the current context.
|
|
38
|
+
* The child logger shares the same pino instance but has its own context.
|
|
39
|
+
*/
|
|
40
|
+
spawn(ctx?: Context): this;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wrap a raw pino logger into a stack-standard Logger.
|
|
44
|
+
*
|
|
45
|
+
* @param pinoInstance - The pino.Logger instance to wrap
|
|
46
|
+
* @param ctx - Initial context to attach
|
|
47
|
+
* @returns A PinoLogger instance implementing the Logger interface
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* import pino from 'pino';
|
|
52
|
+
* import { wrapPinoLogger } from '@qianxude/logger';
|
|
53
|
+
*
|
|
54
|
+
* const rawPino = pino({ level: 'info' });
|
|
55
|
+
* const logger = wrapPinoLogger(rawPino, { app: 'my-service' });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function wrapPinoLogger(pinoInstance: pino.Logger, ctx?: Context): PinoLogger;
|
|
59
|
+
//# sourceMappingURL=pino-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pino-logger.d.ts","sourceRoot":"","sources":["../src/pino-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAkC,MAAM,kBAAkB,CAAC;AA6B7G;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;IAC7B,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC;IAEhC;;;;;OAKG;gBACS,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,GAAE,OAAY;IAOxD;;;OAGG;IACH,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAEtB;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI;CAO3B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,CAEnF"}
|