where is log file in nodejs app with winston

5.6k views Asked by At

I can not find in my app directory where is 'test.log' file?

below code is 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');

my app directory:

/
  app/
  config/
  public/
  server.js
2

There are 2 answers

5
Brandon On BEST ANSWER

Interesting question. Looking at the source code for the file transport, it appears that the directory, if not specified, is derived from the filename parameter itself. It seems to suggest that you either use an absolute path or relative path with a directory explicitly specified.

This line is where it figures out the absolute path.

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

self.dirname is setup here:

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

so the question is that if options.filename does not include a directory, what does path.dirname return?

I do not actually know, but there are two possibilities I would suspect:

  • Current working directory of the process
  • The file system root, because if path.dirname takes what is left of the last /, then it is undefined and undefined + '/test.log' is '/test.log'

There are two steps you can take:

  • Check the current directory and file system root to see which it is. (in other words, test the theories)
  • Specify the directory explicitly (probably a good idea anyway)

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

0
starshine wang On

I wrote a test file like this:

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();

and I found that if I deleted the last line, the log file would be created and logged correctly.

I used process.exit() to break my program as I just wanted to test the logger, and it looked like it somehow broke the process on log file as well.

Check this issue: https://github.com/winstonjs/winston/issues/228