簡體   English   中英

記錄錯誤:錯誤:ENOENT:沒有這樣的文件或目錄

[英]Logging Error : Error: ENOENT: no such file or directory

我正在嘗試在節點 js 中使用日志記錄。

這是我的 logger_service.js

var appConfig   = require('../config/service');
var bunyan = require('bunyan');

var logLocation = '/logs/test.log'
var logger = bunyan.createLogger({
    name: 'TEST',
    streams: [{
        type: 'rotating-file',
        path: logLocation,
        period: '1d',
        count: 21
    }]
});

logger.info('location of log file : ' + logLocation);

module.exports = logger;

當我使用 this 時,出現錯誤。

我的 test.js

var moment = require('moment');
var current_date = moment(new Date()).format('YYYY.MM.DD');
var logger = require('./logger_service');

var testing = function () {
    logger.info(current_date)
};

testing();

我收到以下錯誤:

➜ test_dir node log-monitor/service/test.js      
events.js:141
      throw er; // Unhandled 'error' event
      ^
Error: ENOENT: no such file or directory, open '/logs/test.log'
    at Error (native)

請幫忙。 謝謝你。

我的 app.js 文件。

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');
var moment = require('moment');
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

除了日志記錄之外,其他一切都運行良好。

chandoo 提到的答案部分可行,但是,您在使用時可能會遇到問題

streams: [{
    type: 'rotating-file',
    path: logLocation,
    period: '1d',
    count: 21
}]

旋轉文件是這里的主要問題,bunyan 社區已經概述如下。 我遇到了同樣的問題,當我使用“旋轉文件”和相關計數屬性刪除時,一切順利。 你也可以考慮。 嘗試替代日志輪換選項,例如 Linux logrotate 工具。

關於集群使用的警告:將 bunyan-rotating-file-stream 與 node.js 的“集群”模塊一起使用可能會導致意外的文件旋轉。 集群中不能有多個進程記錄到同一文件路徑。 換句話說,您必須為集群中的 master 和每個 worker 擁有單獨的日志文件路徑。 或者,考慮使用系統文件輪換工具,例如 Linux 上的 logrotate 或 SmartOS/Illumos 上的 logadm。 有關詳細信息,請參閱問題 #117 上的此評論。

我也遇到過這個問題。

我通過在路徑中手動創建日志文件夾來修復它。 我還發現了一個錯誤。 我也安裝了依賴項,但我認為沒有必要。

npm install async lodash semver strftime --save

更改var logLocation = './logs/test.log';

之前加點。 要將日期添加到您的日志中,您還必須安裝 bunyan-rotating-file-stream。

路徑:'./logs/server-%Y%m%d.log',

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM