Nodejs не пишет в лог-файл на производстве - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь записать HTTP-запросы в файл .log.

Я создаю и пишу его так.

const accessLogStream = fs.createWriteStream(path.join(__dirname, 'logger.log'), { flags: 'a' });

и пишу в него через промежуточное ПО.

app.use((req, res, next) => {
  const start = process.hrtime()
  res.on('finish', () => {            
      const durationInMilliseconds = getDurationInMilliseconds (start);     accessLogStream.write(`${req.method}\t\t${req.originalUrl}\t\t${res.statusCode}\t\t${Math.trunc(durationInMilliseconds).toLocaleString()}ms\n`)
  })
  next()
})

при достижении конечной точки /logs Я читаю данные в файле

app.get('/api/v1/on-covid-19/logs?',(req,res) => {
    fs.readFile('./logger.log', 'utf8', function(err, data) {
        if (err) throw err;
        // line by line
        res.format({
            'text/plain': function () {
              res.send(data)}})
    }) 
});

Приведенная выше функция может записывать в мой файл logger.log в devt, но не обновляет logger.log файл в производстве heroku. Что я не делаю?

Удар по конечной точке /logs возвращает пустую строку data в производстве.

1 Ответ

1 голос
/ 13 апреля 2020

Heroku Dynos использует эфемерную файловую систему , это файловая система для чтения / записи, которая доступна только до тех пор, пока Dyno работает, как только Dyno перезапускается или останавливается (что произойдет при минимум каждые 24 часа) любые изменения, которые были записаны в файловую систему, будут уничтожены. Когда запускается новый Dyno, он будет иметь ту же файловую систему, которая была скомпилирована при сборке приложения во время развертывания.

Для журналов приложений настоятельно рекомендуется использовать logging addon для потоковой передачи и хранения журналов в выделенном сервисе. Если вам нужно хранить журналы как файлы, вам необходимо использовать систему хранения данных, такую ​​как AWS S3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...