스프레드시트 활용

[자동화 스크립트 6] 자동화 모니터링 및 로깅

JS's Spreadsheets 2025. 9. 3. 20:35

🔗 지금 바로 사용해보세요!

📥 자동화와 매크로 스프레드시트 바로가기

클릭  번으로 바로 접속해서 복사하여 사용하실  있습니다

 

실행 로그 관리 시스템

function createAutomationLog() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 
  // 로그 시트가 없으면 생성
  try {
    var logSheet = spreadsheet.getSheetByName("자동화로그");
  } catch (e) {
    var logSheet = spreadsheet.insertSheet("자동화로그");
   
    // 로그 시트 헤더 설정
    logSheet.getRange("A1:F1").setValues([[
      "실행일시", "함수명", "상태", "실행시간(ms)", "처리건수", "오류메시지"
    ]]);
    logSheet.getRange("A1:F1").setFontWeight("bold");
  }
 
  return logSheet;
}

function logAutomationExecution(functionName, status, executionTime, processedCount, errorMessage) {
  var logSheet = createAutomationLog();
  var newRow = logSheet.getLastRow() + 1;
 
  logSheet.getRange(newRow, 1, 1, 6).setValues([[
    new Date(),
    functionName,
    status,
    executionTime || 0,
    processedCount || 0,
    errorMessage || ""
  ]]);
}

// 개선된 재고 모니터링 (로깅 포함)
function monitorInventoryWithLogging() {
  var startTime = Date.now();
  var processedCount = 0;
  var errorMessage = "";
 
  try {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("재고관리");
    var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
   
    var alertItems = [];
   
    for (var i = 0; i < data.length; i++) {
      var row = i + 2;
      var productName = data[i][0];
      var currentStock = data[i][1];
      var safetyStock = data[i][2];
      
      if (currentStock <= safetyStock) {
        alertItems.push({
          name: productName,
          current: currentStock,
          safety: safetyStock
        });
      }
     
      processedCount++;
    }
   
    if (alertItems.length > 0) {
      sendInventoryAlert(alertItems);
    }
   
    var executionTime = Date.now() - startTime;
    logAutomationExecution("monitorInventory", "성공", executionTime, processedCount, "");
   
  } catch (error) {
    var executionTime = Date.now() - startTime;
    errorMessage = error.toString();
    logAutomationExecution("monitorInventory", "실패", executionTime, processedCount, errorMessage);
   
    // 관리자에게 오류 알림
    GmailApp.sendEmail(
      "admin@company.com",
      "자동화 오류 발생",
      "함수: monitorInventory\n오류: " + errorMessage
    );
  }
}