"프로덕션 환경에서는 console.log가 보이지 않는다" — electron-log를 사용하면 파일, 콘솔, 원격 서버로 로그를 체계적으로 관리할 수 있습니다.


설치와 기본 사용

BASH
npm install electron-log
JAVASCRIPT
// main.js
const log = require('electron-log');

log.info('앱이 시작되었습니다');
log.warn('설정 파일이 없어 기본값을 사용합니다');
log.error('데이터베이스 연결 실패:', error);
log.debug('디버그 정보:', { userId: 123, action: 'login' });

로그 레벨

레벨용도
error에러, 예외
warn경고
info일반 정보
verbose상세 정보
debug디버그용
silly매우 상세한 디버그

로그 파일 위치

electron-log는 자동으로 파일에 기록합니다.

PLAINTEXT
macOS:    ~/Library/Logs/앱이름/main.log
Windows:  %USERPROFILE%\AppData\Roaming\앱이름\logs\main.log
Linux:    ~/.config/앱이름/logs/main.log
JAVASCRIPT
// 로그 파일 경로 확인
console.log(log.transports.file.getFile().path);

// 로그 파일 설정
log.transports.file.maxSize = 10 * 1024 * 1024; // 10MB
log.transports.file.format = '[{y}-{m}-{d} {h}:{i}:{s}] [{level}] {text}';

에러 자동 캐칭

JAVASCRIPT
// 처리되지 않은 에러 자동 로깅
log.errorHandler.startCatching();

// 또는 수동으로
process.on('uncaughtException', (error) => {
  log.error('처리되지 않은 예외:', error);
});

process.on('unhandledRejection', (reason) => {
  log.error('처리되지 않은 Promise 거부:', reason);
});

렌더러에서 로깅

JAVASCRIPT
// main.js — 렌더러 로그를 메인에서 수신
ipcMain.on('log', (_event, level, message) => {
  log[level](`[Renderer] ${message}`);
});

// preload.js
contextBridge.exposeInMainWorld('log', {
  info: (msg) => ipcRenderer.send('log', 'info', msg),
  warn: (msg) => ipcRenderer.send('log', 'warn', msg),
  error: (msg) => ipcRenderer.send('log', 'error', msg),
  debug: (msg) => ipcRenderer.send('log', 'debug', msg),
});

// renderer.js
window.log.info('페이지 로드 완료');
window.log.error('API 호출 실패');

로그 로테이션과 정리

JAVASCRIPT
// 오래된 로그 파일 정리
function cleanOldLogs(daysToKeep = 7) {
  const logDir = path.dirname(log.transports.file.getFile().path);
  const files = fs.readdirSync(logDir);
  const cutoff = Date.now() - daysToKeep * 24 * 60 * 60 * 1000;

  files.forEach(file => {
    const filePath = path.join(logDir, file);
    const stat = fs.statSync(filePath);
    if (stat.mtimeMs < cutoff) {
      fs.unlinkSync(filePath);
      log.info(`오래된 로그 삭제: ${file}`);
    }
  });
}

면접 포인트 정리

  • console.log는 패키징된 앱에서 확인 불가, 파일 로깅 필수
  • electron-log는 OS별 표준 로그 경로에 자동 저장
  • 에러 핸들러로 처리되지 않은 예외도 자동 기록
  • 로그 파일 크기 제한과 로테이션으로 디스크 관리

로깅을 설정했으면, 다음은 크래시 리포트를 알아봅시다.

댓글 로딩 중...