2013-12-12 15 views
5

Non riesco a trovare nella mia directory app il file 'test.log'?dove è il file di registro nell'app nodejs con winston

sotto il codice è in server.js

var winston = require('winston'), mylogger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)(), 
    new (winston.transports.File) ({filename: 'test.log'}) 
    ] 
}); 

mylogger.log('Hello world'); 

mia app directory:

/ 
    app/ 
    config/ 
    public/ 
    server.js 
+2

Probabilmente la directory di lavoro corrente ... – Brad

risposta

0

Domanda interessante. Osservando il codice sorgente per il trasporto di file, sembra che la directory, se non specificata, sia derivata dal parametro filename stesso. Sembra suggerire di utilizzare un percorso assoluto o un percorso relativo con una directory specificata esplicitamente.

Questa riga indica il percorso assoluto.

var fullname = path.join(self.dirname, target); 

self.dirname è messa a punto qui:

this.dirname = options.dirname || path.dirname(options.filename); 

Quindi la domanda è che se options.filename non include una directory, che cosa path.dirname ritorno?

Io in realtà non lo so, ma ci sono due possibilità ho il sospetto:

  • attuale directory di lavoro del processo
  • La radice del file system, perché se path.dirname prende ciò che resta del ultima /, allora è undefined e undefined + '/test.log' è '/test.log'

ci sono due passi si può prendere:

  • Controllare la directory corrente e il root del file system per vedere quale è. (In altre parole, verificare le teorie)
  • Specificare la directory in modo esplicito (probabilmente una buona idea in ogni caso)

https://github.com/flatiron/winston/blob/master/lib/winston/transports/file.js

+0

Io uso comando di ricerca nella finestra, non v'è alcun risultato. Cambiamo per usare {filename: '/test.log'}, non compare ancora nella directory con file server.js – user3044147

+0

nomefile: __dirname + '/debug.log'} in questo modo non funziona ancora – user3044147

+0

Hai controllato per eventuali problemi di permessi? – Brandon

0

ho scritto un file di test come questo:

var winston = require('winston'); 
var logger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)(), 
    new (winston.transports.File)({ filename: 'somefile.log' }) 
    ] 
}); 

logger.log('info', 'Hello distributed log files!'); 
logger.info('Hello again distributed logs'); 

process.exit(); 

e Ho scoperto che se avessi cancellato l'ultima riga, il file di log sarebbe stato creato e registrato correttamente.

Ho utilizzato process.exit() per interrompere il mio programma poiché volevo solo testare il registratore e sembrava che in qualche modo avesse interrotto il processo anche sul file di registro.

controllare questo problema: https://github.com/winstonjs/winston/issues/228