machinekit-hal
machinekit-hal copied to clipboard
Logging: multiple issues
Logging has multiple issues that have been around for a long time. This issue attempts to collect them together to help develop a broad strategy.
-
syslog_async:- This is a 3rd-party distribution that shouldn't be bundled (multiple times:
hal/lib/syslog_async.candmachinetalk/lib/syslog_async.c) - The "throttling" feature causes important error messages to be dropped during bursts of logging (e.g. when
DEBUG=5is set); I snuck in a patch to disable this in #315, commit 09c7c0ce
- This is a 3rd-party distribution that shouldn't be bundled (multiple times:
-
No unified system for logging
rtapi_support.ccontains thertapi_print_*infrastructure used by RTAPI to send messages through thertapi_message_buffer- When that ring buffer isn't initialized (esp. during
rtapi_msgdandrtapi_appstart-up), messages fall back to usingstderrandsyslog_async; the last time I looked, ring buffer init was breaking inrtapi_appand the fall back system was used throughoutrtapi_applifetime (I may well have broken this myself in the past) - The
rtapi_msg_handlerfeature that allows sending messages via custom functions is on thertapi_appside of the ring buffer; this seems counter-intuitive, since even with a custom handler, any messages originating fromrtapi_msgdwill continue to be routed throughsyslog_async
- When that ring buffer isn't initialized (esp. during
- In other places,
syslog_asyncis called directly instead of routing messages throughrtapi_print_*, especially under themachinetalksubdirectories - In my ROS integration, where
rtapi_msgdandrtapi_appare started and stopped by a ROS node, we'd like to see these messages piped into the ROS logging system where they can be correlated with ROS logs from other nodes
-
Possible problems with
rtapi_print_*messages and EMC Application messages being funneled into the same handler- In #199, I describe my fix that caused
rtapi_print()to always print, as it should - This resulted in the debug messages getting sent to the EMC error channel, which shouldn't happen, since they are unrelated to the messages a CNC operator wants to see pop up on the Axis screen
- In #199, I describe my fix that caused
https://github.com/machinekit/EMCApplication/issues/9
A new one:
During loadrt() and a comp's rtapi_app_main() execution, logging too much with e.g. hal_print_msg() apparently fills up some buffer and causes a hang. Once the ∅MQ RPC call times out (according to the timeout set in src/hal/utils/halcmd_rtapiapp.cc), the buffer is processed again, logs print, and rtapi_app_main() is able to complete. Although from the user's side, it appears that the loadrt() failed.
I haven't looked into it, but it's looking like the RPC call might be blocking other messaging activity.