web-dev-qa-db-fra.com

Winston: comment faire pivoter les journaux

Comment puis-je faire pivoter les journaux lors de l'utilisation de Winston pour gérer la journalisation de node.js. Autrement dit, comment puis-je créer un nouveau fichier pour chaque jour d'exécution de l'application?

    var logger = new (winston.Logger)({
       transports: [
          new (winston.transports.Console)(),
          new (winston.transports.File)({ filename: '2012-07-09.log' })
      ]
});

logger.log('info', 'Test Log Message', { anything: 'This is metadata' });
37
Sparky1

auteur et mainteneur de winston ici.

La connexion à un nouveau fichier tous les jours est actuellement une demande de fonctionnalité ouverte: https://github.com/flatiron/winston/issues/1 . J'adorerais voir quelqu'un le mettre en œuvre.

Cela dit, il existe d'autres options:

  1. Le transport de fichiers accepte une option maxsize qui fera pivoter le fichier journal lorsqu'il dépasse une certaine taille en octets.

  2. Il y a aussi une pull-request ouverte avec un nouveau transport que je n'ai pas vraiment eu l'occasion de creuser dans "fileRotate", ce qui semble faire ce genre de rotation basée sur la date: https://github.com/flatiron/winston/pull/120/files

24
indexzero

La fonctionnalité est présente et nous l'utilisons en production, winston.transports.DailyRotateFile:

var timeFormatFn = function() {
    'use strict';
    return moment().format(cfg.timeFormat);
};

var logger = new(winston.Logger)({
    exitOnError: false,
    transports: [
        new(winston.transports.DailyRotateFile)({
            filename: cfg.appLogName,
            dirname: __dirname + '/../' + cfg.logsDirectory,
            datePattern: cfg.rollingDatePattern,
            timestamp: timeFormatFn
        }),
        new(winston.transports.Console)({
            colorize: true,
            timestamp: timeFormatFn
        })
    ]
});
24
Muki Buki

Selon l'auteur de winston-filerotatedate c'est un:

Transport de fichiers pour winston qui permet de faire pivoter les fichiers journaux en fonction de la taille et de l'heure.

Le transport de fichiers accepte un nom de fichier via l'option "nom de fichier" et utilise ce fichier comme cible de journalisation principale. Si le fichier dépasse les octets "maxsize", le fichier journal actuel est renommé et une nouvelle vignette de journal principale est créée. Le nom du fichier journal renommé est formaté en tant que "nom de baseYYYYMMDD [a-z] .bak".

Les options disponibles sont:

  • niveau: Niveau de messages que ce transport doit consigner.
  • silent: Drapeau booléen indiquant s'il faut supprimer la sortie.
  • horodatage: Indicateur booléen indiquant si nous devons ajouter la sortie aux horodatages (valeur par défaut true). Si la fonction est spécifiée, sa valeur de retour sera utilisée à la place des horodatages.
  • nom de fichier: Nom de fichier du fichier journal dans lequel écrire la sortie.
  • dirname: Le dossier dans lequel le fichier journal sera créé.
  • maxsize: Taille maximale en octets du fichier journal, si la taille est dépassée, un nouveau fichier est créé.
  • json: Si vrai, les messages seront enregistrés en JSON (vrai par défaut).
3
DanArl

Depuis le 18 décembre 2012, cette fonctionnalité est désormais disponible dans Winston (voir https://github.com/flatiron/winston/pull/205 )

1
Pejvan

Vous pouvez utiliser le code suivant pour faire pivoter les fichiers journaux quotidiennement:

var winston = require('winston');
require('winston-daily-rotate-file');
var transport = new (winston.transports.DailyRotateFile)({
    filename: './log',
    datePattern: 'yyyy-MM-dd.',
    prepend: true,
    level: info
});
var logger = new (winston.Logger)({
    transports: [
      transport
    ]
});
logger.info('Hello World!');
1
izhar ahmad