logxpert 1.0.5 → 2.0.3

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 CHANGED
@@ -1,108 +1,107 @@
1
- # LogXpert
2
-
3
- LogXpert is a powerful logging library for Node.js that provides easy-to-use logging methods with colorful formatted output and optional file logging support
4
-
5
- ## Table of Contents
6
- - [Installation](#installation)
7
- - [Usage](#usage)
8
- - [Basic Logging](#basic-logging)
9
- - [Advanced Logging: File Output & Custom Console Timestamp](#advanced-logging-file-output--custom-console-timestamp)
10
- - [API Reference](#api-reference)
11
- - [Additional Information](#additional-information)
12
- - [License](#license)
13
-
14
- ## Installation
15
-
16
- You can install LogXpert using npm:
17
-
18
- ```sh
19
- npm install logxpert
20
- ```
21
-
22
- ## Usage
23
-
24
- ### Basic Logging
25
-
26
- Import LogXpert in your project and use it to log messages:
27
-
28
- ```js
29
- const log = require('logxpert');
30
-
31
- // Log a general message
32
- log('This is a general log message.');
33
-
34
- // Log an error message
35
- log.error('This is an error message.');
36
-
37
- // Log a warning message
38
- log.warn('This is a warning message.');
39
-
40
- // Log an informational message
41
- log.info('This is an informational message.');
42
-
43
- // Log a debug message
44
- log.debug('This is a debug message.');
45
- ```
46
-
47
- ### Advanced Logging: File Output & Custom Console Timestamp
48
-
49
- LogXpert supports file logging using [winston](https://github.com/winstonjs/winston) and [winston-daily-rotate-file](https://github.com/winstonjs/winston-daily-rotate-file).
50
-
51
- Example configuration:
52
-
53
- ```js
54
- const log = require('logxpert');
55
-
56
- log.settings({
57
- console: {
58
- enableTimestamp: true,
59
- // You can now include decoration characters as desired:
60
- timestampFormat: "This is the date: [YYYY-MM-DD HH:mm:ss] - ",
61
- timestampPrefix: '',
62
- timestampSuffix: ''
63
- },
64
- files: {
65
- folder: 'logs',
66
- filesName: 'YYYY-MM-DD',
67
- maxFile: '14d',
68
- maxSize: '20m',
69
- zippedArchive: false
70
- }
71
- });
72
- ```
73
-
74
- ## API Reference
75
-
76
- - **log(message: string):**
77
- Logs a general message using the `info` level.
78
-
79
- - **log.error(message: string):**
80
- Logs an error message.
81
-
82
- - **log.warn(message: string):**
83
- Logs a warning message.
84
-
85
- - **log.info(message: string):**
86
- Logs an informational message.
87
-
88
- - **log.debug(message: string):**
89
- Logs a debug message.
90
-
91
- - **log.settings(options: object):**
92
- Configures file logging and console output options.
93
- **Console Options:**
94
- - `enableTimestamp` (boolean): Enable/disable timestamp (default: `true`).
95
- - `timestampFormat` (string): Format for the timestamp including any desired literal text or decoration (default: `'YYYY-MM-DD HH:mm:ss'`).
96
- - `timestampPrefix` (string): Prefix for the timestamp.
97
- - `timestampSuffix` (string): Suffix for the timestamp.
98
-
99
- **Files Options:**
100
- - `folder` (string): Directory where log files will be stored (default: `'logs'`).
101
- - `filesName` (string): Date pattern for the log file name (default: `'YYYY-MM-DD'`).
102
- - `maxFile` (string): Maximum file retention (default: `'14d'`).
103
- - `maxSize` (string): Maximum size per log file (default: `'20m'`).
104
- - `zippedArchive` (boolean): Archive logs in zip format (default: `false`).
105
-
106
- ## License
107
-
108
- This project is licensed under GNU General Public License v3.0. See the [LICENSE](LICENSE) file for details.
1
+ # LogXpert
2
+
3
+ Colorful console logging for Node.js with optional daily file rotation.
4
+
5
+ ## Installation
6
+
7
+ ```sh
8
+ npm install logxpert
9
+ ```
10
+
11
+ Requires Node.js `>=18`. Recommended minimum: Node.js 22 LTS. See [NODE_SUPPORT.md](NODE_SUPPORT.md) for the full support policy.
12
+
13
+ ## Quick start
14
+
15
+ ```js
16
+ const log = require('logxpert');
17
+ // or: import log from 'logxpert';
18
+
19
+ log('general message'); // shortcut for info
20
+ log.info('hello', { user: 1 }); // with metadata
21
+ log.error(new Error('boom')); // Errors print message + stack
22
+ log.debug(() => JSON.stringify(hugeObject)); // lazy: skipped if level disabled
23
+ ```
24
+
25
+ Levels: `error → warn → info → http → verbose → debug → silly` (default `debug`).
26
+
27
+ ```js
28
+ log.setLevel('info'); // or via LOG_LEVEL env variable
29
+ ```
30
+
31
+ ## File logging
32
+
33
+ ```js
34
+ log.settings({ files: { folder: 'logs' } });
35
+ // → logs/logxpert-2026_10_08.log (prefix defaults to your package.json name)
36
+
37
+ log.settings({ files: { folder: 'logs', prefix: 'api' } });
38
+ // → logs/api-2026_10_08.log
39
+
40
+ // Full control (omit prefix when used):
41
+ log.settings({ files: { folder: 'logs', filePattern: 'app-%datePattern%.log' } });
42
+ ```
43
+
44
+ `%datePattern%` is replaced by the date (`datePattern` defaults to `YYYY_MM_DD`). Combining `prefix` with `filePattern` throws — pick one.
45
+
46
+ ```js
47
+ log.settings({
48
+ files: {
49
+ folder: 'logs',
50
+ runNumber: true, // off by default → app-2026_10_08-1.log, -2.log, ...
51
+ maxFile: '14d', // retention
52
+ maxSize: '20m', // rotate above this size
53
+ zippedArchive: true,
54
+ },
55
+ });
56
+ log.close(); // call on shutdown
57
+ ```
58
+
59
+ ## Console & instances
60
+
61
+ ```js
62
+ log.settings({
63
+ console: {
64
+ enableTimestamp: true,
65
+ timestampFormat: 'YYYY-MM-DD HH:mm:ss',
66
+ colorize: true,
67
+ },
68
+ });
69
+
70
+ const { createLogger } = require('logxpert');
71
+ const apiLog = createLogger({ level: 'info' }); // independent instance
72
+
73
+ const child = log.child({ service: 'api' }); // bound context
74
+ ```
75
+
76
+ ## Full configuration (copy-paste)
77
+
78
+ ```js
79
+ log.settings({
80
+ level: 'debug', // or process.env.LOG_LEVEL
81
+ console: {
82
+ enableTimestamp: true,
83
+ timestampFormat: 'YYYY-MM-DD HH:mm:ss',
84
+ timestampPrefix: '',
85
+ timestampSuffix: '',
86
+ colorize: true,
87
+ },
88
+ files: {
89
+ folder: 'logs',
90
+ prefix: undefined, // defaults to your package.json name
91
+ // filePattern: 'app-%datePattern%.log', // full control (omit prefix if used)
92
+ datePattern: 'YYYY_MM_DD',
93
+ runNumber: false, // or true, or { separator: '-', padding: 0, startAt: 1 }
94
+ maxFile: '14d',
95
+ maxSize: '20m',
96
+ zippedArchive: false,
97
+ }
98
+ });
99
+ ```
100
+
101
+ Legacy aliases: `appName` (= `prefix`), `filename`/`pattern` (= `filePattern`), `filesName`/`dateFormat` (= `datePattern`).
102
+
103
+ Security: messages are stripped of ANSI escapes and control characters (except `\n`, `\t`); file patterns escaping the log folder (`..`, absolute paths) are rejected.
104
+
105
+ ## License
106
+
107
+ Apache-2.0. See [LICENSE](LICENSE).
package/index.d.mts ADDED
@@ -0,0 +1,22 @@
1
+ import log from './index.js';
2
+
3
+ export default log;
4
+
5
+ export const settings: typeof log.settings;
6
+ export const setLevel: typeof log.setLevel;
7
+ export const getLevel: typeof log.getLevel;
8
+ export const child: typeof log.child;
9
+ export const close: typeof log.close;
10
+ export const createLogger: typeof log.createLogger;
11
+ export const error: typeof log.error;
12
+ export const warn: typeof log.warn;
13
+ export const info: typeof log.info;
14
+ export const debug: typeof log.debug;
15
+
16
+ export type LogLevel = log.LogLevel;
17
+ export type ConsoleOptions = log.ConsoleOptions;
18
+ export type FilesOptions = log.FilesOptions;
19
+ export type RunNumberOptions = log.RunNumberOptions;
20
+ export type LogSettingsOptions = log.LogSettingsOptions;
21
+ export type ChildLogger = log.ChildLogger;
22
+ export type LogXpert = log.LogXpert;
package/index.d.ts ADDED
@@ -0,0 +1,79 @@
1
+ declare namespace log {
2
+ export type LogLevel = 'error' | 'warn' | 'info' | 'http' | 'verbose' | 'debug' | 'silly';
3
+
4
+ export interface ConsoleOptions {
5
+ enableTimestamp?: boolean;
6
+ timestampFormat?: string;
7
+ timestampPrefix?: string;
8
+ timestampSuffix?: string;
9
+ colorize?: boolean;
10
+ level?: LogLevel;
11
+ }
12
+
13
+ export interface RunNumberOptions {
14
+ enabled?: boolean;
15
+ separator?: string;
16
+ padding?: number;
17
+ startAt?: number;
18
+ }
19
+
20
+ export interface FilesOptions {
21
+ folder?: string;
22
+ /** Preferred: date format for %DATE%. */
23
+ datePattern?: string;
24
+ /** @deprecated Use datePattern. */
25
+ filesName?: string;
26
+ dateFormat?: string;
27
+ /** Preferred: filename template containing %DATE%. */
28
+ filePattern?: string;
29
+ pattern?: string;
30
+ /** @deprecated Use filePattern. */
31
+ filename?: string;
32
+ /** Preferred: filename prefix used when no pattern is given. */
33
+ prefix?: string;
34
+ /** @deprecated Use prefix. */
35
+ appName?: string;
36
+ runNumber?: boolean | RunNumberOptions;
37
+ maxFile?: string;
38
+ maxFiles?: string;
39
+ maxSize?: string;
40
+ zippedArchive?: boolean;
41
+ level?: LogLevel;
42
+ }
43
+
44
+ export interface LogSettingsOptions {
45
+ console?: ConsoleOptions;
46
+ files?: FilesOptions;
47
+ level?: LogLevel;
48
+ }
49
+
50
+ export interface ChildLogger {
51
+ error(message: unknown, ...meta: unknown[]): void;
52
+ warn(message: unknown, ...meta: unknown[]): void;
53
+ info(message: unknown, ...meta: unknown[]): void;
54
+ debug(message: unknown, ...meta: unknown[]): void;
55
+ log(level: LogLevel, message: unknown, ...meta: unknown[]): void;
56
+ }
57
+
58
+ export interface LogXpert {
59
+ (message: unknown, ...meta: unknown[]): void;
60
+ error(message: unknown, ...meta: unknown[]): void;
61
+ warn(message: unknown, ...meta: unknown[]): void;
62
+ info(message: unknown, ...meta: unknown[]): void;
63
+ debug(message: unknown, ...meta: unknown[]): void;
64
+ http(message: unknown, ...meta: unknown[]): void;
65
+ verbose(message: unknown, ...meta: unknown[]): void;
66
+ silly(message: unknown, ...meta: unknown[]): void;
67
+ log(level: LogLevel, message: unknown, ...meta: unknown[]): void;
68
+ settings(options?: LogSettingsOptions): void;
69
+ setLevel(level: LogLevel): void;
70
+ getLevel(): string;
71
+ child(meta?: Record<string, unknown>): ChildLogger;
72
+ close(): void;
73
+ createLogger(options?: LogSettingsOptions): LogXpert;
74
+ }
75
+ }
76
+
77
+ declare const log: log.LogXpert;
78
+
79
+ export = log;