# CII 5.0 RC 1
## Features and Fixes
### CII Logger Names
(ECII-1011)
All logger names of CII were changed to be systematic and hierarchical,
e.g. to enable debug logs for MAL OPCUA, use: `log4cplus.loggers.cii.mal.opcua=DEBUG`
The list of new names can be found at:
https://gitlab.eso.org/ecos/eltsw-docs/-/wikis/KnowledgeBase/CII#adjust-cii-log-levels-log
### Log Viewer
- Fix: user-applied column sizes are not respected, auto-resizes back (ECII-1115)
- Fix: after pressing the clear button, no logs are displayed any more (ECII-1130)
#### Column Names
(ECII-1040)
We aligned the naming in log gui and log files.
Whitespace and special chars were removed from all column names:
(e.g. Log ID -> LogID, Error Date/Time -> ErrorDateTime, etc.)
The following columns were renamed:
- Level -> LogType
- Host -> HostName
- Code Reference -> Cref
This change affects code if it uses the log viewer's "visible columns" Qt property.
It also affects end-users when writing filter expressions into the gui's Query field
### MAL
- Fix: bad_function_call core dump. Tentative fix, to be confirmed (ELSV-963)
- Fix: segfault in Python MAL (ECII-1179)
- DDS ICD strings are no longer automatically limited to 255 chars (ECII-1037, ECII-1024)
#### ZPB Python MAL API no longer applies opaqueness to arrays of structs
(ECII-1050)
We are no longer generating "holder" classes to represent arrays
Example
For an ICD like this:
```
```
CII 4 generated the following types:
- MyStruct
- VectorMyStruct
which were used like this:
```
mystruct1 = mal.createDataEntity(MyStruct); mystruct1.setVal(True)
mystruct2 = mal.createDataEntity(MyStruct); mystruct2.setVal(False)
mystructs = VectorMyStruct()
mystructs.append(mystruct1)
mystructs.append(mystruct2)
returnval = myinterface.Reverse (mystructs)
isinstance (returnval, list) # False, it is a VectorMyStruct
print (returnval[0].getVal()) # False
print (returnval[1].getVal()) # True
```
CII 5 generates only:
- MyStruct
and uses native python lists:
```
mystruct1 = mal.createDataEntity(MyStruct); mystruct1.setVal(True)
mystruct2 = mal.createDataEntity(MyStruct); mystruct2.setVal(False)
mystructs = [] # <--- use plain python list
mystructs.append(mystruct1)
mystructs.append(mystruct2)
returnval = myinterface.Reverse (mystructs)
isinstance (returnval, list) # True
print (returnval[0].getVal()) # False
print (returnval[1].getVal()) # True
```
#### Python MAL QoS lists
We now use plain lists instead of a custom list type.
```
THREE_SECONDS = datetime.timedelta(0, 3)
qos1 = elt.pymal.rr.qos.ConnectionTime(THREE_SECONDS)
qos2 = elt.pymal.rr.qos.ReplyTime(THREE_SECONDS)
qoslist = elt.pymal.RrQoSlist (qos1, qos2) <-- no longer accepted by getClient
qoslist = [ qos1, qos2 ] <-- use this instead
with factory.getClient(uri,
RobotControlSync,
qos=qoslist) as robot:
```
### Config(-NG)
- Fix: file inclusion from absolute path fails (ECII-1060)
## General
- MAL internal clean-ups (1072, 1152, 1155, 1159, 1162)
- SRV internal clean-up (967, 972, 1132, 1133, 1136, 1154, 1163, 1168, 1180, 1181, 1182, 1200)
## Knowledge Base
- Getting More Logs [MAL Log]
https://gitlab.eso.org/ecos/eltsw-docs/-/wikis/KnowledgeBase/CII#getting-more-logs-mal-log
- Less or More Logs [OLDB Log]
https://gitlab.eso.org/ecos/eltsw-docs/-/wikis/KnowledgeBase/CII#less-or-more-logs-oldb-log
- Adjust CII Log Levels [Log]
https://gitlab.eso.org/ecos/eltsw-docs/-/wikis/KnowledgeBase/CII#adjust-cii-log-levels-log