2016-02-12 12 views
6

Ich habe ein IoT-Projekt läuft auf einem Raspberry Pi 2 mit dem Raspbian Jessie OS.Loggly funktioniert nicht über Winston auf Pi

Es ist ein Webserver in NodeJS (v4) und ich benutze Winston, um Loggly Logging-Dienst zu loggen. Alles funktioniert gut, wenn das Projekt vom Terminal über npm start gestartet wird (wenn es als 'pi' oder über sudo -s läuft). Wenn das Projekt jedoch beim Booten startet, funktioniert die Protokollierung nicht und ich kann nicht herausfinden, warum.

Um das Projekt beim Booten zu starten, habe ich ein etc/init.d-Skript erstellt. Das Projekt startet und dient dem Verkehr, alles funktioniert gut außer dem Loggen. Ich kann keine Fehler sehen (obwohl das Protokollieren nicht hilft). Dies ist, wie ich mein Projekt aus meinem etc/init.d Skript starten:

/usr/bin/node /var/www/curtains/server.js 

Ich verwende winston: https://www.npmjs.com/package/winston und winston-loggly: https://www.npmjs.com/package/winston-loggly.

Irgendwelche Ideen warum, wenn der Prozess beim Booten gestartet wird, funktioniert die Protokollierung nicht?

Hinzufügen winston Initialisierungscode wie gewünscht:

var winston = require('winston'); 
require('winston-loggly'); 

winston.add(winston.transports.Loggly, { 
    token: "<snip>", 
    subdomain: "<snip>", 
    tags: ["tag", ip.address()], 
    json:true 
}); 

winston.log('info',"Server.js starting up"); 
+0

Haben Sie in Ihrer Protokollkonfiguration relative Pfade? Es wäre auch hilfreich, wenn Sie Ihre Winston-Initialisierung von 'server.js' sehen, können Sie diesen Code hinzufügen? –

+0

Initialisierungscode von server.js hinzugefügt - mir ist keine Protokollkonfiguration bekannt. – ConfusedNoob

Antwort

2

Wenn Sie npm start laufen, Knoten für eine Script-Objekt in Ihrer package.json Datei aussehen wird, und führen Sie die mit dem start Schlüssel zugeordnet Befehle.

In Ihrem init.d Skript laufen Sie nicht npm start, sondern nur Knoten ausgeführt und übergeben Sie Ihre server.js Datei als erstes Argument (die diese Datei ausführen wird).

Wahrscheinlich ist etwas in Ihrem start Skript erforderlich, um Ihre Protokollierung korrekt auszuführen. Um dies zu lösen, können Sie entweder:

  • In Ihrem init.d Skript, cwd zu einem Projekt Wurzel und dann npm start laufen.
  • Suchen Sie in Ihrem package.json, um zu sehen, was sonst Ihr start Skript macht, und fügen Sie das Äquivalent zu Ihrem init.d Skript hinzu.
+0

Das hat leider keinen Unterschied gemacht. Ich habe auch versucht, mein lokales Projekt auf die gleiche Weise zu führen, z. '/ usr/local/bin/node/Benutzer/Ich/Documents/Projects/server.js' und das hat gut funktioniert, Protokollierung wie erwartet. Es gibt auch kein 'Start'-Skript in meinem package.json - großartige Vorschläge, aber das sieht nicht so aus, als wäre es falsch. – ConfusedNoob

+0

Ich habe das Skript /etc/init.d aktualisiert, um das Arbeitsverzeichnis und den npm-Start zu ändern. Ich habe dann 'sudo -s' verwendet, um das Skript manuell auszuführen, z. '/etc/init.d/myscript start'. Das funktioniert gut, Logging ist gut. Allerdings, wenn das Skript beim Neustart ausgeführt wird ... nichts :( – ConfusedNoob