Где находится файл журнала nodejs?


112

Я не могу найти место, где хранится файл журнала nodejs. Поскольку на моем сервере узла у меня есть "Ошибка сегментации", я хочу посмотреть файл журнала для получения дополнительной информации ...

Ответы:


120

Нет файла журнала. Каждое «приложение» node.js - это отдельный объект. По умолчанию он регистрирует ошибки в STDERR и выводит их в STDOUT. Вы можете изменить это, когда запустите его из своей оболочки, чтобы вместо этого регистрироваться в файле.

node my_app.js > my_app_log.log 2> my_app_err.log

В качестве альтернативы (рекомендуется) вы можете добавить ведение журнала в свое приложение вручную или с помощью одной из многих библиотек журналов:


22

навсегда может быть вам интересен. Он будет запускать ваш .js-файл 24/7 с параметрами ведения журнала. Вот два фрагмента текста справки:

[Длительный процесс] Постоянный процесс продолжит вывод сообщений журнала на консоль. ех. навсегда -o out.log -e err.log my-script.js

и

[Демон] Постоянный процесс будет запущен как демон, который запустит целевой процесс в фоновом режиме. Это чрезвычайно полезно для удаленного запуска простых скриптов node.js без использования nohup. Рекомендуется запускать start с -o -l, & -e. ех. forever start -l forever.log -o out.log -e err.log my-daemon.js навсегда остановить my-daemon.js


4

Если вы используете docker в своем разработчике, вы можете сделать это в другой оболочке: docker attach running_node_app_container_name

Это покажет вам STDOUT и STDERR.


2

Для файла журнала nodejs вы можете использовать winston и morgan, а вместо оператора console.log () user winston.log () или другие методы Winston для входа. Для работы с winston и morgan вам необходимо установить их с помощью npm. Пример: npm i -S winston npm i -S morgan

Затем создайте в своем проекте папку с именем winston, а затем создайте в этой папке config.js и скопируйте приведенный ниже код.

const appRoot = require('app-root-path');
const winston = require('winston');

// define the custom settings for each transport (file, console)
const options = {
  file: {
    level: 'info',
    filename: `${appRoot}/logs/app.log`,
    handleExceptions: true,
    json: true,
    maxsize: 5242880, // 5MB
    maxFiles: 5,
    colorize: false,
  },
  console: {
    level: 'debug',
    handleExceptions: true,
    json: false,
    colorize: true,
  },
};

// instantiate a new Winston Logger with the settings defined above
let logger;
if (process.env.logging === 'off') {
  logger = winston.createLogger({
    transports: [
      new winston.transports.File(options.file),
    ],
    exitOnError: false, // do not exit on handled exceptions
  });
} else {
  logger = winston.createLogger({
    transports: [
      new winston.transports.File(options.file),
      new winston.transports.Console(options.console),
    ],
    exitOnError: false, // do not exit on handled exceptions
  });
}

// create a stream object with a 'write' function that will be used by `morgan`
logger.stream = {
  write(message) {
    logger.info(message);
  },
};

module.exports = logger;

После копирования приведенного выше кода создайте папку с журналами имен, параллельными Winston или где угодно, и создайте файл app.log в этой папке журналов. Вернитесь в config.js и укажите путь в 5-й строке «filename: ${appRoot}/logs/app.log» к соответствующему журналу app.log, созданному вами.

После этого перейдите в свой index.js и включите в него следующий код.

const morgan = require('morgan');
const winston = require('./winston/config');
const express = require('express');
const app = express();
app.use(morgan('combined', { stream: winston.stream }));

winston.info('You have successfully started working with winston and morgan');
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.