2013-03-27 3 views

Antwort

13

Also habe ich es aus:

>phantomjs.exe file_to_run.js > my_log.txt 
+11

Während dies funktioniert, wird auch potenziell unerwünschter Inhalt in die Datei geschrieben, z. B. JavaScript-Fehler und andere phantomjs-Fehler. Du bist besser dran mit Aruns Antwort, damit du genau kontrollieren kannst, was geschrieben wird. – zoltar

+5

, die nicht mit phantomjs in Datei schreibt. das ist nur Standard-Standard-Umleitung, und so ist keine Antwort auf die Frage. – oligofren

+1

gut für die schnelle und schmutzige Anzeige der console.log Nachrichten obwohl. –

41

Folgendes kann durch PhantomJS direkt Inhalte in die Datei schreiben: Kann nicht

var fs = require('fs'); 
    try { 
    fs.write("/home/username/sampleFileName.txt", "Message to be written to the file", 'w'); 
    } catch(e) { 
     console.log(e); 
    } 
    phantom.exit(); 

Der Befehl in der Antwort von user984003 wenn einige Warnung ist oder Ausnahmen aufgetreten. Und manchmal fällt es nicht in unsere spezifischen Anforderungen, denn in einigen Codebasen bekomme ich immer die folgende Nachricht, die auch in dieser Datei protokolliert wird.

Refused to display document because display forbidden by X-Frame-Options. 
9

können Sie original console.log Funktion außer Kraft setzen, einen Blick auf diese:

Object.defineProperty(console, "toFile", { 
    get : function() { 
     return console.__file__; 
    }, 
    set : function(val) { 
     if (!console.__file__ && val) { 
      console.__log__ = console.log; 
      console.log = function() { 
       var fs = require('fs'); 
       var msg = ''; 
       for (var i = 0; i < arguments.length; i++) { 
        msg += ((i === 0) ? '' : ' ') + arguments[i]; 
       } 
       if (msg) { 
        fs.write(console.__file__, msg + '\r\n', 'a'); 
       } 
      }; 
     } 
     else if (console.__file__ && !val) { 
      console.log = console.__log__; 
     } 
     console.__file__ = val; 
    } 
}); 

Dann können Sie dies tun:

console.log('this will go to console'); 
console.toFile = 'test.txt'; 
console.log('this will go to the test.txt file'); 
console.toFile = ''; 
console.log('this will again go to the console'); 
+0

Das ist großartig, weil dies nicht nur die phantom.js Ausgabe in die Datei sondern auch alle anderen console.log Einträge bringt, was es ermöglicht, die Tests selbst zu debuggen. Ein Zusatz wäre, (noch) auf die Konsole auszugeben, indem man die Zeile 'console .__ log __. Apply (console, arguments);' nach 'fs.write()' hinzufügt, wodurch die normale Konsolenausgabe normal verarbeitet werden kann CI-Läufer. – Gyuri

+0

Noch eine Sache: Die 'fs.write' Zeile ist heute ' fs.writeFileSync (Konsole .__ Datei__, msg + '\ r \ n', {Flag: 'a'}); ' – Gyuri