2017-07-17 48 views
0

我的代碼:溫斯頓記錄拋出ENOENT

import winston from 'winston'; 

Meteor.startup(() => { 
    const env = process.env.NODE_ENV || 'development'; 
    const tsFormat =() => (new Date()).toLocaleTimeString(); 
    const logDir = 'log'; 
    const logger1 = new (winston.Logger)({ 
    transports: [ 
     // colorize the output to the console 
     new (winston.transports.Console)({ 
     timestamp: tsFormat, 
     colorize: true, 
     level: 'info', 
     }), 
     new (winston.transports.File)({ 
     filename: `${logDir}/results.log`, 
     timestamp: tsFormat, 
     level: env === 'development' ? 'debug' : 'info', 
     }), 
    ], 
    }); 
    logger1.info('Hello world'); 
    //logger1.warn('Warning message'); 
    //logger1.debug('Debugging info'); 
}); 

輸出:

I20170717-11:39:11.027(2)? 11:39:10 - info: Hello world 
W20170717-11:39:11.150(2)? (STDERR) 
W20170717-11:39:11.151(2)? (STDERR) events.js:72 
W20170717-11:39:11.152(2)? (STDERR)   throw er; // Unhandled 'error' event 
W20170717-11:39:11.152(2)? (STDERR)    ^
W20170717-11:39:11.153(2)? (STDERR) Error: ENOENT, open 'log/results.log' 

的results.log甚至沒有創建

更新:當我使用了一個文件名沒有路徑然後它工作)。

相關,但沒有幫助解決:
Node.js, can't open files. Error: ENOENT, stat './path/to/file'

問題是什麼?

+1

嘗試檢查目錄chmod,或手動創建文件等。有什麼改變嗎? –

+0

'log'目錄是否存在? – robertklep

+0

@robertklep nope – Gobliins

回答

0

Winston實際上並沒有創建你想要日誌文件去的目錄,這就是爲什麼你得到ENOENT

(我不是很熟悉,流星,但下面的說明,「普通」 Node.js的工作)

您可以實例溫斯頓以確保它的存在,使用前fs.mkdirSync手動創建目錄,雖然這隻會深入一層(如果路徑中有任何內容,它不會創建中間目錄)。

還有mkdirp.sync(),其中確實創建中間目錄。

使用同步版本更容易一些,而且由於這是一種在應用程序啓動期間只發生一次的操作,因此它不是瓶頸。