Я не могу найти место, где хранится файл журнала nodejs. Поскольку на моем сервере узла у меня есть "Ошибка сегментации", я хочу посмотреть файл журнала для получения дополнительной информации ...
Я не могу найти место, где хранится файл журнала nodejs. Поскольку на моем сервере узла у меня есть "Ошибка сегментации", я хочу посмотреть файл журнала для получения дополнительной информации ...
Ответы:
Нет файла журнала. Каждое «приложение» node.js - это отдельный объект. По умолчанию он регистрирует ошибки в STDERR и выводит их в STDOUT. Вы можете изменить это, когда запустите его из своей оболочки, чтобы вместо этого регистрироваться в файле.
node my_app.js > my_app_log.log 2> my_app_err.log
В качестве альтернативы (рекомендуется) вы можете добавить ведение журнала в свое приложение вручную или с помощью одной из многих библиотек журналов:
навсегда может быть вам интересен. Он будет запускать ваш .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
Если вы используете docker в своем разработчике, вы можете сделать это в другой оболочке: docker attach running_node_app_container_name
Это покажет вам STDOUT и STDERR.
Для файла журнала 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');