[node.js] nodejs 로그 파일은 어디에 있습니까?

nodejs 로그 파일이 저장된 위치를 찾을 수 없습니다. 내 노드 서버에 “세그멘테이션 오류”가 있기 때문에 추가 정보를 위해 로그 파일을보고 싶습니다.



답변

로그 파일이 없습니다. 각 node.js “앱”은 별도의 엔티티입니다. 기본적으로 STDERR에 오류를 기록하고 STDOUT에 출력합니다. 셸에서 실행할 때 대신 파일에 기록하도록 변경할 수 있습니다.

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

또는 (권장) 수동으로 또는 여러 로그 라이브러리 중 하나를 사용하여 애플리케이션 내부에 로깅을 추가 할 수 있습니다.


답변

영원히 관심을 가질 수 있습니다. 로깅 옵션을 사용하여 .js 파일을 연중 무휴 24 시간 실행합니다. 다음은 도움말 텍스트의 두 가지 스 니펫입니다.

[Long Running Process] forever 프로세스는 콘솔에 로그 메시지를 출력하면서 계속 실행됩니다. 전의. 영원히 -o out.log -e err.log my-script.js

[Daemon] forever 프로세스는 대상 프로세스를 백그라운드에서 시작하는 데몬으로 실행됩니다. 이것은 nohup을 사용하지 않고 간단한 node.js 스크립트를 원격 시작하는 데 매우 유용합니다. -o -l 및 -e로 시작하는 것이 좋습니다. 전의. forever start -l forever.log -o out.log -e err.log my-daemon.js forever stop my-daemon.js


답변

dev에서 docker를 사용하는 경우 다른 셸에서이 작업을 수행 할 수 있습니다. docker attach running_node_app_container_name

그러면 STDOUT과 STDERR이 표시됩니다.


답변

nodejs 로그 파일의 경우 winston 및 morgan을 사용하고 console.log () 문 사용자 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');


답변