ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Logback 시간과 system 시간이 다를때...
    Java/Basic 2019. 6. 25. 15:13
    반응형

    당황 스럽다. os 시간을 확인했을땐 kst 기준으로 잘 나오지만 java 기반의 서비스를 돌리면 약 3시간의 시간 차이가 났다 . 

     

    그래서 3가지 방식으로 java에서 시간정보를 가져와 보았다. 

    /**
    * 현재 시간 가져오기
    * @return
    */
    public String getNow(String format){
    LocalDateTime curDate = LocalDateTime.now();
    DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
    return curDate.format(df).toString();
    }
    
    /**
    * 현재 시간 가져오기
    * @return
    */
    public String getSystemNow(String format){
    long time = System.currentTimeMillis();
    
    SimpleDateFormat dayTime = new SimpleDateFormat(format);
    
    return dayTime.format(new Date(time));
    }
    /**
    * 현재 시간 가져오기
    * @return
    */
    public String getTimeZoneNow(String format) {
    String TIME_SERVER = "time server 주소";
    Date dTime = new Date();
    TimeZone tz = TimeZone.getTimeZone("Asia/Seoul");
    
    SimpleDateFormat dayTime = new SimpleDateFormat(format);
    dayTime.setTimeZone(tz);
    
    return dayTime.format(dTime);
    }

    결론부터 말하면 getTimeZoneNow() 메서드로 불러오는값이 정확히 일치하고 나머지는 다른 시간대가 나왔다. AWS 서버를 사용 중이였고 date 명령어로 조회시 분명 현재 시간과 맞는데 java 에서는 왜 안되는지 곰곰히 생각해보니 jvm 이 시간이 안맞을수 있지 않을까 라는 생각이 들었다. 

      일단 로직상에서는 타임존을 지정하여 사용하기로 했고 , 서비스를 돌렸는데.... logback 시간이 다 이상하게 출력되기 시작했다... 아뿔사... 로직상에서야 타임존을 지정하면 됬지만 jvm 레벨의 시간을 가져오는 logback 이나 log4j 는 전혀 적용이 안될거란건 생각하지 못했다.  그래서 단순 무식하게 해결하기로 했다. 

     

    java -jar -Duser.timezone=Asia/Seoul 

     

    실행할때 다음과 같이 옵션을 주어서 실행했다. 정상적으로 로그가 찍히기 시작했다. 참... 단순한건데 ... 이럴땐 자꾸 기억이 안난다. 서버 타임존을 맞춰주지 않는 인프라를 원망스럽지만 일단 내가 처리하고 봐야 하는 이상황이 마음에 들진 않지만 일단 이렇게라도 실행 해서 서비스를 돌려야 할듯하다. 

    반응형

    'Java > Basic' 카테고리의 다른 글

    JVM( GC) 이해하기  (0) 2019.04.26
    BigDecimal (feat. 소수점 계산)  (1) 2019.03.26
    [java] Http get,post 통신  (0) 2019.01.28
    [java]날짜 더하기, 빼기 , 구하기  (0) 2019.01.28
Designed by Tistory.