Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Azure - Spring Boot 앱을 Java SE(Embedded Web Server)로 호스팅 시 로그 파일 남기는 방법

지난 글에서,

Azure - 자바(Java)로 만드는 Web App Service - Tomcat 호스팅
; https://www.sysnet.pe.kr/2/0/12690

Tomcat 호스팅인 경우 catalina 로그가 %HOME%\LogFiles\Application 디렉터리에 남는다고 했는데요, 반면 Java SE 호스팅인 경우에는 기본적으로 로그가 남지 않습니다.

동료 자바 Guy의 말에 따르면 spring boot 응용 프로그램인 경우 해당 프로젝트 자체에서 "src/main/resources" 경로에 "application.properties" 파일을 추가하고 다음과 같은 식의 내용으로 채우면 된다고 합니다.

logging.level.root=info
logging.level.org.hibernate.SQL=warn
logging.level.io.netty=warn
logging.level.org.springframework=warn
# logging.file.path=/home/jennifer/test/logs
# logging.file.name=boot-flux2.log
logging.file.name=/home/jennifer/test/logs/boot-flux.log
# logging.file=/home/jennifer/test/logs/boot-flux.log

Azure 환경의 경우 가능한 %HOME%\LogFiles\Application 경로를 활용하도록 의미상 권장하므로 다음과 같이 바꾼 후,

logging.file.name=d:\\home\\LogFiles\\Application\\boot-flux.log

Spring Boot 예제 프로그램을 다시 배포를 하면, 이후 Azure 측에서 Web App이 구동될 때 %HOME%\LogFiles\Application 경로에 다음과 같은 식의 내용을 갖는 로그 파일이 생성됩니다.

2021-06-29 02:09:37.568  INFO 253136 --- [main] com.example.springboot.Application       : Starting Application v0.0.1-SNAPSHOT using Java 1.8.0_265 on RD0004FFE31F32 with PID 253136 (C:\DWASFiles\Sites\testhello\Temp\javaFiles\8376...[생략]...1066\site\wwwroot\app.jar started by RD0004FFE31F32$ in D:\home\site\wwwroot)
2021-06-29 02:09:37.631  INFO 253136 --- [main] com.example.springboot.Application       : No active profile set, falling back to default profiles: default
2021-06-29 02:09:52.975  INFO 253136 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-06-29 02:09:52.975  INFO 253136 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.46]
2021-06-29 02:09:53.478  INFO 253136 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-06-29 02:09:59.569  INFO 253136 --- [main] com.example.springboot.Application       : Started Application in 27.522 seconds (JVM running for 30.74)
2021-06-29 02:10:00.725  INFO 253136 --- [http-nio-3169-exec-4] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'

그런데 저 로그 파일을 보면 Spring Boot 앱도 어차피 Tomcat에서 호스팅되고 있는데 왜 catalina 로그 파일을 굳이 (기본적으로) 생성해 주지 않는 걸까요? ^^;




참고로, Azure상에서 "App Service Logs" 메뉴의 "Application Logging" 메뉴를 켜면,

app_service_logs_1.png

"D:\home\LogFiles\http\RawLogs" 디렉터리에 웹 액세스 로그 파일이 남습니다. 재미있는 것은, 자바 호스팅이지만 reverse proxy 서버로 IIS가 사용되기 때문에 말 그대로 IIS 접속 로그가 남습니다.

#Software: Microsoft Internet Information Services 8.0
#Fields: date time s-sitename cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Cookie) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2021-07-02 12:30:09 TESTHELLO GET / X-ARR-LOG-ID=4b48a27c-0581-41d8-a1e3-cf661edd7180 80 - 52.231.51.139 ReadyForRequest/1.0+(LocalCache) - - testhello.azurewebsites.net 200 0 0 362 752 76605
2021-07-02 12:30:09 TESTHELLO GET / X-ARR-LOG-ID=05c81e95-e810-4811-9634-aa0a5b55f3f8 80 - ::1 AlwaysOn ARRAffinity=9af8e22f5e9968f02761240f41642699ab0162b805b2e390d95123469db85db3 - testhello.azurewebsites.net 200 0 0 560 712 76809
2021-07-02 12:30:09 TESTHELLO GET / X-ARR-LOG-ID=697f57f9-3d04-4a62-bfd5-c1f5c2bd45c1 80 - ::1 AlwaysOn ARRAffinity=9af8e22f5e9968f02761240f41642699ab0162b805b2e390d95123469db85db3 - testhello.azurewebsites.net 200 0 0 570 685 60841
2021-07-02 12:30:09 TESTHELLO GET / X-ARR-LOG-ID=da5fb883-e985-4808-83c8-6fbf25e0b7c7 80 - ::1 AlwaysOn ARRAffinity=9af8e22f5e9968f02761240f41642699ab0162b805b2e390d95123469db85db3 - testhello.azurewebsites.net 200 0 0 569 687 67217
2021-07-02 12:30:09 TESTHELLO GET / X-ARR-LOG-ID=4b48a27c-0581-41d8-a1e3-cf661edd7180 80 - 52.231.51.139 ReadyForRequest/1.0+(AppInit) ARRAffinity=9af8e22f5e9968f02761240f41642699ab0162b805b2e390d95123469db85db3 - testhello.azurewebsites.net 200 0 0 369 793 156
2021-07-02 12:30:09 TESTHELLO GET / X-ARR-LOG-ID=7166b759-411b-4fc5-b4da-3c39821ff8e8 80 - ::1 AlwaysOn ARRAffinity=9af8e22f5e9968f02761240f41642699ab0162b805b2e390d95123469db85db3 - testhello.azurewebsites.net 200 0 0 570 685 71315
2021-07-02 12:30:12 ~1TESTHELLO GET / - 80 - 100.72.8.160 AlwaysOn - - testhello.azurewebsites.net 200 0 0 8215 451 57
...[생략]...




logging.file.name 옵션이 말 그대로 "file.name"이지만 전체 경로를 설정하려는 경우 환경 변수를 쓰면 안 됩니다. 가령 다음과 같이 설정하면,

logging.file.name=%HOME%\LogFiles\Application\boot-flux.log

실제 파일은 이런 식으로 생성됩니다.

d:\home\site\wwwroot\%HOME%LogFilesApplicationboot-flux.log

또한, 역슬래시('\') 문자가 escape로 쓰이기 때문에 이렇게 설정해도,

logging.file.name=d:\home\LogFiles\Application\boot-flux.log

의도치 않은 방식으로 로그 파일이 생성됩니다.

d:\home\site\wwwroot\homeLogFilesApplicationboot-flux.log




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/2/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2022-01-28 11시05분
[k8s] SpringBoot Eco API서버 k8s에 올리기
; https://blog.naver.com/ssang8417/222632093742
정성태

... 106  107  108  109  110  [111]  112  113  114  115  116  117  118  119  120  ...
NoWriterDateCnt.TitleFile(s)
11183정성태4/19/201720839.NET Framework: 654. UWP 앱에서 FolderPicker 사용 시 유의 사항파일 다운로드1
11182정성태4/19/201724656개발 환경 구성: 313. Nuget Facebook 라이브러리를 이용해 ASP.NET 웹 폼과 로그인 연동하는 방법
11181정성태4/18/201721820개발 환경 구성: 312. Azure Web Role의 AppPool 실행 권한을 Local System으로 바꾸는 방법
11180정성태4/16/201724943Java: 18. Java의 Memory Mapped File 자원 반환이 안 되는 문제
11179정성태4/13/201717940기타: 64. SVG Converter 스토어 앱 개인정보 보호 정책 안내
11178정성태4/10/201720250개발 환경 구성: 311. COM+ 관리자의 DCOM 구성에 나오는 기준
11177정성태4/7/201720368.NET Framework: 653. C# 7 새로운 문법(1) - 더욱 편리해진 Out 변수 사용파일 다운로드1
11176정성태4/5/201717509VC++: 117. Visual Studio - ATL COM 개체를 단위 테스트 하는 방법
11175정성태4/5/201726754.NET Framework: 652. C# 개발자를 위한 C++ COM 객체의 기본 구현 방식 설명파일 다운로드1
11174정성태4/3/201720601VC++: 116. Visual Studio 단위 테스트 - Failed to set up the execution context to run the test
11173정성태4/3/201723743VC++: 115. Visual Studio에서 C++ DLL을 대상으로 단위 테스트할 때 비정상 종료한다면?파일 다운로드1
11172정성태4/3/201722801.NET Framework: 651. C# - 특정 EXE 프로세스를 종료시킨 EXE를 찾아내는 방법파일 다운로드1
11171정성태3/31/201719957VS.NET IDE: 114. Visual Studio 디버깅 경고 창 - You are debugging a Release build of ...
11170정성태3/31/201722280.NET Framework: 650. C# - CachedAnonymousMethodDelegate 유형의 코드 생성
11169정성태3/30/201721867VC++: 114. C++ vtable의 가상 함수 호출 가로채기파일 다운로드1
11168정성태3/29/201724576VC++: 113. C++ 클래스 상속 관계의 vtable 생성 과정
11167정성태3/28/201725011VC++: 112. C++의 가상 함수 테이블 (vtable)은 언제 생성될까요? [2]
11166정성태3/28/201719968오류 유형: 382. System.Data.SqlClient.SqlException - Arithmetic overflow error converting IDENTITY to data type int.
11165정성태3/27/201723110오류 유형: 381. Visual C++에서 min, max 함수를 사용한 경우 C2589, C2059 컴파일 오류 발생
11164정성태3/27/201731577VC++: 111. C++ 클래스의 상속에 따른 메모리 구조 [2]파일 다운로드1
11163정성태3/25/201721238VC++: 110. CreateThread Win32 API에 C++ 클래스의 멤버 함수를 전달하는 방법파일 다운로드1
11162정성태3/24/201725515오류 유형: 380. Visual Studio 빌드 실패 - The OutputPath property is not set for project
11161정성태3/24/201717373오류 유형: 379. ICOMAdminCatalog.GetCollection 호출 시 0x80070422 예외 발생
11160정성태3/23/201723180.NET Framework: 649. ASP.NET - Server cannot append header after HTTP headers have been sent. (HTTP 헤더를 보낸 후에는 서버에서 헤더를 추가할 수 없습니다.)파일 다운로드1
11159정성태3/23/201720476Windows: 136. Memory-mapped File은 Private Bytes 크기에 포함될까요?파일 다운로드1
11158정성태3/22/201719363디버깅 기술: 85. Windbg - SOS 디버깅 사례 System.NullReferenceException 예외 추적
... 106  107  108  109  110  [111]  112  113  114  115  116  117  118  119  120  ...