Server/Ubuntu

[Ubuntu] Tomcat 로그 한글 깨짐 현상

dalpang.e 2020. 12. 18. 03:40

에러

톰캣 로그에 아래 이미지와 같이 한글이 모두 물음표(?)로 나오는 현상을 마주했습니다.

 

한글이 물음표(?)로 깨지는 톰캣 로그

 

원래는 잘 나오던 한글들일 왜 이렇게 되어버린건지는 모르겠으나 해결방법을 찾아봅니다.

 

해결방법

찾아보니 catalina.sh 수행될 때 아래와 같이 JAVA_OPTS를 주면 해결이 된다고 합니다.

아마 로그 파일을 만들 때 인코딩을 설정해주는것 같습니다.

 

export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dfile.client.encoding=UTF-8 -Dclient.encoding.override=UTF-8"

 

*변수명과 값 사이에는 공백을 넣으면 안된다고합니다.

 

추가 해결방법 (2022.3.4)

어떤 서버에서는 위의 설정을 안해줘도 알아서 로그에 한글이 잘 나오는데 어떤 서버는 한글이 잘 나오지 않는 것을 발견했습니다. 이는 ubuntu 설치 후 locale이 어디로 잡혀있냐에 따라서 한글이 깨지기도, 안 깨지고 잘 나오기도 하는것입니다. 따라서 위의 자바 옵션을 주는 방법 말고 설치한 ubuntu 서버의 locale을 변경해주는 방법도 정리합니다.

 

현재 locale 확인 방법

$ locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
...

이런식으로 나오는 서버는 흔치 않을거라 생각이 듭니다. 위의 이미지는 docker에서 ubuntu:18.04 이미지를 통해 컨테이너를 생성한 ubuntu의 locale 명령어 결과입니다. 이렇게 LANG이 비어있기 때문에 한글이 잘 나오지 않았던 것이지요.

 

따라서 한글이 잘 나오도록 locale을 UTF-8로 셋팅해주겠습니다.

 

한글팩 설치

$ sudo apt-get install language-pack-ko
$ sudo locale-gen ko_KR.UTF-8
$ sudo dpkg-reconfigure locales

 

locale 업데이트 (설정)

locale 업데이트 하는 방법은 2가지 있습니다.

 

명령어를 통해 locale 설정

$ sudo update-locale LANG=ko_KR.UTF-8 LC_MESSAGES=POSIX

 

/etc/default/locale 파일 수정

LANG=ko_KR.UTF-8
LC_MESSAGES=POSIX

적용은 시스템 로그아웃 후 재접속 시 적용됩니다. 서버를 reboot 하는것도 좋습니다.

 

 

* 근데 docker 컨테이너 안에서는 잘 안 바뀌네요 .. ㅠㅜ

 

참고

https://beomi.github.io/2017/07/10/Ubuntu-Locale-to-ko_KR/