로그와 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 ID | DEFAULT LOG LEVEL | LOG MODE | DLT CONTEXTS (CONTEXT ID) |
|---|---|---|---|---|
Sensor | SENS | VERBOSE | CONSOLE (기본값 그대로) | 1개: SENS (LOG LEVEL 기본값 INFO 그대로) |
Fusion | FUSN | VERBOSE | CONSOLE | 1개: FUSN |
Actuator | ACTA | VERBOSE | CONSOLE | 1개: ACTA |
CM | CM | FATAL | CONSOLE | 없음 |
EM | EM | FATAL | CONSOLE | 없음 |
APPLICATION DESCRIPTION 과 CONTEXT DESCRIPTION 은 모두 비워 둔다. 다섯 Adaptive Application 은 서로 독립이어서 어느 순서로 해도 된다. 이 장은 컨텍스트가 있는 셋을 먼저, CM 과 EM 을 뒤에 둔다.
Sensor 의 LOG CONFIG 와 DLT 컨텍스트 입력하기
LOG CONFIG 펼치기
-
왼쪽 EDITOR 뷰의 DESIGN 아래에서 VFB 를 클릭한다. 탭
AADesign:VFB가 열리고 루트 캔버스에 컴포지션 노드HPC [Ecu]가 보인다. 노드HPC [Ecu]를 더블클릭한다. 빵부스러기가System > HPC로 바뀌고 프레임HPC안에 8장에서 만든 노드 다섯 개와 커넥터 두 개가 보인다. 10장의 탭AADesign:VFB가 아직 열려 있고 빵부스러기가 이미System > HPC이면 바로 2 로 넘어간다.
그림 11-1. 컴포지션
HPC안으로 들어간 VFB 편집기. 번호는 이 장에서 설정하는 순서이다. ①Sensor, ②Fusion, ③Actuator, ④CM, ⑤EM. 다섯 모두 이 장에서 연다. 노드 배치는 8장에서 Auto Layout 을 누른 결과에 따라 그림과 다를 수 있으며 설계 값에는 영향이 없다. -
노드
Sensor를 더블클릭한다. 다이얼로그 AA Internal Behavior [Sensor] 가 PROPERTIES 탭이 선택된 채 열린다. -
오른쪽 패널의 EXECUTION 탭을 클릭한다. 9장에서 만든 프로세스 카드
Sensor가 보인다. 카드 안의 아코디언은 STARTUP CONFIG, FUNCTION GROUP STATE, EXECUTION DEPENDENCY, LOG CONFIG 순서이다. 카드가 접혀 있으면 카드 머리글Sensor를 클릭해 펼친다. -
접혀 있는 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 가 있다.
그림 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 입력하기
-
APPLICATION ID 칸에
SENS를 입력하고Tab을 누른다. 값이 확정되고 제목에 수정됨 표시가 붙어● AA Internal Behavior [Sensor]가 된다. -
DEFAULT LOG LEVEL 에서
VERBOSE(화면에는VER…)를 클릭한다.VERBOSE가 켜진다. -
LOG MODE 는
CONSOLE그대로 두고, APPLICATION DESCRIPTION 도 비워 둔다.
그림 11-3. 값을 넣은 뒤의 LOG CONFIG. ① APPLICATION ID =
SENS, ② 켜진VERBOSE버튼, ③ 기본값 그대로인CONSOLE버튼. 제목은● AA Internal Behavior [Sensor]이다.
DLT 컨텍스트 추가하기
-
LOG CONFIG 안의 DLT CONTEXTS 머리글을 클릭해 펼친다. 내용은
No DLT contexts defined이다. -
DLT CONTEXTS 머리글 오른쪽의 + 버튼(툴팁 Add DLT Context)을 클릭한다. 행
Context_0 : INFO가 접힌 채로 하나 생긴다. 행 끝의×는 툴팁 Remove DLT Context 로, 행을 지우는 버튼이다.
그림 11-4. 컨텍스트를 추가한 직후. ① DLT CONTEXTS 머리글, ② 머리글 오른쪽의 + 버튼(Add DLT Context), ③ 새 행
Context_0 : INFO. 행 머리글은<CONTEXT ID> : <LOG LEVEL>형식이다. -
행 머리글
Context_0 : INFO를 클릭해 펼친다. CONTEXT ID(값Context_0), CONTEXT DESCRIPTION(비어 있고 안내 글자String), 토글 LOG LEVEL(OFF부터VERBOSE까지 일곱 개, 기본값INFO)이 보인다. -
CONTEXT ID 칸의
Context_0을 지우고SENS를 입력한 뒤Tab을 누른다. 행 머리글이SENS : INFO로 바뀐다. -
LOG LEVEL 은
INFO그대로 둔다.
그림 11-5. 펼친 컨텍스트 행. ① 행 머리글
SENS : INFO, ② CONTEXT ID =SENS, ③ LOG LEVEL(INFO가 켜짐). 버튼 폭이 더 좁아FA…,IN…처럼 잘려 보인다. 위쪽의 APPLICATION IDSENS,VERBOSE,CONSOLE은 그대로이다.
주의. 새 컨텍스트 행은 접힌 채로 생긴다. 행 머리글을 한 번 더 클릭해야 CONTEXT ID 칸이 보인다.
참고. LOG LEVEL 토글에는 빈 선택지가 없어 항상 하나가 켜져 있다. 이 장은 기본값
INFO를 그대로 쓴다. 참조 설계와의 차이는 아래 "왜 이렇게 설계하는가" 에 적었다.
저장하고 닫기
-
다이얼로그 안에서
Ctrl+S를 누른다. 제목의●가 사라져AA Internal Behavior [Sensor]가 된다. 탭은 EXECUTION 그대로이고 입력한 값도 그대로 보인다.
그림 11-6. 저장한 뒤의 화면. ① 수정됨 표시가 없는 제목
AA Internal Behavior [Sensor], ② APPLICATION ID =SENS, ③ 행SENS : INFO. -
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 ID | DEFAULT LOG LEVEL | CONTEXT ID | 저장 뒤 행 머리글 |
|---|---|---|---|---|
Fusion | FUSN | VERBOSE | FUSN | FUSN : INFO |
Actuator | ACTA | VERBOSE | ACTA | ACTA : 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 만 입력하고 컨텍스트는 추가하지 않는다.
-
노드
CM을 더블클릭하고 EXECUTION 탭을 클릭한 뒤, LOG CONFIG 를 펼친다. -
APPLICATION ID 칸에
CM을 입력하고Tab을 누른다. -
DEFAULT LOG LEVEL 에서
FATAL(화면에는FAT…)을 클릭한다. LOG MODE 는CONSOLE그대로 둔다. -
DLT CONTEXTS 를 펼쳐 본다.
No DLT contexts defined그대로 두고 + 버튼은 누르지 않는다.
그림 11-7. 저장하기 전의
CM다이얼로그. ① APPLICATION ID =CM, ② 켜진FATAL버튼, ③No DLT contexts defined. 제목은● AA Internal Behavior [CM]이고, 위쪽 STARTUP CONFIG 에는 9장의 타임아웃1이 보인다. -
Ctrl+S를 누른 뒤 Close 를 클릭한다. 묻는 창 없이 닫힌다.
같은 방법으로 EM 을 입력한다.
| 노드 | APPLICATION ID | DEFAULT LOG LEVEL | DLT CONTEXTS |
|---|---|---|---|
EM | EM | FATAL | 없음 |
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 모듈에 모여 보인다. 이 표는 확인만 하고 고치지 않는다.
-
VFB 편집기의 빵부스러기에서 System 을 클릭해 루트 캔버스로 돌아온다.
-
컴포지션
HPC [Ecu]헤더 오른쪽의 머신 아이콘을 클릭한다. 다이얼로그 Machine Configuration [HPC] 가 열리고 탭 MACHINE, FUNCTION GROUP, PROCESSES, MODULE 이 보인다. -
MODULE 탭을 클릭하고, 왼쪽 MODULES 목록에서 Log and Trace 를 클릭한다. 가운데에 서브탭 DLT 하나와 그 아래 섹션 DLT ECU, DLT APPLICATION 이 보인다.
-
가운데를 확인한다. 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](/docs/ko/assets/images/11-08-machine-module-log-and-trace-table-c57e76ad51c4ca6fa2b24a6ce781a8da.png)
그림 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만 점선 상자의 컨텍스트로 한 번 더 이어진다.PROCESS DLT APPLICATION ID LOG MODE DEFAULT LOG LEVEL SensorSENSCONSOLEVERBOSEFusionFUSNCONSOLEVERBOSEActuatorACTACONSOLEVERBOSECMCMCONSOLEFATALEMEMCONSOLEFATAL -
표의
Sensor행에서 프로세스 이름 쪽을 클릭한다. 행이 펼쳐지며 배지 SWC 와Sensor, 그 아래No LogAndTrace ports가 보인다.
그림 11-9. 펼친
Sensor행. ①Sensor행, ② 펼친 내용 SWCSensor와No LogAndTrace ports. 이 설계에는 로그용 포트가 없으므로 이 문구가 정상이다. -
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 에 반영되는지는 확인하지 않았다.
검증 결과 보기
-
화면 아래 푸터의 왼쪽에서 다섯 번째 아이콘인 V 를 본다. 배지가 붙어 있지 않다.
-
VALIDATION 패널을 본다. 닫혀 있으면 푸터의 V 아이콘을 클릭한다. 헤더에 배지가 없고, 열 머리글 ELEMENT TYPE, NAME, DESCRIPTION, CONSTR 아래 본문이
No validation issues.이다.그림 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 패널에 어떻게 보고되는지 본다.