학습 목표
이 모듈을 마치면 다음을 수행할 수 있습니다.
- 모든 로그 노드 이름을 보관하기 위한 열거형을 사용하여 앱에 로깅을 설정합니다.
- 로그 메시지에 맞는 올바른 로그 수준을 선택하세요
- 로그 메시지 활동 구성
- 로그 노드를 등록하세요
- 로그 메시지 생성
- 오류 기록
- REST 호출에 오류 로그 추가
- 디버깅을 위한 로그
로깅 실습
고객이 휴가 요청 신청을 요청했습니다. 이 신청은 날짜가 공휴일인지 아닌지 판단할 수 있어야 하므로 요청된 시간 수를 올바르게 설정할 수 있습니다. 예를 들어 크리스마스와 같은 주에 휴가를 계획했다는 이유로 누군가의 휴가 수당에서 8시간을 공제하는 것은 불공평할 것입니다.
Mendix에서 개발을 시작하기 전에 항상 사용자 스토리를 갖는 것이 좋습니다.
로깅 설정
Mendix에서 로깅을 구현할 때는 모든 로그 메시지에 동일한 로그 노드 이름이 있는지 확인해야 합니다. 이는 확인하기 쉬운 것을 설정하면 가장 잘 달성할 수 있습니다. 많은 프로그래머에게 상수가 떠오르지만 Mendix에서는 이것이 최선의 선택이 아닐 것입니다.
Mendix의 상수는 애플리케이션을 배포하는 환경에 따라 변경되는 변수를 위한 것입니다. 예를 들어, Mendix 클라우드에 애플리케이션을 배포하는 경우 외부 데이터베이스에 액세스하는 설정이 자체 클라우드에 앱을 배포할 때와 다를 수 있습니다. 그러나 로그 노드 이름은 변경되어서는 안 됩니다. 따라서 로그 노드 이름을 정의할 때 열거형을 사용해야 합니다 . 열거형은 키-값 쌍으로, Name 이라는 레이블이 지정된 키와 Caption 이라는 레이블이 지정된 값이 모두 문자열입니다. 이렇게 하면 로그 노드 이름이 일관되고 열거형의 추가 보너스로 모듈의 모든 로그 노드가 찾기 쉬운 중앙 위치에 있게 됩니다. 로그 노드 이름에 대해 열거형의 Name 부분을 활용합니다.
로그 노드 이름 정의
이제 로그 노드 이름 열거를 만들겠습니다.
정상 작업 중 로깅
애플리케이션이 언제 로깅해야 하고 어떤 정보를 포함해야 하는지 결정하는 것은 개발자로서 내려야 할 중요한 결정입니다. 정보를 제공해야 할 필요성과 너무 많은 정보가 중요한 메시지를 압도할 수 있다는 사실 사이에서 균형을 맞춰야 합니다. 이를 달성하는 가장 좋은 방법은 로그 수준을 사용하여 런타임 중에 로그에 기록되는 정보의 양을 조정하는 것입니다. 자체 로그 메시지를 만들 때는 로그 수준과 해당 설명을 손쉽게 사용할 수 있는 것이 중요합니다. 수준을 간단히 살펴보겠습니다.
- Critical : 심각한 문제가 발생하여 애플리케이션이 종료되었습니다.
- Error : 응용 프로그램이 작업을 성공적으로 수행하지 못했지만 복구는 가능했습니다.
- Warning : 예상치 못한 일이 발생하여 조사가 필요하지만, 애플리케이션은 정상적으로 작동을 계속할 수 있습니다.
- Info : 해당 애플리케이션은 모니터링할 가치가 있는 작업을 수행했습니다.
- Debug : 진단에 도움이 되는 정보.
- Trace : 앱의 각 단계를 자세히 설명하는 정보입니다.
앱에서 첫 번째 작업은 Info 수준에서 로그 메시지를 추가하여 개발자가 로깅 도구를 설정하여 애플리케이션의 정상적인 작동을 추적할 수 있도록 하는 것입니다. 애플리케이션의 맥락에서 이는 외부 API에서 휴일을 성공적으로 검색하는 것입니다.
Mendix에 로깅하는 것은 Log message 활동을 사용하여 수행됩니다. Microflow 도구 상자의 Logging activities 에서 찾을 수 있습니다. 이 활동은 사용 중인 로그 수준을 보여줍니다. 아래에서 6개의 로그 활동을 볼 수 있으며, 각각은 캡션에 로그 수준을 보여줍니다. 다른 활동과 마찬가지로 캡션을 편집할 수 있습니다. 편집하면 로그 수준이 자동으로 업데이트되지 않습니다.
템플릿 칸에 메시지를 추가할 수 있습니다.
Log level 드롭다운 버튼을 클릭하면 사용 가능한 모든 로그 수준이 표시됩니다. 로그 메시지당 하나의 로그 수준만 선택할 수 있습니다.
각 로그 수준에는 이전 로그 수준의 모든 메시지가 포함된다는 점을 기억하세요.
로그 활동에서 수준은 역순으로 표시되며, 상단에는 추적, 하단에는 중요 로그가 표시됩니다. 이는 로그 수준의 작동 방식에는 영향을 미치지 않지만, 모든 중요 로그 메시지는 여전히 오류 로그 수준에 포함됩니다.
Log Node Name 오른쪽에 있는 Edit 버튼을 클릭하면 사용할 로그 노드 이름을 정의할 수 있습니다. 이 모듈의 시작 부분에서 설명했듯이 열거형의 이름을 사용하게 됩니다. 표현식 편집기에서 getKey() 함수를 사용하여 이름을 검색할 수 있습니다. Ctrl + Space가 표현식 편집기에서 자동 완성을 제공한다는 점을 기억하세요. 모듈, 열거형 또는 열거형 값에 사용한 이름을 잊어버린 경우 이 기능이 유용할 수 있습니다.
로그 노드 초기화
로그 노드는 동적으로 등록되므로 로그 노드도 등록해야 합니다. 이는 모듈의 각 로그 노드에 대한 메시지를 기록하는 하위 마이크로플로를 생성하여 수행됩니다. 이 마이크로플로는 A fter startup 마이크로플로에서 호출되어야 합니다. 로그 노드 등록을 위해 별도의 마이크로플로를 생성하는 것이 가장 좋습니다. 일반적으로 A fter startup 마이크로플로는 다른 것에도 사용되기 때문입니다.
After Startup 마이크로플로에 로그 노드를 등록하지 않으면 첫 번째 로그 메시지가 기록될 때까지 로그 노드를 사용할 수 없습니다. 이렇게 하면 애플리케이션을 디버깅할 때 로그 수준을 변경하기 어려워지고 로그 메시지가 손실될 수 있습니다.
프로젝트에 SUB_RegisterLogNodes 라는 마이크로플로를 추가하고 마이크로플로에 로그 메시지 활동을 추가합니다.
- 앱에 ASU_PublicHolidays라는 이름의 마이크로플로를 추가합니다. ASU_PublicHolidays 마이크로플로의 반환 유형을 Boolean true 값 으로 설정해야 합니다 . 그런 다음 프로젝트에서 설정을 클릭하고 런타임 탭으로 전환합니다. 새 마이크로플로를 After Startup 마이크로플로 로 선택합니다.
2. Microflow 호출 활동을 사용하여 ASU_PublicHolidays 마이크로플로 에서 SUB_RegisterLogNodes를 호출합니다.
첫 번째 정보 로그 메시지 만들기
첫 번째 로그 메시지는 API에서 휴일을 검색한 국가 수와 기간을 기록합니다. 이를 통해 애플리케이션 운영자는 이 모듈의 동작을 모니터링할 수 있습니다. 정상적인 작동 중에 애플리케이션 운영자는 모듈이 정기적으로 검색을 수행할 것으로 예상합니다.
- ACT_ImportHolidays 마이크로플로를 열고 End 이벤트 바로 앞에 Agregate 목록 활동을 추가합니다 . AvailableCountryList 의 국가 수를 세고 변수 이름을 NumberOfCountries 로 설정합니다 .
Aggregate list 활동과 End 이벤트 사이에 Log message 활동을 추가합니다 . 로그 수준을 Info 로 설정하고 Log 노드 이름 , Template 및 Parameters를 아래 스크린샷의 값으로 설정합니다 . 완료되면 OK를 클릭합니다 .
이제 로컬에서 실행하고
국가 중 하나 이상에 대한 Import holidays 열 값을 No 에서 Yes 로 변경합니다 . 해당 행에 대해 No 를 클릭하고 Yes 로 변경한 다음 다른 곳을 클릭하여 변경 사항을 저장합니다.
Import All Holidays 를 클릭하고 원하는 경우 시작 연도와 종료 연도를 변경한 다음 가져오기를 누릅니다 . 앱에서 API에서 휴일을 검색하고 싶은지 확인하라는 메시지가 표시됩니다. 진행을 클릭합니다 .
Studio Pro 로 전환 하고 콘솔을 살펴보세요. 아래 스크린샷과 같이 콘솔에서 새 PublicHolidays 로그 노드의 로그 메시지를 볼 수 있습니다.
Error 로깅
클라이언트 애플리케이션의 PublicHolidays 모듈이 중요 하지만 , 시스템이 특정 국가의 공휴일을 검색할 수 없더라도 휴가를 요청하는 일이 발생할 수 있습니다. 사람들은 요청하는 요일이 실제로 근무일인지 아닌지 비판적으로 살펴봐야 하지만, 요청을 제출하는 것을 막을 수는 없습니다. 이 특정한 사례에서 Critical은 과도하고 Warning은 충분히 심각하지 않습니다. 시스템이 공휴일을 검색할 수 없는 경우 애플리케이션 운영자의 즉각적인 조치가 필요한 것입니다. 따라서 다음 연습에서는 Error 로그 수준을 사용합니다 .
REST 호출에 오류 로그 추가
REST 호출을 수행하는 마이크로플로우는 모두 접두사 CRS를 사용하고 있습니다.
각 REST 호출은 오류 처리가 롤백이 있는 사용자 지정 으로 설정되어 있으며 오류 플로가 정의되었습니다. 그러나 오류 플로는 아무것도 하지 않습니다. 이상적인 경우 오류 플로가 무언가를 기록하여 애플리케이션 운영자가 무언가가 실패했음을 알고 적절한 조치를 취할 수 있도록 하려고 합니다. 이것이 다음 과제입니다.
디버깅을 돕기 위해 Include latest stack trace를 Yes로 설정해야 합니다.
$latestHttpResponse 변수 는 반환된 오류 코드, 이 코드에 속하는 응답 구문 및 응답의 내용에 대한 액세스를 제공합니다. 매개변수가 비어 있는 경우 매개변수 주위에 따옴표를 사용하는 것이 좋습니다. 이렇게 하면 무언가가 누락되었음을 알 수 있습니다.
디버깅을 위한 로깅
문제가 발생했을 때 무엇을 기록할지 결정하는 것은 비교적 쉽지만, 디버깅을 위해 무엇을 기록할지 결정하는 것은 훨씬 더 어려울 수 있습니다.
이 앱에 디버그 메시지를 추가해 보겠습니다. 이러한 유형의 로깅은 여러 단계가 필요한 더 복잡한 마이크로플로에 추가하는 것이 가장 좋습니다. 귀하의 애플리케이션에서 마이크로플로 ACT_ImportHolidays 마이크로플로가 적합해 보입니다. 이미 해당 마이크로플로에 로깅을 추가했지만 많은 것을 달성하는 마이크로플로에 대한 메시지 하나는 매우 최소한으로 보입니다. 개발자가 검색되는 국가와 연도를 실시간으로 볼 수 있다면 도움이 될 것입니다. 이렇게 하면 요청된 특정 국가 코드나 연도를 사용할 수 없거나 올바르지 않은 경우 쉽게 찾을 수 있습니다.
ACT_ImportHolidays를 열고 기존 Microflow 호출 활동 전에 루프 활동에 로그 메시지 활동을 추가합니다 .
콘솔에서 고급 > 로그 수준 설정…을 클릭합니다. PublicHolidays 로그 노드를 찾아 디버그 로 설정합니다 . 이제 휴일을 다시 가져와서 이번에는 로그 메시지가 나타나는지 확인합니다. ( 이렇게 안해도 잘 찾아보시면 나옵니다. )
출처 : https://academy.mendix.com/link/paths/104/Track-Application-Behavior-with-Logging
'LowCode (Mendix) Advanced > Track Application Behavior with Logging' 카테고리의 다른 글
Reading the Message Part of a Log Message (1) | 2024.10.22 |
---|---|
The Components of a Log Message Explained (0) | 2024.10.21 |
The Log Message (0) | 2024.10.21 |