OS: Ubuntu 14.04
NodeJS: 6.2.0
ウィンストン: 2.2.0
次のコードはログファイルを作成しません。
const logger = new Winston.Logger({
level: 'verbose',
transports: [
new Winston.transports.Console({
timestamp: true
}),
new Winston.transports.File({
filename: 'app.log',
timestamp: true
})
]
});
logger.info('Holla');
ターミナルに正常にログを記録します。
2016-05-26T13:11:49.927Z - info: Holla
ただし、ログファイルは作成されません。
+1
+1
+1
+1
fs.stat()のノード6で問題があるようです
何らかの理由でコールバックfs.stat()を実行しませんでした
fs.stat(fullname, function (err, stats) {
if (err) {
if (err.code !== 'ENOENT') {
return self.emit('error', err);
}
return createAndFlush(0);
}
if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
//
// If `stats.size` is greater than the `maxsize` for
// this instance then try again
//
return self._incFile(function() {
checkFile(self._getFile());
});
}
createAndFlush(stats.size);
});
})(this._getFile());
修正されていますか?
私はこの問題を修正し、次のような絶対パスを指定しました。
winston.add(winston.transports.File, { filename:
$ {__ dirname} /logs/appError.log })
これは私のために働いています。 私は.gitignoreファイルが原因で、ツリービューパッケージの更新設定のAtomの中のプロジェクトのファイルディレクトリに表示されていなかったのAtomを使っウィンストンとプロジェクトの最近の問題を持っていた...(オプション:非表示VCSは無視されますファイル)
_ノード6.2.2とWinston2.2.0を使用します。_
コード:
'use strict';
let Winston = require('winston');
const logger = new Winston.Logger({
level: 'verbose',
transports: [
new Winston.transports.Console({
timestamp: true
}),
new Winston.transports.File({
filename: 'app.log',
timestamp: true
})
]
});
logger.info('Holla');
出力が{"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"}
app.logファイルを作成し、 2016-07-01T19:29:14.034Z - info: Holla
コンソールにログを記録します
私はちょうどこの問題に遭遇しました。 ディレクトリが最初に存在する必要があります。 winstonは新しいファイルを作成しますが、新しいディレクトリを作成しているようには見えません(たとえば、logs / app.jsにあるファイルにログインしようとしている場合は、「logs」ディレクトリを作成する必要があります)。
winstonがログフォルダ/ディレクトリが存在するかどうかを確認し、起動時にログフォルダ/ディレクトリが存在しない場合はログフォルダ/ディレクトリを作成します。 私はfsがこれを正しく行うことができると思いますか?
+1
+1
+1
if (!fs.existsSync('path') {
fs.mkdirSync('path');
}
http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/
私はこの問題を抱えていて、ダブルスラッシュを使用してそれを解決しました:
Logger.loggerInfo = new Winston.Logger({
level: 'info',
transports: [
new Winston.transports.File({
filename: process.cwd() + '\\logs\\info.log',
timestamp: true
})
]
});
いくつかの高度なロギングメカニズム(winstonを含む)を使用していくつかのテストを行いましたが、クリーンな終了(process.exit(0))を実行すると、ロガーがファイルに書き込めないようです。
クリーン出口を削除すると、問題が解決します。
@fvuilleumierそうです、ありがとう。ただし、削除は、たとえばCLIツールでは便利ではありません。 ただし、 process.exitCode = 0
(または任意のコード)を使用すると、ループを正常に終了できるため、完全に機能します。
ファイルを作成する例があります
const filename = path.join(__dirname, 'created-logfile.log');
const logger = winston.createLogger({
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename })
]
});
@fvuilleumier @nicosommiしかし、エラーをログに記録した後でアプリケーションを終了したい場合はどうなりますか? 散歩を見つけることができましたか?
一日の終わりに@danbrownboxjsスクリプトは最後まで実行される単なるファイルなので、特定の行の後でアプリケーションを終了する場合は、関数で適切な実行フローを構築する必要があります。
Macの相対パスでは機能しませんが、絶対パスが指定されている場合はファイルを作成します。
絶対使用か相対使用かは関係ありません。 トランスポートを動的に追加すると、機能しません。
function createLogFile(appName) {
pathUtils.ensureDirectoryExists('logs');
pathUtils.ensureDirectoryExists(`logs/${appName}`);
winston.add(winston.transports.File, {
level: 'debug',
//filename: `logs/${appName}/export-${Date.now()}.log`,
//filename: `${__dirname}/logs/${appName}/export-${Date.now()}.log`,
filename: `${process.cwd()}/logs/${appName}/export-${Date.now()}.log`,
json: false,
formatter: _formatLog()
});
}
ただし、このトランスポートをcreateLogger()
に追加すると、absoluteで機能します。
この答えは私のために働きます。
これが私のコードです:
「」
const winston = require( 'winston');
const logDir = 'ログ';
const fs = require( 'fs');
if(!fs.existsSync(logDir)){
fs.mkdirSync(logDir);
}
const logger = winston.createLogger({
レベル: '情報'、
フォーマット:winston.format.json()、
exitOnError:false、
トランスポート:[
new(require( 'winston-daily-rotate-file'))({
ファイル名: ${logDir}/logs.log
、
datePattern: 'YYYY-MM-DD-HH'、
zippedArchive:true、
レベル:「愚かな」
})、
new(require( 'winston-daily-rotate-file'))({
ファイル名: ${logDir}/errors.log
、
datePattern: 'YYYY-MM-DD-HH'、
zippedArchive:true、
レベル: 'エラー'
})
]、
});
エクスポート{ロガー};
logger.silly( '愚かなテスト');
logger.info( 'info test');
logger.warn( '警告テスト');
logger.error( 'エラーテスト');
「」
私はこの問題の最初の著者です(別のアカウント)。 私は戻ってきました...私は同じ問題を抱えていて、それをどのように解決したかを忘れたので🤣
最新の[email protected]
ますか? ログファイルを配置するディレクトリが存在することを確認しましたか( winston
はdirを作成しませんが、そのオプションまたはデフォルトの動作を行うPRを受け入れます)。 再び稼働できるようになったら、おそらくこの古い問題を閉じる必要があります:)
暇なときにPRに取り組んでいきたいので、お任せください👍
いいね! 👍これを閉じるために、#1465のディレクトリのものを追跡できます。 個別の問題をmaster
に対してテストし、問題が解決しない場合は新しい問題として開く必要があります。 ありがとう!
最も参考になるコメント
私はちょうどこの問題に遭遇しました。 ディレクトリが最初に存在する必要があります。 winstonは新しいファイルを作成しますが、新しいディレクトリを作成しているようには見えません(たとえば、logs / app.jsにあるファイルにログインしようとしている場合は、「logs」ディレクトリを作成する必要があります)。