본문으로 건너뛰기

로그와 DLT

이 장에서 할 일​

이 장에서는 컴포지션 HPC 안의 Adaptive Application 다섯 개를 차례로 더블클릭해 AA Internal Behavior 다이얼로그를 열고, EXECUTION 탭 프로세스 카드의 LOG CONFIG 를 채운다. 각 프로세스에 DLT(Diagnostic Log and Trace) 애플리케이션 ID 인 APPLICATION ID 와 기본 로그 레벨 DEFAULT LOG LEVEL 을 정한다. Sensor, Fusion, Actuator 에는 DLT CONTEXTS 에 컨텍스트를 하나씩 추가한다. Sensor 를 절차로 보이고, Fusion 과 Actuator 는 표로 반복하며, 컨텍스트가 없는 CM 과 EM 은 CM 의 화면 하나로 보인다. 마지막으로 Machine Configuration [HPC] 다이얼로그의 MODULE › Log and Trace 에서 다섯 애플리케이션이 표에 모였는지 확인한다.

이 장을 마치면 design/SWC/AdaptiveApplication/ 의 *.swc.io.model 다섯 개의 process 에 log-config 가 채워진다. 이것이 ARXML 익스포트에서 참조 설계의 DLT-APPLICATION 다섯 개, DLT-CONTEXT 세 개, DLT-APPLICATION-TO-PROCESS-MAPPING 다섯 개가 된다.

시작하기 전에​

  • 서비스 인스턴스 매핑을 마친 상태에서 시작한다. 다섯 Adaptive Application 에는 Executable 과 Process에서 만든 프로세스가 하나씩 있다.
  • 다섯 프로세스의 LOG CONFIG 는 아직 기본값이다. APPLICATION ID 는 비어 있고, DEFAULT LOG LEVEL 은 INFO, LOG MODE 는 CONSOLE 이며, DLT CONTEXTS 는 비어 있다.
  • 머신 설정에서 MODULE › Log and Trace 의 ECU ID 를 ECU1 로 입력했다. 이 장의 DLT 애플리케이션은 이 DLT ECU 아래에 모인다.
  • VALIDATION 패널은 No validation issues. 이다.

이 장에서 키보드로 입력하는 값은 APPLICATION ID 다섯 개(SENS, FUSN, ACTA, CM, EM)와 CONTEXT ID 세 개(SENS, FUSN, ACTA)뿐이다. 나머지는 클릭, 토글, + 버튼, Ctrl+S, Close 이다.

Adaptive Application (프로세스)APPLICATION IDDEFAULT LOG LEVELLOG MODEDLT CONTEXTS (CONTEXT ID)
SensorSENSVERBOSECONSOLE (기본값 그대로)1개: SENS (LOG LEVEL 기본값 INFO 그대로)
FusionFUSNVERBOSECONSOLE1개: FUSN
ActuatorACTAVERBOSECONSOLE1개: ACTA
CMCMFATALCONSOLE없음
EMEMFATALCONSOLE없음

APPLICATION DESCRIPTION 과 CONTEXT DESCRIPTION 은 모두 비워 둔다. 다섯 Adaptive Application 은 서로 독립이어서 어느 순서로 해도 된다. 이 장은 컨텍스트가 있는 셋을 먼저, CM 과 EM 을 뒤에 둔다.

Sensor 의 LOG CONFIG 와 DLT 컨텍스트 입력하기​

LOG CONFIG 펼치기​

  1. 왼쪽 EDITOR 뷰의 DESIGN 아래에서 VFB 를 클릭한다. 탭 AADesign:VFB 가 열리고 루트 캔버스에 컴포지션 노드 HPC [Ecu] 가 보인다. 노드 HPC [Ecu] 를 더블클릭한다. 빵부스러기가 System > HPC 로 바뀌고 프레임 HPC 안에 8장에서 만든 노드 다섯 개와 커넥터 두 개가 보인다. 10장의 탭 AADesign:VFB 가 아직 열려 있고 빵부스러기가 이미 System > HPC 이면 바로 2 로 넘어간다.

    컴포지션 HPC 안의 Adaptive Application 다섯 개

    그림 11-1. 컴포지션 HPC 안으로 들어간 VFB 편집기. 번호는 이 장에서 설정하는 순서이다. ① Sensor, ② Fusion, ③ Actuator, ④ CM, ⑤ EM. 다섯 모두 이 장에서 연다. 노드 배치는 8장에서 Auto Layout 을 누른 결과에 따라 그림과 다를 수 있으며 설계 값에는 영향이 없다.

  2. 노드 Sensor 를 더블클릭한다. 다이얼로그 AA Internal Behavior [Sensor] 가 PROPERTIES 탭이 선택된 채 열린다.

  3. 오른쪽 패널의 EXECUTION 탭을 클릭한다. 9장에서 만든 프로세스 카드 Sensor 가 보인다. 카드 안의 아코디언은 STARTUP CONFIG, FUNCTION GROUP STATE, EXECUTION DEPENDENCY, LOG CONFIG 순서이다. 카드가 접혀 있으면 카드 머리글 Sensor 를 클릭해 펼친다.

  4. 접혀 있는 LOG CONFIG 머리글을 클릭한다. 필드 APPLICATION ID 와 APPLICATION DESCRIPTION(둘 다 비어 있고 안내 글자 String), 토글 DEFAULT LOG LEVEL(OFF, FATAL, ERROR, WARN, INFO, DEBUG, VERBOSE, 기본값 INFO), 토글 LOG MODE(CONSOLE, FILE, NETWORK, 기본값 CONSOLE)가 펼쳐진다. 맨 아래에 접힌 DLT CONTEXTS 가 있다.

    Sensor 의 EXECUTION 탭에서 펼친 LOG CONFIG 기본값

    그림 11-2. EXECUTION 탭에서 LOG CONFIG 를 펼친 화면. ① LOG CONFIG 머리글, ② 비어 있는 APPLICATION ID, ③ DEFAULT LOG LEVEL(INFO 가 켜짐), ④ LOG MODE(CONSOLE 이 켜짐), ⑤ 접힌 DLT CONTEXTS. 위쪽의 STARTUP CONFIG 에는 9장에서 넣은 타임아웃 5 가 보인다.

참고. DEFAULT LOG LEVEL 의 버튼은 폭이 좁아 글자가 잘려 보일 수 있다. 화면에는 FAT…, ERR…, DEB…, VER… 로 보이며 각각 FATAL, ERROR, DEBUG, VERBOSE 이다. 이 장의 그림은 패널이 아래로 스크롤된 상태라서 카드 머리글 Sensor 가 화면 위로 밀려 보이지 않는다.

APPLICATION ID 와 DEFAULT LOG LEVEL 입력하기​

  1. APPLICATION ID 칸에 SENS 를 입력하고 Tab 을 누른다. 값이 확정되고 제목에 수정됨 표시가 붙어 ● AA Internal Behavior [Sensor] 가 된다.

  2. DEFAULT LOG LEVEL 에서 VERBOSE(화면에는 VER…)를 클릭한다. VERBOSE 가 켜진다.

  3. LOG MODE 는 CONSOLE 그대로 두고, APPLICATION DESCRIPTION 도 비워 둔다.

    APPLICATION ID 에 SENS 를 입력하고 VERBOSE 를 고른 화면

    그림 11-3. 값을 넣은 뒤의 LOG CONFIG. ① APPLICATION ID = SENS, ② 켜진 VERBOSE 버튼, ③ 기본값 그대로인 CONSOLE 버튼. 제목은 ● AA Internal Behavior [Sensor] 이다.

DLT 컨텍스트 추가하기​

  1. LOG CONFIG 안의 DLT CONTEXTS 머리글을 클릭해 펼친다. 내용은 No DLT contexts defined 이다.

  2. DLT CONTEXTS 머리글 오른쪽의 + 버튼(툴팁 Add DLT Context)을 클릭한다. 행 Context_0 : INFO 가 접힌 채로 하나 생긴다. 행 끝의 × 는 툴팁 Remove DLT Context 로, 행을 지우는 버튼이다.

    DLT CONTEXTS 의 + 버튼으로 행 Context_0 : INFO 를 추가한 화면

    그림 11-4. 컨텍스트를 추가한 직후. ① DLT CONTEXTS 머리글, ② 머리글 오른쪽의 + 버튼(Add DLT Context), ③ 새 행 Context_0 : INFO. 행 머리글은 <CONTEXT ID> : <LOG LEVEL> 형식이다.

  3. 행 머리글 Context_0 : INFO 를 클릭해 펼친다. CONTEXT ID(값 Context_0), CONTEXT DESCRIPTION(비어 있고 안내 글자 String), 토글 LOG LEVEL(OFF 부터 VERBOSE 까지 일곱 개, 기본값 INFO)이 보인다.

  4. CONTEXT ID 칸의 Context_0 을 지우고 SENS 를 입력한 뒤 Tab 을 누른다. 행 머리글이 SENS : INFO 로 바뀐다.

  5. LOG LEVEL 은 INFO 그대로 둔다.

    컨텍스트 행을 펼쳐 CONTEXT ID 에 SENS 를 입력한 화면

    그림 11-5. 펼친 컨텍스트 행. ① 행 머리글 SENS : INFO, ② CONTEXT ID = SENS, ③ LOG LEVEL(INFO 가 켜짐). 버튼 폭이 더 좁아 FA…, IN… 처럼 잘려 보인다. 위쪽의 APPLICATION ID SENS, VERBOSE, CONSOLE 은 그대로이다.

주의. 새 컨텍스트 행은 접힌 채로 생긴다. 행 머리글을 한 번 더 클릭해야 CONTEXT ID 칸이 보인다.

참고. LOG LEVEL 토글에는 빈 선택지가 없어 항상 하나가 켜져 있다. 이 장은 기본값 INFO 를 그대로 쓴다. 참조 설계와의 차이는 아래 "왜 이렇게 설계하는가" 에 적었다.

저장하고 닫기​

  1. 다이얼로그 안에서 Ctrl+S 를 누른다. 제목의 ● 가 사라져 AA Internal Behavior [Sensor] 가 된다. 탭은 EXECUTION 그대로이고 입력한 값도 그대로 보인다.

    Ctrl+S 로 저장한 뒤의 Sensor 다이얼로그

    그림 11-6. 저장한 뒤의 화면. ① 수정됨 표시가 없는 제목 AA Internal Behavior [Sensor], ② APPLICATION ID = SENS, ③ 행 SENS : INFO.

  2. Close 를 클릭한다. 저장했으므로 묻는 창 없이 닫힌다.

Sensor.swc.io.model 의 process 에 다음 log-config 가 저장된다. 다이얼로그 안의 Ctrl+S 는 AADesign:VFB 탭까지 함께 저장하므로, 닫은 뒤 수정됨 표시 ● 가 붙은 탭은 없다.

"log-config": {
"application-id": "SENS",
"default-log-level": "VERBOSE",
"log-mode": "CONSOLE",
"dlt-contexts": [
{ "context-id": "SENS", "log-level": "INFO" }
]
}

Fusion 과 Actuator 에 같은 방법으로 입력하기​

같은 방법으로 Fusion 과 Actuator 를 입력한다. 노드를 더블클릭하고 EXECUTION 탭에서 LOG CONFIG 를 펼친 뒤, 표의 값을 입력하고 DLT CONTEXTS 의 + 버튼으로 컨텍스트를 하나 추가한다. 행을 펼쳐 CONTEXT ID 를 바꾸고 Ctrl+S, Close 순서로 마친다.

노드APPLICATION IDDEFAULT LOG LEVELCONTEXT ID저장 뒤 행 머리글
FusionFUSNVERBOSEFUSNFUSN : INFO
ActuatorACTAVERBOSEACTAACTA : INFO

LOG MODE 는 둘 다 CONSOLE 그대로, LOG LEVEL 은 INFO 그대로 둔다. Fusion.swc.io.model 과 Actuator.swc.io.model 의 log-config 는 Sensor 와 같은 모양이고, application-id 와 context-id 만 FUSN, ACTA 이다.

CM 과 EM 은 컨텍스트 없이 FATAL 로 입력하기​

CM 과 EM 은 APPLICATION ID 와 DEFAULT LOG LEVEL 만 입력하고 컨텍스트는 추가하지 않는다.

  1. 노드 CM 을 더블클릭하고 EXECUTION 탭을 클릭한 뒤, LOG CONFIG 를 펼친다.

  2. APPLICATION ID 칸에 CM 을 입력하고 Tab 을 누른다.

  3. DEFAULT LOG LEVEL 에서 FATAL(화면에는 FAT…)을 클릭한다. LOG MODE 는 CONSOLE 그대로 둔다.

  4. DLT CONTEXTS 를 펼쳐 본다. No DLT contexts defined 그대로 두고 + 버튼은 누르지 않는다.

    CM 의 LOG CONFIG. APPLICATION ID CM, FATAL, 컨텍스트 없음

    그림 11-7. 저장하기 전의 CM 다이얼로그. ① APPLICATION ID = CM, ② 켜진 FATAL 버튼, ③ No DLT contexts defined. 제목은 ● AA Internal Behavior [CM] 이고, 위쪽 STARTUP CONFIG 에는 9장의 타임아웃 1 이 보인다.

  5. Ctrl+S 를 누른 뒤 Close 를 클릭한다. 묻는 창 없이 닫힌다.

같은 방법으로 EM 을 입력한다.

노드APPLICATION IDDEFAULT LOG LEVELDLT CONTEXTS
EMEMFATAL없음

CM.swc.io.model 의 log-config 는 {"application-id":"CM","default-log-level":"FATAL","log-mode":"CONSOLE","dlt-contexts":[]} 이다. EM 은 application-id 만 EM 이고 나머지는 같다.

참고. DLT 에서는 애플리케이션 ID 와 컨텍스트 ID 를 4글자 이하로 쓰는 것이 관례이다. 이 장의 값은 모두 4글자 이하이다. 제품이 더 긴 값을 막는지는 이 장에서 확인하지 않았다. 다섯 APPLICATION ID 는 머신 안에서 서로 달라야 한다. ID 가 겹칠 때 검증이 무엇을 보고하는지는 검증에서 본다.

머신의 Log and Trace 표 확인하기​

다섯 프로세스의 로그 설정은 머신의 Log and Trace 모듈에 모여 보인다. 이 표는 확인만 하고 고치지 않는다.

  1. VFB 편집기의 빵부스러기에서 System 을 클릭해 루트 캔버스로 돌아온다.

  2. 컴포지션 HPC [Ecu] 헤더 오른쪽의 머신 아이콘을 클릭한다. 다이얼로그 Machine Configuration [HPC] 가 열리고 탭 MACHINE, FUNCTION GROUP, PROCESSES, MODULE 이 보인다.

  3. MODULE 탭을 클릭하고, 왼쪽 MODULES 목록에서 Log and Trace 를 클릭한다. 가운데에 서브탭 DLT 하나와 그 아래 섹션 DLT ECU, DLT APPLICATION 이 보인다.

  4. 가운데를 확인한다. DLT ECU 의 ECU ID 는 2장에서 넣은 ECU1 이다. 그 아래 DLT APPLICATION 표의 머리글은 PROCESS, DLT APPLICATION ID, LOG MODE, DEFAULT LOG LEVEL 이고, 다섯 행이 있다.

    Machine Configuration [HPC] 의 MODULE › Log and Trace. DLT APPLICATION 표 다섯 행과 DLT HIERARCHY

    그림 11-8. MODULE 탭의 Log and Trace. ① MODULES 목록의 Log and Trace, ② ECU ID = ECU1, ③ DLT APPLICATION 표 다섯 행. 오른쪽 DLT HIERARCHY 에서 ECU1 상자가 SENS, FUSN, ACTA, CM, EM 다섯 애플리케이션으로 이어지고, SENS, FUSN, ACTA 만 점선 상자의 컨텍스트로 한 번 더 이어진다.

    PROCESSDLT APPLICATION IDLOG MODEDEFAULT LOG LEVEL
    SensorSENSCONSOLEVERBOSE
    FusionFUSNCONSOLEVERBOSE
    ActuatorACTACONSOLEVERBOSE
    CMCMCONSOLEFATAL
    EMEMCONSOLEFATAL
  5. 표의 Sensor 행에서 프로세스 이름 쪽을 클릭한다. 행이 펼쳐지며 배지 SWC 와 Sensor, 그 아래 No LogAndTrace ports 가 보인다.

    DLT APPLICATION 표의 Sensor 행을 펼친 화면

    그림 11-9. 펼친 Sensor 행. ① Sensor 행, ② 펼친 내용 SWC Sensor 와 No LogAndTrace ports. 이 설계에는 로그용 포트가 없으므로 이 문구가 정상이다.

  6. Close 를 클릭해 다이얼로그를 닫는다.

참고. 2장에서 같은 자리를 봤을 때 DLT APPLICATION 은 No processes configured, DLT HIERARCHY 는 No DLT applications 였다. 9장에서 프로세스를 만들고 이 장에서 LOG CONFIG 를 채운 결과가 다섯 행으로 나타난 것이다. 머신 다이얼로그 제목의 대괄호 안은 머신 이름 Ecu 가 아니라 컴포지션 이름 HPC 이다.

참고. 표의 DLT APPLICATION ID 셀은 입력칸이고, LOG MODE 와 DEFAULT LOG LEVEL 셀은 × 와 ⌄ 가 달린 드롭다운이다. 이 장에서는 값을 AA 다이얼로그에서만 입력한다. 표에서 고친 값이 Adaptive Application 쪽 LOG CONFIG 에 반영되는지는 확인하지 않았다.

검증 결과 보기​

  1. 화면 아래 푸터의 왼쪽에서 다섯 번째 아이콘인 V 를 본다. 배지가 붙어 있지 않다.

  2. VALIDATION 패널을 본다. 닫혀 있으면 푸터의 V 아이콘을 클릭한다. 헤더에 배지가 없고, 열 머리글 ELEMENT TYPE, NAME, DESCRIPTION, CONSTR 아래 본문이 No validation issues. 이다.

    No validation issues. 를 보여 주는 Validation 패널

    그림 11-10. 다섯 다이얼로그를 모두 저장한 뒤의 VALIDATION 패널. 본문은 No validation issues. 이다.

왜 이렇게 설계하는가​

  • DLT 애플리케이션은 다섯, 컨텍스트는 셋이다. 참조 설계에는 DLT-APPLICATION 이 SENS, FUSN, ACTA(VERBOSE, CONSOLE)와 CM, EM(FATAL, CONSOLE) 다섯 개 있고, DLT-CONTEXT 는 SENS, FUSN, ACTA 세 개뿐이다. 컨텍스트 ID 는 애플리케이션 ID 와 같다. 이 장의 입력은 이 값을 그대로 옮긴 것이다. VERBOSE 는 모든 레벨의 로그를 내보내고, FATAL 은 치명적 오류만 내보낸다.
  • APPLICATION ID 가 익스포트의 이름이 된다. 익스포트에서 APPLICATION ID 는 DLT-APPLICATION 의 SHORT-NAME 이자 APPLICATION-ID 가 된다(/DLT/Ecu/Ecu/SENS 등). DLT ECU 경로 /DLT/Ecu/Ecu 도 참조 설계와 같다. 프로세스와의 연결 Mapping_SENS_TO_Sensor 부터 Mapping_EM_TO_EM 까지 다섯 개도 참조 설계와 같은 이름으로 나온다.
  • 컨텍스트의 이름은 DltContext_0 으로 바뀐다. 참조 설계의 컨텍스트 SHORT-NAME 은 SENS 이지만, PAIO 에는 컨텍스트의 SHORT-NAME 을 입력하는 칸이 없어 익스포트에서 DltContext_0 이 된다. CONTEXT ID 값 SENS 는 그대로 남는다.
  • 컨텍스트의 LOG LEVEL 은 참조 설계와 다를 수 있다. 참조 설계의 DLT-CONTEXT 는 로그 레벨이 비어 있다. PAIO 의 LOG LEVEL 토글은 항상 하나가 켜져 있으므로, 이 장대로 만든 익스포트에는 INFO 가 실릴 수 있다. 이 경로로 만든 익스포트는 측정하지 않았다.
  • 로그용 포트는 없다. 참조 설계에는 DLT-LOG-SINK 도 ara::log 포트도 없다. 그래서 그림 11-9 의 No LogAndTrace ports 가 정상이다.
  • EM 의 로그 설정은 참조 설계와 같다. EM 을 MachineFG 의 Startup 에 묶은 것은 참조 설계와 의도적으로 다른 부분이지만, 그 차이는 Executable 과 Process의 일이고 이 장의 LOG CONFIG 와는 관계가 없다.

확인하기​

  • Sensor, Fusion, Actuator 의 LOG CONFIG 에서 APPLICATION ID 가 각각 SENS, FUSN, ACTA 이고 DEFAULT LOG LEVEL 은 VERBOSE, LOG MODE 는 CONSOLE 이다.
  • 이 셋의 DLT CONTEXTS 에 행이 하나씩 있고, 머리글이 SENS : INFO, FUSN : INFO, ACTA : INFO 이다.
  • CM 과 EM 의 APPLICATION ID 가 CM, EM 이고 DEFAULT LOG LEVEL 은 FATAL, DLT CONTEXTS 는 No DLT contexts defined 이다.
  • 다이얼로그 제목과 탭 AADesign:VFB 에 수정됨 표시 ● 가 없다.
  • Machine Configuration [HPC] › MODULE › Log and Trace 의 DLT APPLICATION 표에 다섯 행이 있고, DLT HIERARCHY 에서 ECU1 이 다섯 애플리케이션으로 이어진다.
  • VALIDATION 패널에 No validation issues. 가 보이고 헤더에 배지가 없다.

다음 단계​

검증에서 지금까지 만든 설계를 검증하고, 일부러 넣은 결함이 VALIDATION 패널에 어떻게 보고되는지 본다.