npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

xcraft-core-journal

v1.3.7

Published

Xcraft journal

Downloads

230

Readme

📘 Documentation du module xcraft-core-journal

Aperçu

Le module xcraft-core-journal est un système de journalisation avancé pour le framework Xcraft qui gère l'écriture persistante des logs dans des fichiers rotatifs. Il capture automatiquement tous les messages de log émis par le système de logging Xcraft et les sauvegarde dans des fichiers compressés avec rotation automatique.

Sommaire

Structure du module

Le module est composé d'une classe principale Journal qui :

  • S'abonne aux événements de logging du système Xcraft
  • Gère la création et la rotation des fichiers de log
  • Utilise rotating-file-stream pour la gestion avancée des fichiers
  • Maintient un registre global des streams de fichiers par processus

Fonctionnement global

Le journal fonctionne selon le principe suivant :

  1. Initialisation : À la création, le journal s'abonne à tous les niveaux de log disponibles dans le système Xcraft
  2. Capture : Chaque message de log émis déclenche automatiquement l'écriture dans le fichier correspondant
  3. Rotation : Les fichiers sont automatiquement rotés selon la taille (1MB) et l'intervalle (1 jour)
  4. Compression : Les anciens fichiers sont compressés en gzip pour économiser l'espace
  5. Rétention : Un maximum de 50 fichiers est conservé avant suppression automatique

Le système utilise un pattern singleton par processus pour éviter les conflits d'écriture sur les mêmes fichiers. L'identification des processus se base sur le nom du fichier principal (require.main?.filename) avec un fallback sur 'host' pour les environnements Electron > 27 où ESM est utilisé par défaut.

Exemples d'utilisation

Initialisation du journal

const xLog = require('xcraft-core-log')('myModule');
const xJournal = require('xcraft-core-journal')(xLog);

// Le journal capture automatiquement tous les logs
xLog.info("Message d'information");
xLog.warn("Message d'avertissement");
xLog.err("Message d'erreur");

Structure des fichiers générés

var/log/xcraft/
├── xcraft.host.log                       # Fichier actuel
├── 20250613-0936-01-xcraft.host.log.gz   # Rotation précédente
├── 20250613-0936-02-xcraft.host.log.gz   # Plus ancienne
├── 20250613-0824-01-xcraft.host.log.gz   # Plus ancienne
└── ...

Format des messages dans les fichiers

2024-01-15T10:30:45.123Z [myModule] info: Application démarrée
2024-01-15T10:30:46.456Z [database] warn: Connexion lente détectée
2024-01-15T10:30:47.789Z [auth] err: Échec d'authentification pour user123

Interactions avec d'autres modules

Le module interagit étroitement avec :

  • xcraft-core-etc : Pour la configuration et la localisation du répertoire de logs
  • xcraft-core-log : Pour l'écoute des événements de logging
  • rotating-file-stream : Pour la gestion avancée des fichiers rotatifs

Variables d'environnement

| Variable | Description | Exemple | Valeur par défaut | | ------------ | ---------------------------------------------- | ------------- | -------------------------- | | xcraftRoot | Répertoire racine Xcraft (via xcraft-core-etc) | /opt/xcraft | Dépend de la configuration |

Détails des sources

lib/index.js

Ce fichier contient la classe principale Journal qui implémente le système de journalisation persistante.

Fonctionnalités principales

  • Gestion des streams globaux : Utilise un objet streams global pour éviter la duplication des flux de fichiers par processus
  • Auto-abonnement : S'abonne automatiquement à tous les niveaux de log disponibles
  • Identification des processus : Utilise le nom du fichier principal pour identifier chaque processus avec fallback pour Electron
  • Gestion d'erreurs robuste : Évite les boucles infinies (effet Larsen) en utilisant console.error pour les erreurs internes

Configuration de la rotation

  • Taille maximale : 1MB par fichier
  • Intervalle : Rotation quotidienne
  • Rétention : 50 fichiers maximum
  • Compression : gzip pour les fichiers archivés
  • Répertoire : {xcraftRoot}/var/log/xcraft/

Méthodes publiques

  • log(mode, msg) — Écrit un message de log dans le fichier rotatif avec le format standardisé incluant timestamp, module source, niveau et message.

Gestion des erreurs

Le module implémente une gestion d'erreurs défensive :

  • Les erreurs de création de stream suppriment l'entrée du registre global
  • Les erreurs d'écriture sont loggées via console.error pour éviter les boucles
  • Les exceptions sont capturées pour maintenir la stabilité du système
  • Protection contre l'effet Larsen en évitant d'utiliser xLog pour les erreurs internes

Particularités techniques

Le module gère spécifiquement le cas d'Electron version 27+ où ESM est utilisé par défaut, ce qui peut affecter la disponibilité de require.main.filename. Dans ce cas, un fallback sur 'host' est utilisé pour l'identification du processus.


Ce document a été mis à jour pour refléter l'état actuel du code source.