dsjang 2024-09-12
테이블 검증조건 수정, 클라이언트 종료조건, 로깅관련 수정
@c38fbfa1ffe509562e967c72d550178f6457603e
build.gradle
--- build.gradle
+++ build.gradle
@@ -47,7 +47,7 @@
     // https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2
     implementation 'org.apache.commons:commons-configuration2:2.10.1'
     // https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client
-    implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.4.1'
+    implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.1.4'
     // https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11
     implementation group: 'com.oracle.database.jdbc', name: 'ojdbc11', version: '23.5.0.24.07'
     // https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
src/main/java/com/munjaon/client/config/DataSourceConfig.java
--- src/main/java/com/munjaon/client/config/DataSourceConfig.java
+++ src/main/java/com/munjaon/client/config/DataSourceConfig.java
@@ -1,5 +1,6 @@
 package com.munjaon.client.config;
 
+import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -39,14 +40,38 @@
         System.out.println("MARIADB.URL : " + serverConfig.getString(dbms + ".URL"));
         System.out.println("MARIADB.USER : " + serverConfig.getString(dbms + ".USER"));
         System.out.println("MARIADB.PASSWORD : " + serverConfig.getString(dbms + ".PASSWORD"));
-        return DataSourceBuilder.create().type(HikariDataSource.class)
-                .driverClassName(serverConfig.getString(dbms + ".DRIVER"))
-                .url(serverConfig.getString(dbms + ".URL"))
-                .username(serverConfig.getString(dbms + ".USER"))
-                .password(serverConfig.getString(dbms + ".PASSWORD"))
-                .build();
+
+        HikariConfig hikariConfig = new HikariConfig();
+        hikariConfig.setDriverClassName(serverConfig.getString(dbms + ".DRIVER"));
+        hikariConfig.setJdbcUrl(serverConfig.getString(dbms + ".URL"));
+        hikariConfig.setUsername(serverConfig.getString(dbms + ".USER"));
+        hikariConfig.setPassword(serverConfig.getString(dbms + ".PASSWORD"));
+        hikariConfig.setMaximumPoolSize(10);
+        if ("ORACLE".equalsIgnoreCase(dbms) || "TIBERO".equalsIgnoreCase(dbms)) {
+            hikariConfig.setConnectionTestQuery("SELECT 1 FROM DUAL");
+        } else {
+            hikariConfig.setConnectionTestQuery("SELECT 1");
+        }
+
+        return new HikariDataSource(hikariConfig);
     }
 
+//    @Primary
+//    @Bean(name = "datasource")
+//    public DataSource dataSource() throws ConfigurationException {
+//        String dbms = serverConfig.getString("DB.DBMS");
+//        System.out.println("MARIADB.DRIVER : " + serverConfig.getString(dbms + ".DRIVER"));
+//        System.out.println("MARIADB.URL : " + serverConfig.getString(dbms + ".URL"));
+//        System.out.println("MARIADB.USER : " + serverConfig.getString(dbms + ".USER"));
+//        System.out.println("MARIADB.PASSWORD : " + serverConfig.getString(dbms + ".PASSWORD"));
+//        return DataSourceBuilder.create().type(HikariDataSource.class)
+//                .driverClassName(serverConfig.getString(dbms + ".DRIVER"))
+//                .url(serverConfig.getString(dbms + ".URL"))
+//                .username(serverConfig.getString(dbms + ".USER"))
+//                .password(serverConfig.getString(dbms + ".PASSWORD"))
+//                .build();
+//    }
+
     @Primary
     @Bean(name = "factory")
     public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
src/main/java/com/munjaon/client/cubrid/service/CubridService.java
--- src/main/java/com/munjaon/client/cubrid/service/CubridService.java
+++ src/main/java/com/munjaon/client/cubrid/service/CubridService.java
@@ -20,7 +20,7 @@
         try {
             int msgCount = deliverBMapper.checkTableForMessage();
             int logCount = deliverBMapper.checkTableForLog();
-            if (msgCount >= 0 && logCount >= 0) {
+            if (msgCount > 0 && logCount > 0) {
                 isExist = true;
             }
         } catch (Exception e) {
src/main/java/com/munjaon/client/mariadb/service/MariaDBService.java
--- src/main/java/com/munjaon/client/mariadb/service/MariaDBService.java
+++ src/main/java/com/munjaon/client/mariadb/service/MariaDBService.java
@@ -20,7 +20,7 @@
         try {
             int msgCount = deliverBMapper.checkTableForMessage();
             int logCount = deliverBMapper.checkTableForLog();
-            if (msgCount >= 0 && logCount >= 0) {
+            if (msgCount > 0 && logCount > 0) {
                 isExist = true;
             }
         } catch (Exception e) {
src/main/java/com/munjaon/client/mssql/service/MssqlService.java
--- src/main/java/com/munjaon/client/mssql/service/MssqlService.java
+++ src/main/java/com/munjaon/client/mssql/service/MssqlService.java
@@ -20,7 +20,7 @@
         try {
             int msgCount = deliverBMapper.checkTableForMessage();
             int logCount = deliverBMapper.checkTableForLog();
-            if (msgCount >= 0 && logCount >= 0) {
+            if (msgCount > 0 && logCount > 0) {
                 isExist = true;
             }
         } catch (Exception e) {
src/main/java/com/munjaon/client/mysql/service/MysqlService.java
--- src/main/java/com/munjaon/client/mysql/service/MysqlService.java
+++ src/main/java/com/munjaon/client/mysql/service/MysqlService.java
@@ -20,7 +20,7 @@
         try {
             int msgCount = deliverBMapper.checkTableForMessage();
             int logCount = deliverBMapper.checkTableForLog();
-            if (msgCount >= 0 && logCount >= 0) {
+            if (msgCount > 0 && logCount > 0) {
                 isExist = true;
             }
         } catch (Exception e) {
src/main/java/com/munjaon/client/oracle/service/OracleService.java
--- src/main/java/com/munjaon/client/oracle/service/OracleService.java
+++ src/main/java/com/munjaon/client/oracle/service/OracleService.java
@@ -20,7 +20,7 @@
         try {
             int msgCount = deliverBMapper.checkTableForMessage();
             int logCount = deliverBMapper.checkTableForLog();
-            if (msgCount >= 0 && logCount >= 0) {
+            if (msgCount > 0 && logCount > 0) {
                 isExist = true;
             }
         } catch (Exception e) {
src/main/java/com/munjaon/client/postgresql/service/PostgresqlService.java
--- src/main/java/com/munjaon/client/postgresql/service/PostgresqlService.java
+++ src/main/java/com/munjaon/client/postgresql/service/PostgresqlService.java
@@ -20,7 +20,7 @@
         try {
             int msgCount = deliverBMapper.checkTableForMessage();
             int logCount = deliverBMapper.checkTableForLog();
-            if (msgCount >= 0 && logCount >= 0) {
+            if (msgCount > 0 && logCount > 0) {
                 isExist = true;
             }
         } catch (Exception e) {
src/main/java/com/munjaon/client/server/packet/Packet.java
--- src/main/java/com/munjaon/client/server/packet/Packet.java
+++ src/main/java/com/munjaon/client/server/packet/Packet.java
@@ -5,6 +5,10 @@
 public final class Packet {
     public static final byte SET_DEFAULT_BYTE = (byte) 0x00;
     public static final long LINK_CHECK_CYCLE = 10000L;
+    /* 패킷 만료 시간 체크 */
+    public static final long LIMIT_PACKET_TIMEOUT = 25000L;
+    /* 패킷을 보내고 수신시까지 타임아웃 체크시간 */
+    public static final long LIMIT_PACKET_SEND_TIMEOUT = 30000L;
 //    public static final long LINK_CHECK_CYCLE = 30000L;
 
     public static void setDefaultByte(ByteBuffer buffer) {
src/main/java/com/munjaon/client/server/service/CollectClientService.java
--- src/main/java/com/munjaon/client/server/service/CollectClientService.java
+++ src/main/java/com/munjaon/client/server/service/CollectClientService.java
@@ -80,12 +80,19 @@
         }
     }
 
+    private boolean checkTimeOut() {
+        return System.currentTimeMillis() - lastPacketSendTime >= Packet.LIMIT_PACKET_TIMEOUT;
+    }
+
     @Override
     public void doService() {
         bind();
         while (isRun()) {
             try {
-//                saveSystemLog("Root Path : " + System.getProperty("ROOTPATH"));
+                if (checkTimeOut()) {
+                    saveSystemLog("[checkTimeOut : Expired ... ... ... ... ... ... ...]");
+                    break;
+                };
                 messageService();
                 linkCheckService();
             } catch (Exception e) {
@@ -103,7 +110,12 @@
         try {
             saveSystemLog("[BIND REQUEST] [IP : " + this.address + "] [PORT : " + this.port + "] [ID : " + this.id + "]");
             socketChannel.write(sendBuffer);
+            long BIND_SEND_TIME = System.currentTimeMillis();
             while (true) {
+                if (System.currentTimeMillis() - BIND_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveSystemLog("[bindTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new RuntimeException("bindTimeOut : Expired ... ... ... ... ... ... ...");
+                }
                 int recvCount = socketChannel.read(recvBuffer);
                 if (recvCount == -1) {
                     saveSystemLog("[BIND ERROR] [CONNECTION CLOSED]");
@@ -172,17 +184,24 @@
             return;
         }
 
-        for (MunjaonMsg data : list) {
-            switch (this.serviceType) {
-                case "SMS": smsMessageService(data); break;
-                case "LMS": lmsMessageService(data); break;
-                case "MMS": mmsMessageService(data); break;
-                case "KAT": katMessageService(data); break;
-                case "KFT": kftMessageService(data); break;
-                default:break;
+        try {
+            for (MunjaonMsg data : list) {
+                switch (this.serviceType) {
+                    case "SMS": smsMessageService(data); break;
+                    case "LMS": lmsMessageService(data); break;
+                    case "MMS": mmsMessageService(data); break;
+                    case "KAT": katMessageService(data); break;
+                    case "KFT": kftMessageService(data); break;
+                    default:break;
+                }
             }
+        } catch (Exception e) {
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
         }
-        if (this.deliverList != null && this.deliverList.size() > 0) {
+
+        if (this.deliverList != null && !this.deliverList.isEmpty()) {
             worker.updateDeliverForList(this.deliverList);
             this.deliverList = null;    // NULL로 초기화
         }
@@ -218,7 +237,12 @@
             saveSystemLog("[MESSAGE SEND] [... ...]");
             saveSystemLog("[MESSAGE DATA : " + data.toString() + "]");
             socketChannel.write(sendBuffer);
+            long MSG_SEND_TIME = System.currentTimeMillis();
             while (true) {
+                if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
+                }
                 int recvCount = socketChannel.read(recvBuffer);
                 if (recvCount == -1) {
                     saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
@@ -232,8 +256,10 @@
                 }
             }
         } catch (IOException e) {
-            e.printStackTrace();
-//            throw new RuntimeException(e);
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
+            throw new RuntimeException(e);
         }
     }
 
@@ -267,27 +293,44 @@
             saveSystemLog("[MESSAGE SEND] [... ...]");
             saveSystemLog("[MESSAGE DATA : " + data.toString() + "]");
             socketChannel.write(sendBuffer);
+            long MSG_SEND_TIME = System.currentTimeMillis();
             while (true) {
+                if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
+                }
                 int recvCount = socketChannel.read(recvBuffer);
                 if (recvCount == -1) {
                     saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
                     throw new RuntimeException("DELIVER ERROR");
                 } else if (recvCount > 0) {
-                    worker.updateToDeliver(data.getMsgId());
+                    setDeliverMsgId(data.getMsgId());
+//                    worker.updateToDeliver(data.getMsgId());
                     saveSystemLog("[MESSAGE SEND] [SUCCESS]");
                     lastPacketSendTime = System.currentTimeMillis();
                     break;
                 }
             }
         } catch (IOException e) {
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
             throw new RuntimeException(e);
         }
     }
 
     private void mmsMessageService(MunjaonMsg data) {
         try {
+            /* 이미지 경로 디폴트 경로 사용 여부 */
+            String defaultYn = getProp("MMS", "DEFAULT_PATH_YN");
             /* MMS Image 저장 경로 */
-            String path = System.getProperty("ROOTPATH") + File.separator + "mmsfile" + File.separator;
+            String path = null;
+            if ("Y".equals(defaultYn)) {
+                path = System.getProperty("ROOTPATH") + File.separator + "mmsfile" + File.separator;
+            } else {
+                path = getProp("MMS", "FILEPATH") + File.separator;
+            }
+
             /* 공통 메시지 유효성 체크 */
             int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data);
             int checkMsgCode = MessageCheckUtil.validateMessageForMedia(data);
@@ -363,29 +406,43 @@
             }
 
             socketChannel.write(byteBuffers);
-
+            long MSG_SEND_TIME = System.currentTimeMillis();
             while (true) {
+                if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
+                }
                 int recvCount = socketChannel.read(recvBuffer);
                 if (recvCount == -1) {
                     saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
                     throw new RuntimeException("DELIVER ERROR");
                 } else if (recvCount > 0) {
-                    worker.updateToDeliver(data.getMsgId());
+                    setDeliverMsgId(data.getMsgId());
+//                    worker.updateToDeliver(data.getMsgId());
                     saveSystemLog("[MESSAGE SEND] [SUCCESS]");
                     lastPacketSendTime = System.currentTimeMillis();
                     break;
                 }
             }
         } catch (IOException e) {
-            e.printStackTrace();
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
             throw new RuntimeException(e);
         }
     }
 
     private void katMessageService(MunjaonMsg data) {
         try {
+            /* 이미지 경로 디폴트 경로 사용 여부 */
+            String defaultYn = getProp("KAKAO", "DEFAULT_PATH_YN");
             /* Kakao Json 저장 경로 */
-            String path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
+            String path = null;
+            if ("Y".equals(defaultYn)) {
+                path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
+            } else {
+                path = getProp("KAKAO", "FILEPATH") + File.separator;
+            }
             /* 공통 메시지 유효성 체크 */
             int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data);
             int checkMsgCode = MessageCheckUtil.validateMessageForKakao(data);
@@ -426,29 +483,43 @@
             byteBuffers[1] = fileBuffer;
 
             socketChannel.write(byteBuffers);
-
+            long MSG_SEND_TIME = System.currentTimeMillis();
             while (true) {
+                if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
+                }
                 int recvCount = socketChannel.read(recvBuffer);
                 if (recvCount == -1) {
                     saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
                     throw new RuntimeException("DELIVER ERROR");
                 } else if (recvCount > 0) {
-                    worker.updateToDeliver(data.getMsgId());
+                    setDeliverMsgId(data.getMsgId());
+//                    worker.updateToDeliver(data.getMsgId());
                     saveSystemLog("[MESSAGE SEND] [SUCCESS]");
                     lastPacketSendTime = System.currentTimeMillis();
                     break;
                 }
             }
         } catch (IOException e) {
-            e.printStackTrace();
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
             throw new RuntimeException(e);
         }
     }
 
     private void kftMessageService(MunjaonMsg data) {
         try {
+            /* 이미지 경로 디폴트 경로 사용 여부 */
+            String defaultYn = getProp("KAKAO", "DEFAULT_PATH_YN");
             /* Kakao Json 저장 경로 */
-            String path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
+            String path = null;
+            if ("Y".equals(defaultYn)) {
+                path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
+            } else {
+                path = getProp("KAKAO", "FILEPATH") + File.separator;
+            }
             /* 공통 메시지 유효성 체크 */
             int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data);
             int checkMsgCode = MessageCheckUtil.validateMessageForKakao(data);
@@ -488,21 +559,28 @@
             byteBuffers[1] = fileBuffer;
 
             socketChannel.write(byteBuffers);
-
+            long MSG_SEND_TIME = System.currentTimeMillis();
             while (true) {
+                if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
+                }
                 int recvCount = socketChannel.read(recvBuffer);
                 if (recvCount == -1) {
                     saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
                     throw new RuntimeException("DELIVER ERROR");
                 } else if (recvCount > 0) {
-                    worker.updateToDeliver(data.getMsgId());
+                    setDeliverMsgId(data.getMsgId());
+//                    worker.updateToDeliver(data.getMsgId());
                     saveSystemLog("[MESSAGE SEND] [SUCCESS]");
                     lastPacketSendTime = System.currentTimeMillis();
                     break;
                 }
             }
         } catch (IOException e) {
-            e.printStackTrace();
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
             throw new RuntimeException(e);
         }
     }
@@ -517,7 +595,12 @@
         try {
             saveSystemLog("[LINK_CHECK SEND] [... ...]");
             socketChannel.write(LinkCheck.makeLinkCheckBuffer());
+            long LINK_SEND_TIME = System.currentTimeMillis();
             while (true) {
+                if (System.currentTimeMillis() - LINK_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveSystemLog("[LinkcheckTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new RuntimeException("LinkcheckTimeOut : Expired ... ... ... ... ... ... ...");
+                }
                 int recvCount = socketChannel.read(recvBuffer);
                 if (recvCount == -1) {
                     saveSystemLog("[LINK_CHECK SEND] [FAIL] [SOCKET IS CLOSED]");
@@ -529,6 +612,9 @@
                 }
             }
         } catch (Exception e) {
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
             throw new RuntimeException(e);
         }
     }
src/main/java/com/munjaon/client/server/service/ReportClientService.java
--- src/main/java/com/munjaon/client/server/service/ReportClientService.java
+++ src/main/java/com/munjaon/client/server/service/ReportClientService.java
@@ -78,11 +78,19 @@
         }
     }
 
+    private boolean checkTimeOut() {
+        return System.currentTimeMillis() - lastPacketSendTime >= Packet.LIMIT_PACKET_TIMEOUT;
+    }
+
     @Override
     public void doService() {
         bind();
         while (isRun()) {
             try {
+                if (checkTimeOut()) {
+                    saveSystemLog("[checkTimeOut : Expired ... ... ... ... ... ... ...]");
+                    break;
+                };
                 messageService();
             } catch (Exception e) {
                 throw new RuntimeException(e);
@@ -94,8 +102,9 @@
         ByteBuffer sendBuffer = Bind.makeBindBuffer(id, pwd);
         ByteBuffer recvBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + Bind.BIND_ACK_BODY_LENGTH);
         try {
-            saveSystemLog("sendBuffer " + sendBuffer.position() + ":" + sendBuffer.limit());
+//            saveSystemLog("sendBuffer " + sendBuffer.position() + ":" + sendBuffer.limit());
             saveSystemLog("Bind Try Connect to " + this.address + ":" + this.port);
+            Thread.sleep(300);
             socketChannel.write(sendBuffer);
             saveSystemLog("Bind Read to " + this.address + ":" + this.port);
             while (true) {
@@ -173,6 +182,7 @@
                 saveSystemLog("Report : " + data.toString());
                 worker.updateToReport(data);
                 socketChannel.write(Report.makeReportAckBuffer());
+                lastPacketSendTime = System.currentTimeMillis();
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -184,6 +194,7 @@
         try {
             saveSystemLog("LinkCheck Received");
             socketChannel.write(LinkCheck.makeLinkCheckAckBuffer());
+            lastPacketSendTime = System.currentTimeMillis();
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
src/main/java/com/munjaon/client/server/service/Service.java
--- src/main/java/com/munjaon/client/server/service/Service.java
+++ src/main/java/com/munjaon/client/server/service/Service.java
@@ -131,6 +131,8 @@
                 }
             } finally {
                 if(logger != null) { logger.close(); logger = null; }
+                /* Exception 발생 대비 자원 해제 */
+                releaseResources();
             }
         }
     }
src/main/resources/application.yml
--- src/main/resources/application.yml
+++ src/main/resources/application.yml
@@ -4,6 +4,10 @@
   profiles:
     default: local
 
+logging:
+  level:
+    root: info
+
 agent:
   root-path: ${SERVICE_HOME}
   server-property-file: ${SERVICE_HOME}/config/munjaonAgent.conf
(No newline at end of file)
src/main/resources/logback-spring.xml
--- src/main/resources/logback-spring.xml
+++ src/main/resources/logback-spring.xml
@@ -1,80 +1,58 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
-    <timestamp key="BY_DATE" datePattern="yyyy-MM-dd"/>
-    <property name="LOG_PATTERN"
-              value="[%d{yyyy-MM-dd HH:mm:ss}:%-4relative] %green([%thread]) %highlight(%-5level) %boldWhite([%C.%M:%yellow(%L)]) - %msg%n%ex"/>
+    <property name="CONSOLE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %magenta([%thread]) %highlight([%-3level]) %logger{5} - %msg %n" />
+    <property name="ROLLING_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS}  %logger{5} - %msg %n" />
+    <property name="FILE_NAME" value="../logs/agent/munjaonClient.log" />
+    <property name="LOG_NAME_PATTERN" value="../logs/agent/backup/munjaonClient-%d{yyyy-MM-dd-HH-mm}.%i.log" />
+    <property name="MAX_FILE_SIZE" value="100MB" />
+    <property name="TOTAL_SIZE" value="3GB" />
+    <property name="MAX_HISTORY" value="30" />
 
-    <springProfile name="local">
-        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-            <encoder>
-                <pattern>${LOG_PATTERN}</pattern>
-            </encoder>
-        </appender>
-        <logger name="com.munjaon.client" level="DEBUG" />
-        <root level="ERROR">
-            <appender-ref ref="CONSOLE"/>
-        </root>
-    </springProfile>
 
-    <springProfile name="prod|dev">
-        <appender name="FILE-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
-            <file>./log/info/info-${BY_DATE}.log</file>
-            <filter class = "ch.qos.logback.classic.filter.LevelFilter">
-                <level>INFO</level>
-                <onMatch>ACCEPT</onMatch>
-                <onMismatch>DENY</onMismatch>
-            </filter>
-            <encoder>
-                <pattern>${LOG_PATTERN}</pattern>
-            </encoder>
-            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-                <fileNamePattern> ./backup/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-                <maxFileSize>100MB</maxFileSize>
-                <maxHistory>30</maxHistory>
-                <totalSizeCap>3GB</totalSizeCap>
-            </rollingPolicy>
-        </appender>
+    <!-- Console appender 설정 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <Pattern>${CONSOLE_PATTERN}</Pattern>
+        </encoder>
+    </appender>
 
-        <appender name="FILE-WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
-            <file>./log/warn/warn-${BY_DATE}.log</file>
-            <filter class = "ch.qos.logback.classic.filter.LevelFilter">
-                <level>WARN</level>
-                <onMatch>ACCEPT</onMatch>
-                <onMismatch>DENY</onMismatch>
-            </filter>
-            <encoder>
-                <pattern>${LOG_PATTERN}</pattern>
-            </encoder>
-            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-                <fileNamePattern> ./backup/warn/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-                <maxFileSize>100MB</maxFileSize>
-                <maxHistory>30</maxHistory>
-                <totalSizeCap>3GB</totalSizeCap>
-            </rollingPolicy>
-        </appender>
 
-        <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
-            <file>./log/error/error-${BY_DATE}.log</file>
-            <filter class = "ch.qos.logback.classic.filter.LevelFilter">
-                <level>ERROR</level>
-                <onMatch>ACCEPT</onMatch>
-                <onMismatch>DENY</onMismatch>
-            </filter>
-            <encoder>
-                <pattern>${LOG_PATTERN}</pattern>
-            </encoder>
-            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-                <fileNamePattern> ./backup/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-                <maxFileSize>100MB</maxFileSize>
-                <maxHistory>30</maxHistory>
-                <totalSizeCap>3GB</totalSizeCap>
-            </rollingPolicy>
-        </appender>
+    <appender name="ROLLING_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>${ROLLING_PATTERN}</pattern>
+        </encoder>
+        <file>${FILE_NAME}</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_NAME_PATTERN}</fileNamePattern>
+            <maxHistory>${MAX_HISTORY}</maxHistory>
+            <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+            <totalSizeCap>${TOTAL_SIZE}</totalSizeCap>
+        </rollingPolicy>
+    </appender>
 
-        <root level="INFO">
-            <appender-ref ref="FILE-INFO"/>
-            <appender-ref ref="FILE-WARN"/>
-            <appender-ref ref="FILE-ERROR"/>
-        </root>
-    </springProfile>
+    <logger name="jdbc" level="OFF" additive="false">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="ROLLING_LOG_FILE"/>
+    </logger>
+    <logger name="jdbc.sqlonly" level="DEBUG" additive="false" >
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="ROLLING_LOG_FILE"/>
+    </logger>
+    <logger name="jdbc.sqltiming" level="OFF" additive="false" >
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="ROLLING_LOG_FILE"/>
+    </logger>
+    <logger name="org.hibernate.SQL" level="DEBUG" additive="false">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="ROLLING_LOG_FILE"/>
+    </logger>
+    <logger name="com.munjaon.client" level="INFO" additive="true" >
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="ROLLING_LOG_FILE"/>
+    </logger>
+
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="ROLLING_LOG_FILE"/>
+    </root>
 </configuration>
(No newline at end of file)
Add a comment
List