LowCode (Mendix) Advanced/Track Application Behavior with Logging

Reading the Message Part of a Log Message

Caryou 2024. 10. 22. 10:08

학습 목표

이 모듈을 마치면 다음을 수행할 수 있습니다.

  • 로그 파일에서 로그 메시지 찾기
  • 애플리케이션의 정상적인 작동 중에 생성되는 메시지 유형과 이를 읽는 방법을 설명하십시오.
  • 오류 메시지 해석
  • 스택 추적 읽기
  • Mendix에서 발생할 수 있는 일반적인 오류를 인식하세요

로그 수준에는 특정 계층 구조가 있었습니다. 로그 수준을  Critical 로 설정했을 때 표시되는 모든 메시지는 로그 수준을 Error  로 설정했을 때도 표시됩니다  . 로그 수준은 또한 특정 메시지의 심각도를 나타냅니다.  경험에 따르면 로그 수준이 높을수록 오류가 더 심각합니다.

 

 

아래 스크린샷에서 Trace 수준 의 로그 메시지 예를 볼 수 있습니다 . 이러한 메시지는 MicroflowEngine 에서 보냅니다.

[ 그림 1 ]

선택한 메시지를 더블클릭 하여 검사하면 타임스탬프, 이 메시지의 로그 레벨, 메시지를 생성한 로그 노드와 같은 모든 관련 정보를 제공하는 세부 정보 창이 표시됩니다.

중괄호 안에 JSON 데이터가 포함된 메시지는 활동이 실행 중임을 나타냅니다.

[ 그림 2 ]

JSON 데이터를 자세히 살펴보면 이 로그 메시지를 MyFirstModule 모듈의 Microflow에 있는 액티비티와 연관시킬 수 있다는 것을 금방 알 수 있습니다. CreateAndChange 유형인 것 같습니다 . CreateAndChange 라는 액티비티는 Microflow 도구 상자에 없지만 Create object 라는 액티비티가 있습니다 . 이 로그 메시지를 생성한 Microflow를 살펴보면 실제로 여기서 사용된 것은 Create object 액티비티라는 것을 알 수 있습니다. 

{

  "current_activity": 

  {

    "caption":"Create Employe(name)",

    "type":"CreateAndChange"

  },

  "name":"MyFirstModule.ACT_Employee_CreateNew",

  "type":"Microflow"

}

[ 그림 3 ]

 

 

 

스택 추적

때때로 로그 메시지에는 스택 추적이라는 것이 포함됩니다. 이는 컴퓨터 프로그래밍 세계의 개념입니다. 소프트웨어의 오류를 분석하는 데 사용됩니다. 스택 추적에는 오류가 발생했을 때 메모리에 있던 모든 함수 목록이 포함됩니다. 

 

오류를 해결하는 데 도움이 되는 것은 Stack Trace의 처음 몇 줄입니다. 스택 추적에는 항상 Exception이 있습니다 . 아래 예에서 Exception이 MicroflowException인 것을 볼 수 있습니다.

이는 오류가 데이터베이스 엔진이나 보안 엔진이 아닌 Microflow에서 발생했음을 알려줍니다.

Exception 뒤에 오류 메시지가 나오는데, 이 경우 REST 서비스를 호출하는 동안 오류가 발생했음을 알려줍니다. Stack Trace는 또한 오류가 발생한 위치를 알려줍니다. 모듈 이름, Microflow 이름을 볼 수 있으며 활동 이름도 알려줍니다. 그 뒤에 내부적으로 호출된 함수 목록이 나오는데, 이 경우 함수가 하나만 있습니다. 이 특정한 경우에는 또 다른 예외가 표시되는데, 이번에는 404: Not Found라는 메시지가 나타나 무언가를 찾을 수 없음을 나타냅니다. 

[ 그림 4 ]

방금 한 분석을 바탕으로, REST 서비스를 호출하는 데 오류가 있었다는 결론을 내릴 수 있습니다. 그 오류는 REST 서비스를 찾을 수 없다는 것이었습니다. 좋은 다음 단계는 Call REST 활동의 웹 주소가 올바르게 설정되었는지 확인하는 것입니다.

 

스택 추적을 이해하는 것이 항상 쉬운 것은 아니지만, 로그 메시지의 이 부분에 포함된 정보는 종종 문제를 해결할 때 매우 귀중합니다.

 

일반적인 오류

로그 메시지를 읽는 기술은 메시지를 생성한 오류의 근본 원인이 무엇인지 이해하는 데 크게 의존합니다. Mendix의 맥락에서 모든 가능한 오류 메시지와 해석을 포함하는 포괄적인 목록을 제공할 방법은 없지만, 알아야 할 몇 가지 일반적인 문제가 있습니다.

 

1. Null Pointers

[ 그림 5 ]

2. Security Errors

기본적으로 마이크로플로는 엔티티 액세스 규칙을 고려하지 않습니다

그러나 추가 보안을 위해 마이크로플로 내에서 엔티티 액세스를 적용하는 경우 엔티티의 액세스 규칙이 올바르게 설정되지 않은 경우 오류가 발생할 수 있습니다. 예를 들어, 사용자가 갑자기 변경이나 커밋을 할 수 없게 되어 오류가 발생하고 수행하려는 프로세스가 중단될 수 있습니다.

 

 

3. Mathematical Errors

계산을 하거나 데이터를 비교할 때 예상치 못한 결과가 반환되면 수학적 오류가 발생합니다. 계산을 할 때는 값이 비어 있지 않은지 확인해야 합니다. 데이터를 비교할 때는 방정식의 양쪽에 비교할 데이터가 있는지도 확인해야 합니다. 

 

 

4. Java Out of Memory Errors

앱이 예상대로 실행되지 않는 경우, 가비지 수집이 모든 객체를 수집하는 데 많은 시간이 걸리고 확보하는 공간은 매우 적기 때문일 수 있습니다.

이는 대체로 짧은 시간 내에 많은 객체를 생성하거나, 때로는 빠른 속도로 연속해서 많은 객체를 생성하여 발생합니다.

 

 

5. Autocommitted Objects

사용자가 세션을 종료한 후에 볼 수 있는 로그 항목 중 하나는 해당 세션에 속한 객체의 자동 커밋을 설명합니다 . 즉, 사용자가 여러 개의 다른 연관된 객체로 객체를 생성하고 연관된 객체만 커밋했지만 첫 번째 객체는 커밋하지 않았다는 의미입니다. 그러면 첫 번째 객체는 자동 커밋 상태를 받는데, 그 이유는 해당 객체와의 연결이 데이터베이스에 저장되었기 때문입니다.

 

세션이 종료되는 순간, 첫 번째 객체가 삭제됩니다. 이는 고아(삭제 동작이 제대로 설정되지 않은 경우)가 발생하거나 연관된 객체가 삭제되는데, 이는 사용자가 기대하는 바가 아닙니다. 

 

 

6. Application Breaks on Startup

모든 앱은 시작 후 마이크로플로를 가질 수 있습니다. 이 마이크로플로에서 무언가 잘못되면 예외를 throw하거나 false를 반환하여 앱이 실행되지 않게 됩니다.

 

애플리케이션이 시작되지 않았다는 것을 알려주는 로그 항목은 세부 정보가 없는 한 줄로 구성되어 있습니다. 그러나 이전 로그 항목에서 오류의 원인을 설명하는 세부 정보를 찾을 수 있을 것입니다. 상황을 재현하려면 microflow 디버깅 도구를 사용할 수 있습니다.

 

앱이 해당 마이크로플로우의 중단점에서 일시 정지하지 않으므로, 애프터-스타트업 마이크로플로우를 직접 디버깅할 수 없다는 점에 유의하세요. 애프터-스타트업 마이크로플로우를 디버깅하려면 이를 비활성화한 다음 앱의 다른 곳에서 수동으로 트리거해야 합니다(예: 버튼에 연결).

 

 

출처 : https://academy.mendix.com/link/paths/104/Track-Application-Behavior-with-Logging