Winston: Es werden keine Protokolldateien erstellt

Erstellt am 26. Mai 2016  ·  27Kommentare  ·  Quelle: winstonjs/winston

Betriebssystem: Ubuntu 14.04
NodeJS: 6.2.0
Winston: 2.2.0

Der folgende Code erstellt keine Protokolldatei:

const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

Es meldet sich gut am Terminal an:

2016-05-26T13:11:49.927Z - info: Holla

Aber keine Log-Datei erstellt.

Hilfreichster Kommentar

Ich bin gerade auf dieses Problem gestoßen. Das Verzeichnis muss zuerst existieren. winston erstellt neue Dateien für Sie, aber es scheint keine neuen Verzeichnisse für Sie zu erstellen (z. B. müssen Sie das Verzeichnis "logs" erstellen, wenn Sie versuchen, sich in einer Datei unter logs/app.js anzumelden).

Alle 27 Kommentare

+1

+1

+1

+1

Es scheint ein Problem in Knoten 6 in fs.stat() zu geben
Aus irgendeinem Grund wurde der Rückruf fs.stat () nie ausgeführt

    fs.stat(fullname, function (err, stats) {
      if (err) {
        if (err.code !== 'ENOENT') {
          return self.emit('error', err);
        }
        return createAndFlush(0);
      }

      if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
        //
        // If `stats.size` is greater than the `maxsize` for
        // this instance then try again
        //
        return self._incFile(function() {
          checkFile(self._getFile());
        });
      }

      createAndFlush(stats.size);
    });
  })(this._getFile()); 

Ist es behoben?

Ich habe dieses Problem behoben, indem ich den absoluten Pfad so angegeben habe:
winston.add(winston.transports.File, { filename: ${__dirname}/logs/appError.log })

Das funktioniert bei mir. Ich hatte vor kurzem ein Problem bei einem Projekt, bei dem Winston Atom verwendet, bei dem die .gitignore-Dateien aufgrund einer aktualisierten Einstellung im Baumansichtspaket nicht im Dateiverzeichnis des Projekts in Atom angezeigt wurden ... (Option: VCS Ignoriert ausblenden Dateien)

_Mit Node 6.2.2 und Winston 2.2.0._

Code:

'use strict';

let Winston = require('winston');


const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

Erstellt eine app.log-Datei mit der Ausgabe: {"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"} und protokolliert mit 2016-07-01T19:29:14.034Z - info: Holla in der Konsole

Ich bin gerade auf dieses Problem gestoßen. Das Verzeichnis muss zuerst existieren. winston erstellt neue Dateien für Sie, aber es scheint keine neuen Verzeichnisse für Sie zu erstellen (z. B. müssen Sie das Verzeichnis "logs" erstellen, wenn Sie versuchen, sich in einer Datei unter logs/app.js anzumelden).

Wish winston hat überprüft, ob der Protokollordner/das Verzeichnis vorhanden ist, und erstellt dann einen Protokollordner/-verzeichnis, falls es während des Startvorgangs nicht vorhanden ist. Ich denke fs kann das richtig machen?

+1

+1

+1

if (!fs.existsSync('path') {
    fs.mkdirSync('path');
}

http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/

Ich hatte dieses Problem und löse es mit doppelten Schrägstrichen:

        Logger.loggerInfo = new Winston.Logger({
            level: 'info',
            transports: [
                new Winston.transports.File({
                    filename: process.cwd() + '\\logs\\info.log',
                    timestamp: true
                })
            ]
        });

Ich habe mehrere Tests mit mehreren erweiterten Logging-Mechanismen (inkl. Winston) durchgeführt und es scheint, dass Logger nicht in der Lage sind, in eine Datei zu schreiben, wenn Sie einen sauberen Exit (process.exit(0)) durchführen.
Entfernen des sauberen Exits löst das Problem.

@fvuilleumier Sie haben Recht, danke, aber das Entfernen ist für CLI-Tools nicht bequem, z. Aber die Verwendung von process.exitCode = 0 (oder einem beliebigen Code) funktioniert perfekt, da die Schleife damit ordnungsgemäß beendet werden kann.

Es gibt ein Beispiel zum Erstellen einer Datei

const filename = path.join(__dirname, 'created-logfile.log');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename })
  ]
});

Dateibeispiel erstellen

@fvuilleumier @nicosommi aber was ist, wenn ich die Anwendung

@danbrownbox Am Ende des Tages ist ein js-Skript nur eine Datei, die bis zum Ende ausgeführt wird. Wenn Sie also die Anwendung nach einer bestimmten Zeile beenden möchten, müssen Sie nur den richtigen Ausführungsfluss für Ihre Funktion erstellen

Funktioniert nicht mit dem relativen Pfad auf meinem Mac, erstellt aber eine Datei, wenn der absolute Pfad angegeben wird.

Ob ich absolute oder relative verwende, spielt keine Rolle. Bei mir funktioniert es nicht, wenn ich den Transport dynamisch hinzufüge.

function createLogFile(appName) {
  pathUtils.ensureDirectoryExists('logs');
  pathUtils.ensureDirectoryExists(`logs/${appName}`);
  winston.add(winston.transports.File, {
    level: 'debug',
    //filename: `logs/${appName}/export-${Date.now()}.log`,
    //filename: `${__dirname}/logs/${appName}/export-${Date.now()}.log`,
    filename: `${process.cwd()}/logs/${appName}/export-${Date.now()}.log`,
    json: false,
    formatter: _formatLog()
  });
}

Wenn ich diesen Transport jedoch in createLogger() hinzufüge, funktioniert es mit absolut.

Diese Antwort funktioniert für mich.
Hier ist mein Code:
````
const winston = erfordern('winston');
const logDir = 'logs';
const fs = erfordern('fs');

if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}

const logger = winston.createLogger({
Ebene: 'Info',
Format: winston.format.json(),
exitOnError: falsch,
Transporte: [
new (require('winston-daily-rotate-file'))({
Dateiname: ${logDir}/logs.log ,
Datumsmuster: 'JJJJ-MM-TT-HH',
gezipptes Archiv: wahr,
Ebene: 'albern'
}),
new (require('winston-daily-rotate-file'))({
Dateiname: ${logDir}/errors.log ,
Datumsmuster: 'JJJJ-MM-TT-HH',
gezipptes Archiv: wahr,
Ebene: 'Fehler'
})
],
});

exportieren {Logger};

logger.silly('alberner Test');
logger.info('Infotest');
logger.warn('warntest');
logger.error('Fehlertest');
````

Ich bin der ursprüngliche Autor dieser Ausgabe (anderer Account). Ich bin zurück ... weil ich das gleiche Problem habe und vergessen habe, wie ich es gelöst habe 🤣

Verwenden Sie das neueste [email protected] ? Haben Sie sichergestellt, dass das Verzeichnis existiert, in dem sich die Protokolldatei befinden soll ( winston keine Verzeichnisse für Sie, obwohl wir eine PR akzeptieren würden, die dies zu einer Option oder sogar zum Standardverhalten macht). Wir sollten dieses alte Thema wahrscheinlich schließen, sobald wir Sie wieder zum Laufen bringen können :)

Ich wäre bereit, in meiner Freizeit an einer PR dafür zu arbeiten, also lass es bei mir

Cool! 👍 Um dies zu schließen, können wir das Verzeichnismaterial in #1465 verfolgen. Separate Probleme sollten gegen master getestet und als neue Probleme geöffnet werden, wenn die Probleme weiterhin bestehen. Vielen Dank!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen