// 스마트공장 활용 로그 전송 유틸리티 // https://log.smart-factory.kr 에 사용자 접속 로그를 전송 import axios from "axios"; import { logger } from "./logger"; const SMART_FACTORY_LOG_URL = "https://log.smart-factory.kr/apisvc/sendLogDataJSON.do"; /** * 스마트공장 활용 로그 전송 * 로그인 성공 시 비동기로 호출하여 응답을 블로킹하지 않음 */ export async function sendSmartFactoryLog(params: { userId: string; remoteAddr: string; useType?: string; }): Promise { const apiKey = process.env.SMART_FACTORY_API_KEY; if (!apiKey) { logger.warn( "SMART_FACTORY_API_KEY 환경변수가 설정되지 않아 스마트공장 로그 전송을 건너뜁니다." ); return; } try { const now = new Date(); const logDt = formatDateTime(now); const logData = { crtfcKey: apiKey, logDt, useSe: params.useType || "접속", sysUser: params.userId, conectIp: params.remoteAddr, dataUsgqty: "", }; const encodedLogData = encodeURIComponent(JSON.stringify(logData)); const response = await axios.get(SMART_FACTORY_LOG_URL, { params: { logData: encodedLogData }, timeout: 5000, }); logger.info("스마트공장 로그 전송 완료", { userId: params.userId, status: response.status, }); } catch (error) { // 스마트공장 로그 전송 실패해도 로그인에 영향 없도록 에러만 기록 logger.error("스마트공장 로그 전송 실패", { userId: params.userId, error: error instanceof Error ? error.message : error, }); } } /** yyyy-MM-dd HH:mm:ss.SSS 형식 */ function formatDateTime(date: Date): string { const y = date.getFullYear(); const M = String(date.getMonth() + 1).padStart(2, "0"); const d = String(date.getDate()).padStart(2, "0"); const H = String(date.getHours()).padStart(2, "0"); const m = String(date.getMinutes()).padStart(2, "0"); const s = String(date.getSeconds()).padStart(2, "0"); const ms = String(date.getMilliseconds()).padStart(3, "0"); return `${y}-${M}-${d} ${H}:${m}:${s}.${ms}`; }