개발자
logback-spring.xml 파일을 작성하고, jar파일로 패키징해서 ec2에 도커로 서버를 띄워둔 상태입니다. 컨테이너에서 실행중인 java application에서의 file logging을 ec2 내부로 곧바로 할 수 있나요?
답변 1
익명
작성자
2024년 05월 02일
네 맞습니다.
cozy
engineer, developer 어딘가 • 2024년 05월 02일
2가지 과정으로 진행하면 될 것 같습니다. 첫 번째로는 logback-spring.xml 으로 특정 경로로 로그 파일이 어디에 저장될 지 작성하시면 되고, 이 때의 경로는 컨테이너 내부의 경로입니다. 예를 들어 저희가 컨테이너 내부에서 /home/logs/ 의 항목으로 정했다고 가정해볼께요 두 번째로는 컨테이너 실행시 Host Pc를 특정 경로를 마운트하여 Host Pc (여기선 EC2)와 컨테이너 내부의 특정 경로를 연결하는 것입니다. 원하시는 방향이 EC2에 로그 파일이 배포를 진행해도 계속 남아있는 것을 원하시는 것 같습니다. 만약에 마운트를 하지 않는다면 배포때마다 컨테이너는 사라지고 로그 데이터도 보존할 수 없어요 docker-compose.yml을 쓴다고 가정하고 옵션에 volumes라는 항목이 있는데 거기에 내가 원하는 host pc의 경로를 연결해주는 것을 선언하면 됩니다. 지금은 /home/logs 컨테이너 내부에서 저장하고 있고 host pc에서는 /data/logs 라는 경로에 저장하고 싶다면 volumes 부분에 /data/logs:/home/logs 로 선언해주시면 됩니다. 이렇게 선언하면 컨테이너 내부로 들어가지 않아도 ec2에서 바로 로그를 활용할 수 있고, 또한 배포를 하더라도 로그는 host pc에 계속 저장되있습니다.
익명
작성자
2024년 05월 02일
오 감사합니다! 해보겠습니다!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 05월 02일
네, Docker 컨테이너에서 실행 중인 Java 응용 프로그램의 로깅을 EC2 인스턴스 내부에 직접 할 수 있습니다. 여기서 한 가지 주의해야 할 점은, Docker 컨테이너는 자체 파일 시스템을 가지고 있다는 것입니다. 따라서 이를 직접적으로 호스트 시스템과 공유하려면 볼륨(Volume) 또는 바인드 마운트(Bind mount)를 사용해야 합니다. 다음은 docker run 명령어에 볼륨을 추가하는 예시입니다. ```bash docker run -v /host/path/to/logs:/container/path/to/logs <image>:<tag> ``` 여기서 '/host/path/to/logs'는 EC2 인스턴스의 로그를 저장할 경로이며, '/container/path/to/logs'는 컨테이너 내부에서 로그가 작성되는 경로입니다. 이러한 방식으로 컨테이너 안에서 생성한 로그를 외부(EC2 인스턴스)로 전달할 수 있습니다. 또한 Logback 설정 파일에서도 동일한 경로를 지정하여 해당 위치에 로그를 기록하도록 설정해야 합니다: ```xml <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>/container/path/to/logs/app.log</file> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> ```
지금 가입하면 모든 질문의 답변을 볼 수 있어요!