Wo ist die Protokolldatei von nodejs?


112

Ich kann keinen Ort finden, an dem die Protokolldatei von nodejs gespeichert ist. Da ich auf meinem Knotenserver einen "Segmentierungsfehler" habe, möchte ich in der Protokolldatei nach weiteren Informationen suchen ...

Antworten:


121

Es gibt keine Protokolldatei. Jede node.js "App" ist eine separate Entität. Standardmäßig werden Fehler in STDERR protokolliert und in STDOUT ausgegeben. Sie können dies ändern, wenn Sie es von Ihrer Shell aus ausführen, um stattdessen in einer Datei zu protokollieren.

node my_app.js > my_app_log.log 2> my_app_err.log

Alternativ (empfohlen) können Sie die Protokollierung in Ihrer Anwendung entweder manuell oder mit einer der vielen Protokollbibliotheken hinzufügen:


22

für immer könnte für Sie von Interesse sein. Es wird Ihre .js-Datei 24/7 mit Protokollierungsoptionen ausführen. Hier sind zwei Ausschnitte aus dem Hilfetext:

[Lang laufender Prozess] Der Prozess für immer wird weiterhin die Ausgabe von Protokollnachrichten an die Konsole ausführen. Ex. für immer -o out.log -e err.log my-script.js

und

[Daemon] Der Forever-Prozess wird als Daemon ausgeführt, wodurch der Zielprozess im Hintergrund gestartet wird. Dies ist äußerst nützlich, um einfache node.js-Skripte ohne Verwendung von nohup remote zu starten. Es wird empfohlen, start mit -o -l, & -e auszuführen. Ex. für immer starten -l für immer.log -o out.log -e err.log my-daemon.js für immer stoppen my-daemon.js


3

Wenn Sie Docker in Ihrem Entwickler verwenden, können Sie dies in einer anderen Shell tun: Docker hängen running_node_app_container_name an

Das zeigt dir STDOUT und STDERR.


2

Für die Protokolldatei von nodejs können Sie winston und morgan verwenden und anstelle Ihrer Anweisung console.log () den Benutzer winston.log () oder andere winston-Methoden zum Protokollieren verwenden. Für die Arbeit mit Winston und Morgan müssen Sie sie mit npm installieren. Beispiel: npm i -S winston npm i -S morgan

Erstellen Sie dann einen Ordner in Ihrem Projekt mit dem Namen winston und erstellen Sie dann eine config.js in diesem Ordner und kopieren Sie den unten angegebenen Code.

const appRoot = require('app-root-path');
const winston = require('winston');

// define the custom settings for each transport (file, console)
const options = {
  file: {
    level: 'info',
    filename: `${appRoot}/logs/app.log`,
    handleExceptions: true,
    json: true,
    maxsize: 5242880, // 5MB
    maxFiles: 5,
    colorize: false,
  },
  console: {
    level: 'debug',
    handleExceptions: true,
    json: false,
    colorize: true,
  },
};

// instantiate a new Winston Logger with the settings defined above
let logger;
if (process.env.logging === 'off') {
  logger = winston.createLogger({
    transports: [
      new winston.transports.File(options.file),
    ],
    exitOnError: false, // do not exit on handled exceptions
  });
} else {
  logger = winston.createLogger({
    transports: [
      new winston.transports.File(options.file),
      new winston.transports.Console(options.console),
    ],
    exitOnError: false, // do not exit on handled exceptions
  });
}

// create a stream object with a 'write' function that will be used by `morgan`
logger.stream = {
  write(message) {
    logger.info(message);
  },
};

module.exports = logger;

Erstellen Sie nach dem Kopieren des obigen Codes einen Ordner mit Namensprotokollen parallel zu Winston oder wo immer Sie möchten, und erstellen Sie eine Datei app.log in diesem Protokollordner. Gehen Sie zurück zu config.js und legen Sie den Pfad in der 5. Zeile "Dateiname: ${appRoot}/logs/app.log" zu dem von Ihnen erstellten app.log fest.

Gehen Sie danach zu Ihrer index.js und fügen Sie den folgenden Code hinzu.

const morgan = require('morgan');
const winston = require('./winston/config');
const express = require('express');
const app = express();
app.use(morgan('combined', { stream: winston.stream }));

winston.info('You have successfully started working with winston and morgan');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.