logxpert 1.0.1 → 1.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/PATCHNOTE.fr.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Notes de Version
2
2
 
3
+ ## v1.0.3
4
+
5
+ - **Correction de la désactivation de l'horodatage :** Correction du problème où, malgré `enableTimestamp: false`, l'horodatage était toujours affiché. L'horodatage est désormais complètement désactivé en console lorsque requis.
6
+ - **Correction de l'horodatage personnalisé avec décoration :** Résolution des problèmes de formatage lors de l'utilisation de formats d'horodatage personnalisés avec des caractères décoratifs (par exemple, des crochets). Des formats comme `"Voici la date et l'heure: [YYYY-MM-DD HH:mm:ss] - "` s'affichent correctement.
7
+ - Toutes les améliorations et fonctionnalités précédentes de la v1.0.2 LTS restent intactes.
8
+
9
+ ## v1.0.2
10
+
11
+ - **Préservation de la Décoration dans l'Horodatage Personnalisé :** Ajout d'une fonction d'assistance dans le module de log qui permet de conserver les caractères de décoration (tels que [], (), {}) dans le `timestampFormat` tel que défini par l'utilisateur. Cette amélioration permet d'utiliser des formats comme `"Voici la date et l'heure: [YYYY-MM-DD HH:mm:ss] - "` ou `"date: YYYY-MM-DD heure: HH:mm:ss - "` sans que Moment.js n'échappe automatiquement les crochets.
12
+ - **Autres Améliorations et Corrections de Bugs :** Toutes les améliorations et fonctionnalités précédentes de la v1.0.1 LTS restent intactes.
13
+
14
+
3
15
  ## v1.0.1
4
16
 
5
17
  - Amélioration de la prise en charge des formats d'horodatage personnalisés en console via Moment.js. Les utilisateurs peuvent désormais fournir des formats entièrement personnalisés (ex. : "Voici la date et l'heure: [YYYY-MM-DD HH:mm:ss] - " ou "date: YYYY-MM-DD heure: HH:mm:ss - ") qui rendent correctement les dates dynamiques et le texte littéral.
@@ -12,8 +24,6 @@
12
24
  - **Documentation:** Mise à jour du README et de la référence API pour plus de clarté et de complétude.
13
25
  - **Compatibilité Rétroactive:** Conservation de toutes les fonctionnalités des versions précédentes, incluant les méthodes pour la journalisation générale, d'erreur, d'avertissement, d'information et de débogage.
14
26
 
15
- ## Versions Précédentes
16
-
17
27
  ### v0.3.2
18
28
  - Modification du motif par défaut de `filesName` passant de `'YYYY-MM-DD_HH:mm:ss'` à `'YYYY-MM-DD'`.
19
29
 
package/PATCHNOTE.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Patch Notes
2
2
 
3
+ ## v1.0.3
4
+
5
+ - **Timestamp Disabling Fix:** Corrected the issue where setting `enableTimestamp: false` still printed a timestamp. Timestamps are now completely disabled in the console output when requested.
6
+ - **Custom Timestamp Decoration Fix:** Resolved formatting glitches when using custom timestamp formats with decorative characters (e.g., square brackets) so that formats like `"This is the date: [YYYY-MM-DD HH:mm:ss] - "` render correctly.
7
+ - All previous enhancements and features from v1.0.2 LTS remain intact.
8
+
9
+ ## v1.0.2
10
+
11
+ - **Custom Timestamp Decoration Preservation:** Introduced a helper function in the logging module to allow any decoration characters (such as [], (), {}) in the `timestampFormat` to be preserved as supplied by the user. This improvement lets you use formats like `"This is the date: [YYYY-MM-DD HH:mm:ss] - "` or `"date: YYYY-MM-DD heure: HH:mm:ss - "` without Moment.js automatically escaping the brackets.
12
+ - **Other Enhancements and Bug Fixes:** All previous improvements and features from v1.0.1 LTS remain intact.
13
+
14
+
3
15
  ## v1.0.1
4
16
 
5
17
  - Improved support for fully custom console timestamp formats using Moment.js. Users can now supply completely custom formats (e.g., "This is the time: [YYYY-MM-DD HH:mm:ss] - " or "date: YYYY-MM-DD heure: HH:mm:ss - ") that correctly render dynamic dates and literal text.
@@ -12,8 +24,6 @@
12
24
  - **Documentation:** Updated README and API references for clarity and completeness.
13
25
  - **Backward Compatibility:** Retained all features from previous versions, including methods for general, error, warning, info, and debug logging.
14
26
 
15
- ## Previous Versions
16
-
17
27
  ### v0.3.2
18
28
  - Changed the default `filesName` pattern from `'YYYY-MM-DD_HH:mm:ss'` to `'YYYY-MM-DD'`.
19
29
 
package/README.fr.md CHANGED
@@ -1,6 +1,6 @@
1
- # LogXpert v1.0.1 LTS
1
+ # LogXpert
2
2
 
3
- LogXpert est une bibliothèque de logs puissante pour Node.js qui offre des méthodes de log simples à utiliser avec une sortie colorée et, en option, l'enregistrement dans un fichier. Dans cette version LTS v1.0.1, nous avons amélioré la personnalisation de l'horodatage en console et apporté plusieurs améliorations.
3
+ LogXpert est une bibliothèque de logs puissante pour Node.js qui offre des méthodes de log simples à utiliser avec une sortie colorée et, en option, l'enregistrement dans un fichier.
4
4
 
5
5
  ## Table des Matières
6
6
  - [Installation](#installation)
@@ -46,7 +46,7 @@ log.debug("Ceci est un message de debug.");
46
46
 
47
47
  ### Journalisation avancée : Fichiers de logs & Personnalisation de l'horodatage en console
48
48
 
49
- LogXpert supporte la journalisation dans des fichiers via [winston](https://github.com/winstonjs/winston) et [winston-daily-rotate-file](https://github.com/winstonjs/winston-daily-rotate-file). Vous pouvez configurer l'enregistrement dans un fichier ainsi que personnaliser pleinement l'horodatage en console grâce à `log.settings()`.
49
+ LogXpert supporte la journalisation dans des fichiers via [winston](https://github.com/winstonjs/winston) et [winston-daily-rotate-file](https://github.com/winstonjs/winston-daily-rotate-file).
50
50
 
51
51
  Exemple de configuration :
52
52
 
@@ -56,10 +56,8 @@ const log = require('logxpert');
56
56
  log.settings({
57
57
  console: {
58
58
  enableTimestamp: true,
59
- // Exemple 1 : Inclure du texte littéral avec des tokens
59
+ // Vous pouvez inclure des caractères de décoration, par exemple :
60
60
  timestampFormat: "Voici la date et l'heure: [YYYY-MM-DD HH:mm:ss] - ",
61
- // Exemple 2 : Séparer les tokens pour la date et l'heure
62
- // timestampFormat: "date: YYYY-MM-DD heure: HH:mm:ss - "
63
61
  timestampPrefix: '',
64
62
  timestampSuffix: ''
65
63
  },
@@ -94,12 +92,12 @@ log.settings({
94
92
  Configure les options d'enregistrement dans un fichier et de personnalisation de la sortie console.
95
93
  **Options Console :**
96
94
  - `enableTimestamp` (boolean) : Active/désactive l'horodatage (par défaut : `true`).
97
- - `timestampFormat` (string) : Format de l'horodatage (par défaut : `'YYYY-MM-DD HH:mm:ss'`). Vous pouvez inclure du texte littéral si nécessaire.
95
+ - `timestampFormat` (string) : Format de l'horodatage incluant tout texte littéral ou décoration (par défaut : `'YYYY-MM-DD HH:mm:ss'`).
98
96
  - `timestampPrefix` (string) : Préfixe de l'horodatage.
99
97
  - `timestampSuffix` (string) : Suffixe de l'horodatage.
100
98
 
101
99
  **Options Fichiers :**
102
- - `folder` (string) : Répertoire où les fichiers de logs seront stockés (par défaut : `'logs'`).
100
+ - `folder` (string) : Répertoire où seront stockés les fichiers de logs (par défaut : `'logs'`).
103
101
  - `filesName` (string) : Motif de date pour le nom des fichiers de logs (par défaut : `'YYYY-MM-DD'`).
104
102
  - `maxFile` (string) : Durée maximale de rétention des fichiers (par défaut : `'14d'`).
105
103
  - `maxSize` (string) : Taille maximale par fichier de log (par défaut : `'20m'`).
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # LogXpert v1.0.1 LTS
1
+ # LogXpert
2
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. In this LTS release, v1.0.1, we have enhanced custom console timestamp formatting and made several improvements.
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
4
 
5
5
  ## Table of Contents
6
6
  - [Installation](#installation)
@@ -46,7 +46,7 @@ log.debug('This is a debug message.');
46
46
 
47
47
  ### Advanced Logging: File Output & Custom Console Timestamp
48
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). You can configure file logging and fully customize console timestamps via `log.settings()`.
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
50
 
51
51
  Example configuration:
52
52
 
@@ -56,10 +56,8 @@ const log = require('logxpert');
56
56
  log.settings({
57
57
  console: {
58
58
  enableTimestamp: true,
59
- // Example 1: Including literal text with tokens
60
- timestampFormat: "Voici la date et l'heure: [YYYY-MM-DD HH:mm:ss] - ",
61
- // Example 2: Separating date and time tokens:
62
- // timestampFormat: "date: YYYY-MM-DD heure: HH:mm:ss - "
59
+ // You can now include decoration characters as desired:
60
+ timestampFormat: "This is the date: [YYYY-MM-DD HH:mm:ss] - ",
63
61
  timestampPrefix: '',
64
62
  timestampSuffix: ''
65
63
  },
@@ -94,7 +92,7 @@ log.settings({
94
92
  Configures file logging and console output options.
95
93
  **Console Options:**
96
94
  - `enableTimestamp` (boolean): Enable/disable timestamp (default: `true`).
97
- - `timestampFormat` (string): Format for the timestamp including literal text if desired (default: `'YYYY-MM-DD HH:mm:ss'`).
95
+ - `timestampFormat` (string): Format for the timestamp including any desired literal text or decoration (default: `'YYYY-MM-DD HH:mm:ss'`).
98
96
  - `timestampPrefix` (string): Prefix for the timestamp.
99
97
  - `timestampSuffix` (string): Suffix for the timestamp.
100
98
 
package/main.js CHANGED
@@ -3,12 +3,33 @@ const moment = require('moment'); // Add moment as a dependency: npm install mom
3
3
  const { createLogger, format, transports } = require('winston');
4
4
  require('winston-daily-rotate-file');
5
5
 
6
+ /**
7
+ * Helper function to format the timestamp while preserving square brackets.
8
+ * It replaces "[" with "%%LB%%" and "]" with "%%RB%%" to prevent Moment.js from
9
+ * treating the contents as literal text. After formatting, the placeholders are restored.
10
+ *
11
+ * @param {string} fmt - The user-defined format string.
12
+ * @returns {string} - The formatted timestamp with square brackets preserved.
13
+ *
14
+ * Example:
15
+ * Input: "This is the date: [YYYY-MM-DD HH:mm:ss] - "
16
+ * Might output: "This is the date: [2025-03-21 15:30:45] - "
17
+ */
18
+ function formatCustomTimestamp(fmt) {
19
+ // Use a placeholder that's unlikely to be parsed by moment
20
+ const temp = fmt.replace(/\[/g, '%%LB%%').replace(/\]/g, '%%RB%%');
21
+ const formatted = moment().format(temp);
22
+ // Restore the original square brackets
23
+ return formatted.replace(/%%LB%%/g, '[').replace(/%%RB%%/g, ']');
24
+ }
25
+
6
26
  /**
7
27
  * @typedef {Object} ConsoleOptions
8
28
  * @property {boolean} [enableTimestamp=true] - Enable or disable timestamp in console logs.
9
- * @property {string} [timestampFormat='YYYY-MM-DD HH:mm:ss'] - Moment.js format for the timestamp.
10
- * You can include literal text as needed. For example:
11
- * - "Voici la date et l'heure: [YYYY-MM-DD HH:mm:ss] - "
29
+ * @property {string} [timestampFormat='YYYY-MM-DD HH:mm:ss'] - Custom format for the timestamp.
30
+ * You can include any decoration characters ([], (), {}) without interference.
31
+ * For example:
32
+ * - "This is the date: [YYYY-MM-DD HH:mm:ss] - "
12
33
  * - "date: YYYY-MM-DD heure: HH:mm:ss - "
13
34
  */
14
35
 
@@ -35,28 +56,24 @@ const customFormat = format.printf(({ timestamp, level, message }) => {
35
56
  // Default console timestamp format
36
57
  const defaultConsoleFormat = 'YYYY-MM-DD HH:mm:ss';
37
58
 
38
- // Create a default console transport with timestamp enabled using Moment.js
39
- let consoleTransport = new transports.Console({
59
+ // Create the global logger. Its default format will be overridden by the console transport settings.
60
+ const logger = createLogger({
61
+ level: 'debug',
40
62
  format: format.combine(
41
- format.colorize(),
42
- format.timestamp({
43
- format: () => moment().format(defaultConsoleFormat)
44
- }),
63
+ format.timestamp({ format: () => moment().format(defaultConsoleFormat) }),
45
64
  customFormat
46
65
  )
47
66
  });
48
67
 
49
- // Create a logger with the default console transport
50
- const logger = createLogger({
51
- level: 'debug',
68
+ // Create default console transport (will be replaced via settings)
69
+ let consoleTransport = new transports.Console({
52
70
  format: format.combine(
53
- format.timestamp({
54
- format: () => moment().format(defaultConsoleFormat)
55
- }),
71
+ format.colorize(),
72
+ format.timestamp({ format: () => moment().format(defaultConsoleFormat) }),
56
73
  customFormat
57
- ),
58
- transports: [consoleTransport]
74
+ )
59
75
  });
76
+ logger.add(consoleTransport);
60
77
 
61
78
  // Reference to file transport (added via settings)
62
79
  let fileTransport;
@@ -66,12 +83,12 @@ let fileTransport;
66
83
  *
67
84
  * @param {LogSettingsOptions} options - The settings for both console and file logging.
68
85
  * @example
69
- * // Example: Fully custom console timestamp using a custom format string,
86
+ * // Example: Fully custom console timestamp that preserves decorational brackets,
70
87
  * // and enabling file logging.
71
88
  * log.settings({
72
89
  * console: {
73
90
  * enableTimestamp: true,
74
- * timestampFormat: "Voici la date et l'heure: [YYYY-MM-DD HH:mm:ss] - "
91
+ * timestampFormat: "This is the date: [YYYY-MM-DD HH:mm:ss] - "
75
92
  * },
76
93
  * files: {
77
94
  * folder: 'logs',
@@ -83,7 +100,6 @@ let fileTransport;
83
100
  * });
84
101
  */
85
102
  function applySettings(options = {}) {
86
- // Update console transport if configuration is provided
87
103
  if (options.console) {
88
104
  const enableTimestamp = options.console.enableTimestamp !== undefined ? options.console.enableTimestamp : true;
89
105
  const timestampFormat = options.console.timestampFormat || defaultConsoleFormat;
@@ -91,26 +107,25 @@ function applySettings(options = {}) {
91
107
  // Remove the current console transport
92
108
  logger.remove(consoleTransport);
93
109
 
94
- // Create new console transport based on the provided options.
95
- // The provided timestampFormat is passed directly to moment().
110
+ // Build the console format based on the enableTimestamp flag.
111
+ const consoleFormat = enableTimestamp
112
+ ? format.combine(
113
+ format.colorize(),
114
+ format.timestamp({ format: () => formatCustomTimestamp(timestampFormat) }),
115
+ customFormat
116
+ )
117
+ : format.combine(
118
+ format((info) => { delete info.timestamp; return info; })(),
119
+ format.colorize(),
120
+ customFormat
121
+ );
122
+
96
123
  consoleTransport = new transports.Console({
97
- format: enableTimestamp
98
- ? format.combine(
99
- format.colorize(),
100
- format.timestamp({
101
- format: () => moment().format(timestampFormat)
102
- }),
103
- customFormat
104
- )
105
- : format.combine(
106
- format.colorize(),
107
- customFormat
108
- )
124
+ format: consoleFormat
109
125
  });
110
126
  logger.add(consoleTransport);
111
127
  }
112
128
 
113
- // Enable file logging if options.files is provided
114
129
  if (options.files) {
115
130
  const folder = options.files.folder || 'logs';
116
131
  const datePattern = options.files.filesName || 'YYYY-MM-DD';
@@ -118,17 +133,14 @@ function applySettings(options = {}) {
118
133
  const maxSize = options.files.maxSize || '20m';
119
134
  const zippedArchive = options.files.zippedArchive !== undefined ? options.files.zippedArchive : false;
120
135
 
121
- // Ensure the log folder exists
122
136
  if (!fs.existsSync(folder)) {
123
137
  fs.mkdirSync(folder, { recursive: true });
124
138
  }
125
139
 
126
- // Remove existing file transport if it exists
127
140
  if (fileTransport) {
128
141
  logger.remove(fileTransport);
129
142
  }
130
143
 
131
- // Create a new daily-rotate file transport with provided/default settings
132
144
  fileTransport = new transports.DailyRotateFile({
133
145
  filename: `${folder}/application-%DATE%.log`,
134
146
  datePattern,
@@ -136,7 +148,6 @@ function applySettings(options = {}) {
136
148
  maxSize,
137
149
  maxFiles
138
150
  });
139
-
140
151
  logger.add(fileTransport);
141
152
  }
142
153
  }
@@ -150,39 +161,23 @@ function log(message) {
150
161
  logger.info(message);
151
162
  }
152
163
 
153
- /**
154
- * Logs an error message.
155
- * @param {string} message - The error message.
156
- */
157
164
  log.error = function (message) {
158
165
  logger.error(message);
159
166
  };
160
167
 
161
- /**
162
- * Logs a warning message.
163
- * @param {string} message - The warning message.
164
- */
165
168
  log.warn = function (message) {
166
169
  logger.warn(message);
167
170
  };
168
171
 
169
- /**
170
- * Logs an informational message.
171
- * @param {string} message - The informational message.
172
- */
173
172
  log.info = function (message) {
174
173
  logger.info(message);
175
174
  };
176
175
 
177
- /**
178
- * Logs a debug message.
179
- * @param {string} message - The debug message.
180
- */
181
176
  log.debug = function (message) {
182
177
  logger.debug(message);
183
178
  };
184
179
 
185
- // Expose the settings function for configuring both file logging and console output
180
+ // Expose the settings function for configuring both file logging and console output.
186
181
  log.settings = applySettings;
187
182
 
188
183
  module.exports = log;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "logxpert",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "A powerful logging library for Node.js",
5
5
  "main": "main.js",
6
6
  "repository": {