Nodefony 10.0.0-beta.5
Framework Node.js fullstack — HTTP & WebSocket, même contexte

Référence d'API — nodefony — syslog

stable

Documentation › Référence d’API › nodefony › syslog

Générée depuis les déclarations de types publiées de nodefony 10.0.0-beta.5 : exactement ce que reçoit une application qui l’installe. Cette page n’existe dans aucun dépôt — pour la corriger, on corrige le TSDoc du code.

nodefony#

import { … } from "nodefony" — 81 symboles.

Classes (10)#

BatchingHttpTransport#

abstract class BatchingHttpTransport implements ITransport

Base d’un transport de logs HTTP batché — généralise le pattern LB.W (ring borné → drain coalescé → drop borné) à une destination réseau (Loki, OpenSearch). Mutualise toute la mécanique de file/flush/drop/cleanup ; la sous-classe n’implémente QUE flushBatch (formatage + push spécifiques).

ConsoleTransport#

class ConsoleTransport implements ITransport

FileSink#

class FileSink implements ILogSink

Driver de sink fichier NON bloquant (LB.W). Écrit via fs.write async sur un fd persistant ouvert en append ("a") — un fd PAR worker (≠ stdout partagé hérité du master), donc sans contention d’inode.

FileTransport#

class FileTransport implements ITransport

Transport d’écriture vers un fichier : une ligne par Pdu (JSONL ou texte), par UN flux d’ajout ouvert paresseusement au premier envoi.

HttpTransport#

class HttpTransport implements ITransport

LokiTransport#

class LokiTransport extends BatchingHttpTransport

Transport de logs vers Grafana Loki (LB.4) — push HTTP batché sur POST /loki/api/v1/push. Étend BatchingHttpTransport : la queue/flush/ drop/cleanup sont mutualisés ; ici on ne fait que formater le lot au schéma Loki (streams + values) et l’envoyer.

OpenSearchTransport#

class OpenSearchTransport extends BatchingHttpTransport

Transport de logs vers OpenSearch (LB.4) — indexation batchée via l’API POST /_bulk (NDJSON). Étend BatchingHttpTransport (queue/flush/drop mutualisés) ; ici on formate le lot au protocole bulk et on l’envoie.

Pdu#

class Pdu

Syslog#

class Syslog extends Event implements ISyslog

Hub central de logs structurés de Nodefony — conforme RFC 5424.

SyslogTransport#

class SyslogTransport implements ITransport

Fonctions (30)#

accessStatusFamily#

function accessStatusFamily(status: number | null): number | null

La famille d’un statut d’accès, de 1 à 5 comme un statut HTTP — y compris pour un code de fermeture WebSocket (RFC 6455 §7.4), qui sinon passerait pour une erreur serveur à quatre chiffres.

consoleRequestIds#

function consoleRequestIds(lines: Iterable<IConsoleLine>): Set<string> | null

Les requêtes de la console présentes dans un lot de lignes : celles dont UNE ligne vise la console. Les autres lignes d’une requête ne portent que son requestId — c’est par lui qu’on les écarte avec elle.

createFileLogDriver#

function createFileLogDriver(options: FileLogDriverOptions): ILogDriver

Driver file du Log Backplane (LB.2) — destination de logs JSONL queryable (persistante, dev/VPS). Chaque ligne est un Pdu sérialisé en forme wire plate (JSON.stringify), produit côté WRITE par un transport file format:"json" ; ce format plat est aussi celui qu’ingèrent Promtail (Loki) / Filebeat (OpenSearch) sans transformation → le driver file est le tremplin testable vers les drivers prod (LB.4).

createLokiLogDriver#

function createLokiLogDriver(options: LokiLogDriverOptions): ILogDriver

Driver loki du Log Backplane (LB.4) — relit les logs dans Grafana Loki via LogQL (GET /loki/api/v1/query_range). Adaptateur, pas moteur : Loki BORNE le rapatriement (sélecteur de labels + fenêtre temporelle + grep + budget de lignes), puis filterPdus est l’autorité finale sur le sous-ensemble rapatrié → sémantique EXACTEMENT identique aux drivers memory/file (inclusion insensible à la casse, ordering uid, pagination). Une logique, N façades.

createMemoryLogDriver#

function createMemoryLogDriver(source: () => IPduLike[]): ILogDriver

Driver memory (LB.1) — le ring buffer du Syslog EST le stockage. Aucun write dédié : le ring est alimenté par Syslog.pushStack sur le hot path. Le driver n’ajoute que la relecture (query) = filterPdus sur un snapshot du ring.

createOpenSearchLogDriver#

function createOpenSearchLogDriver(options: OpenSearchLogDriverOptions): ILogDriver

Driver opensearch du Log Backplane (LB.4) — relit les logs dans OpenSearch via POST /{index}/_search (Query DSL). Adaptateur, pas moteur : OpenSearch borne le rapatriement (range sur timeStamp + sort desc + budget size), puis filterPdus est l’autorité finale sur le sous-ensemble → sémantique identique aux drivers memory/file. Une logique, N façades.

filterPdus#

function filterPdus(pdus: IPduLike[], criteria?: ILogQueryCriteria): ILogQueryResult

Filtre PUR d’un tableau de Pdu selon des critères — 0 I/O, 0 état, testable sans serveur. C’est LA logique de filtrage du Log Backplane, réutilisée par le driver memory (sur syslog.ringStack), le futur driver file (sur les lignes relues) et la future commande CLI syslog:filter. Une logique, trois façades.

findAccessLine#

function findAccessLine<T extends AccessCandidate>(rows: readonly T[], method: string, path: string, at: number): T | null

Retrouve la ligne d’accès d’une requête vue d’ailleurs — le navigateur, qui n’a pas toujours lu son X-Request-Id (document, WebSocket, EventSource) : même verbe, même chemin, et la plus proche de l’instant donné quand plusieurs connexions ont visé le même chemin.

getActiveLogDriver#

function getActiveLogDriver(): ILogDriver | null

Driver actif (relecture), ou null si aucun n’est encore enregistré/câblé.

getLogDriver#

function getLogDriver(name: string): ILogDriver

Récupère un driver ENREGISTRÉ par son nom SANS l’activer — pour le sonder (probe) ou l’introspecter avant un switch. undefined si non enregistré.

getLogDriverFactory#

function getLogDriverFactory(name: string): ILogDriverFactory

Récupère la fabrique d’un driver, ou undefined si non enregistrée.

isConsolePath#

function isConsolePath(path: string): boolean

Dit si un chemin est servi à la console d’administration elle-même — la seule règle de chemin du trafic de la console, que la ligne d’accès (pduIsConsoleTraffic) et la barre de débogage (qui voit le chemin des requêtes du navigateur) appliquent toutes deux. Une connexion à l’application n’en fait jamais partie.

isLogColorEnabled#

function isLogColorEnabled(): boolean

true si la couleur ANSI est active (gate boot-time).

isToolingRequestId#

function isToolingRequestId(requestId: string | null): boolean

Cette ligne (ou cette requête) vient-elle d’un appel de l’outillage, marqué par TOOLING_REQUEST_ID_PREFIX ? Pure et isomorphe.

listLogDriverFactories#

function listLogDriverFactories(): string[]

Liste les noms de drivers ayant une fabrique (introspection Studio / CLI).

listLogDrivers#

function listLogDrivers(): { name: string; capabilities: ILogDriver["capabilities"]; }[]

Liste des drivers enregistrés (introspection Studio / tests / data-plane).

parseAccessLine#

function parseAccessLine(pdu: Pick<IPduLike, "msgid" | "payload">): IAccessLine | null

Lit une ligne d’accès (msgid "req") : verbe, statut, chemin, durée — la seule lecture de ce format, que les Journaux de la console et la barre de débogage partagent.

pduFlowStep#

function pduFlowStep(pdu: FlowClassifiable): FlowStepId | null

Classe un Pdu en étape de cycle de vie (id stable) ou null si la ligne n’est pas un jalon (log applicatif libre, ex. DB-DEMO). PUR, isomorphe, 0 état — réutilisé par le filtre back (filterPdus) ET le rendu front (colonne « Étape » + sélecteur) → une SEULE logique, jamais de divergence.

pduIsConsoleRequest#

function pduIsConsoleRequest(line: IConsoleLine, ids: ReadonlySet<string> | null): boolean

Dit si une ligne appartient au trafic de la console : elle-même (cf pduIsConsoleTraffic), une ligne d’un appel marqué par l’outillage (isToolingRequestId), ou une ligne d’une requête de la console.

pduIsConsoleTraffic#

function pduIsConsoleTraffic(pdu: Pick<IPduLike, "msgid" | "payload" | "severity">): boolean

Dit si un Pdu est du trafic de la console d’administration — ce que l’exploitant ne cherche pas en lisant les journaux de son application : une ligne qui porte l’URL de la requête (ligne d’accès msgid "req", ou ligne URL : … du journal de requête, ouverture et fermeture WebSocket comprises) vers un chemin de la console, ou ce que le serveur Vite écrit sous le niveau WARNING (msgid "frontend" : démarrage, rechargement à chaud).

pduIsModuleExcluded#

function pduIsModuleExcluded(pdu: Pick<IPduLike, "moduleName" | "msgid" | "payload">, excludedLc: string | null): boolean

Dit si une ligne tombe sous l’exclusion d’un module (excludeModule) : même nom, sans tenir compte de la casse — sauf la ligne qui porte l’URL de la requête. Celle-ci appartient à l’application même quand le framework l’écrit (le journal d’accès est signé NODEFONY) : masquer le framework ne doit jamais masquer les requêtes, sans quoi la vue se vide entièrement.

pduProtocol#

function pduProtocol(pdu: Pick<IPduLike, "msgid">): LogProtocol

Classe un Pdu par protocole d’origine — "ws" ou "http" — de façon PURE, isomorphe et 0-alloc (une seule comparaison de msgid).

pduToRecord#

function pduToRecord(pdu: IPduLike): ILogRecord

Sérialise un Pdu en ILogRecord (forme wire). Source unique de la projection Pdu→wire : réutilisée par filterPdus (driver memory) ET par le producteur data-plane syslog (framework) — pas de shape dupliqué qui dérive.

registerBuiltinLogDrivers#

function registerBuiltinLogDrivers(): void

Enregistre les fabriques des drivers NATIFS du Log Backplane dans le registre de fabriques. Idempotent (appelé à chaque initializeLog, court-circuité après la 1ʳᵉ fois). C’est ICI — pas dans le Kernel — que vit la connaissance « nom → comment construire ce driver ». Le Kernel ne fait que résoudre + brancher, sans aucun if (name === …).

registerLogDriver#

function registerLogDriver(driver: ILogDriver): void

Enregistre (ou remplace) un driver par son nom. Si aucun driver actif n’est encore défini, le premier enregistré devient actif (défaut sain).

registerLogDriverFactory#

function registerLogDriverFactory(name: string, factory: ILogDriverFactory): void

Enregistre (ou remplace) la fabrique d’un driver par son nom.

resolveColorEnabled#

function resolveColorEnabled(isTTY: boolean): boolean

Applique les conventions d’environnement couleur PAR-DESSUS un signal isTTY déjà résolu — au boot on passe Kernel.isTTY (qui honore déjà NF_NO_TTY), sans re-lire process.stdout. Conventions :

resolveLogPush#

function resolveLogPush(write: boolean, environment: string): boolean

L’application envoie-t-elle ELLE-MÊME ses journaux à une destination distante (Loki, OpenSearch) ? Un choix explicite (write) gagne toujours. Sans choix : oui en développement, NON en production.

setActiveLogDriver#

function setActiveLogDriver(name: string): ILogDriver

Sélectionne le driver actif par nom (relecture des logs).

setLogColor#

function setLogColor(enabled: boolean): void

Active/désactive la couleur ANSI des logs — à appeler une fois au boot. Swap les fonctions des slots ; aucun coût par log ensuite.

Constantes (8)#

BROWSER_ORIGIN#

const BROWSER_ORIGIN = "browser"

moduleName porté par une entrée de journal venue d’un NAVIGATEUR.

FLOW_STEPS#

const FLOW_STEPS: Record<FlowStepId, FlowStepMeta>

Table des étapes — source unique de l’ordre et de l’appartenance protocole, partagée back (filtre) et front (sélecteur groupé HTTP / WebSocket / Commun).

NULL_LOG_SINK#

const NULL_LOG_SINK: ILogSink

Sink /dev/null : noop total (bench — mesure du plafond sans I/O de log).

SEVERITY_NAMES#

const SEVERITY_NAMES: readonly [ "EMERGENCY", "ALERT", "CRITIC", "ERROR", "WARNING", "NOTICE", "INFO", "DEBUG" ]

Les noms de sévérité RFC 5424, dans l’ordre de l’enum (l’index EST la valeur : SEVERITY_NAMES[3] === "ERROR"). Les huit niveaux de la RFC, et rien d’autre : une animation de terminal n’est pas un niveau de journal.

STDERR_LOG_SINK#

const STDERR_LOG_SINK: ILogSink

Sink « sortie d’erreur » : TOUT le journal d’écran part sur stderr, la sortie standard restant à un flux que la machine lit — le bilan JSON du serveur de développement (--output json), où une seule ligne étrangère casse le | jq qui le consomme.

SYSLOG_LOG_CHANNEL#

const SYSLOG_LOG_CHANNEL = "nodefony.syslog.log"

Nom du canal node:diagnostics_channel sur lequel chaque ligne ACCEPTÉE du journal est publiée — forme module.fonction de la documentation de Node, comme nodefony.http.request. Le message est le Pdu lui-même.

TOOLING_REQUEST_ID_PREFIX#

const TOOLING_REQUEST_ID_PREFIX = "nf-tooling-"

Préfixe des requestId que l’outillage pose LUI-MÊME sur ses appels (la barre de débogage, par X-Request-Id — que le serveur adopte tel quel). Ses lignes se reconnaissent ainsi avant même que le serveur ne les écrive, celles qui précèdent la ligne d’accès comprises : l’observation ne s’observe pas, et ne se relance pas sur ce qu’elle a elle-même fait écrire.

logColor#

const logColor: ColorMap

Helper de couleur partagé — référence STABLE, propriétés mutées par setLogColor. Les call-sites font logColor.cyan("URL").

Interfaces (24)#

BatchTransportOptions#

interface BatchTransportOptions

BatchTransportStats#

interface BatchTransportStats

Compteurs d’observabilité d’un transport batché (introspection / debug).

FileLogDriverOptions#

interface FileLogDriverOptions

FileSinkOptions#

interface FileSinkOptions

FileTransportOptions#

interface FileTransportOptions

FlowStepMeta#

interface FlowStepMeta

Métadonnée structurelle d’une étape (jamais de présentation : libellé FR et couleur vivent côté front, qui mappe l’id). order = rang logique dans le cycle de SON protocole ; protocol = où l’étape apparaît ("both" = session).

HttpTransportOptions#

interface HttpTransportOptions

IAccessLine#

interface IAccessLine

Une ligne d’accès lue : ce qu’il faut voir d’une requête d’un coup d’œil.

ILogChannel#

interface ILogChannel

Le canal de publication vu par le journal : le sous-ensemble du Channel de node:diagnostics_channel qu’il emploie. Structurel, pour que ce fichier n’importe pas node:diagnostics_channel (il sert aussi le navigateur) : le barrel Node branche le vrai canal par setLogChannel.

ILogConfigLike#

interface ILogConfigLike

Sous-ensemble de config.log lu par les fabriques — évite une dépendance des drivers au type complet du Kernel (qui, lui, importe les drivers).

ILogDriver#

interface ILogDriver

Contrat du Log Backplane (axe DESTINATION queryable, LB.0).

ILogDriverCapabilities#

interface ILogDriverCapabilities

Capacités déclarées d’un driver (introspection Studio + garde-fous endpoint).

ILogDriverContext#

interface ILogDriverContext

Contexte passé à une fabrique de driver (tout ce qu’il faut pour se construire).

ILogDriverMount#

interface ILogDriverMount

Ce qu’une fabrique retourne : le driver de RELECTURE + (optionnel) le transport d’ÉCRITURE à brancher. writeKey déduplique le transport quand plusieurs drivers partagent la même destination d’écriture (ex. file ↔ cluster-file = même JSONL).

ILogDriverProbe#

interface ILogDriverProbe

Résultat d’une ILogDriver.probe — santé d’une destination de logs. Affiché par Studio (badge joignable/latence + infos) ; jamais de credential.

ILogQueryCriteria#

interface ILogQueryCriteria

Critères de requête — tous optionnels, combinés en AND. Vide = tout (borné par limit). Les comparaisons string sont insensibles à la casse. requestId matche exactement (trace full-stack ciblée d’UNE requête) ; module/msgid/ text matchent par inclusion.

ILogQueryResult#

interface ILogQueryResult

Résultat d’une requête : enregistrements (récents d’abord) + méta de pagination.

ILogRecord#

interface ILogRecord

Forme wire d’un Pdu (isomorphe) — sérialisation stable partagée par TOUTES les façades (endpoint data-plane, canal nodefony:syslog, drivers). Le front réhydrate via Object.assign(new Pdu(""), record) → une seule logique de rendu. Produite par pduToRecord.

ILogSink#

interface ILogSink

IPduLike#

interface IPduLike

Sous-ensemble des champs d’un Pdu lus par filterPdus et pduToRecord. Permet de filtrer/projeter SANS instancier un Pdu — son constructeur incrémente un compteur d’uid et lit le requestIdProvider, donc effets de bord à proscrire lors d’une simple RELECTURE. Un Pdu le satisfait structurellement ; un enregistrement relu d’un fichier JSONL (driver file, LB.2) aussi → une SEULE logique de filtrage pour memory, file et le futur CLI.

LokiLogDriverOptions#

interface LokiLogDriverOptions

LokiTransportOptions#

interface LokiTransportOptions extends BatchTransportOptions

OpenSearchLogDriverOptions#

interface OpenSearchLogDriverOptions

OpenSearchTransportOptions#

interface OpenSearchTransportOptions extends BatchTransportOptions

Types (9)#

FetchLike#

type FetchLike = (url: string, init?: FetchInitLike) => Promise<FetchResponseLike>

Signature compatible globalThis.fetch (surface réduite).

FlowStepId#

type FlowStepId = "request-in" | "body-received" | "route-matched" | "kernel-dispatch" | "response" | "request-end" | "finish" | "ws-open" | "ws-message" | "ws-close" | "session" | "session-saved"

Étape logique du cycle de vie d’une requête / connexion — identifiant STABLE (clé de filtre côté back ET clé de mapping libellé/couleur côté front).

ILogDriverFactory#

type ILogDriverFactory = (ctx: ILogDriverContext) => ILogDriverMount | null

Fabrique d’un driver. Retourne null si la config est insuffisante (ex. URL absente).

LogProtocol#

type LogProtocol = "ws" | "http"

Protocole d’origine d’un enregistrement de log.

Message#

type Message = string

Msgid#

type Msgid = string

Pci#

type Pci = unknown

Severity#

type Severity = SeverityKeys | SeverityValues

SeverityName#

type SeverityName = (typeof SEVERITY_NAMES)[number]

Un nom de sévérité RFC 5424.


← Toutes les références d’API