Introduce new logging API, fixes #858
PiperOrigin-RevId: 930744288 Change-Id: I6ec1203b55c031390f3eef23192e2337508ce886
This commit is contained in:
committed by
Copybara-Service
parent
a2abaf7aef
commit
58f6d52491
@@ -576,4 +576,47 @@ typedef enum mjtSleepState_ { // sleep state of an object
|
||||
mjS_AWAKE = 1 // object is awake
|
||||
} mjtSleepState;
|
||||
|
||||
|
||||
|
||||
//---------------------------------- logging -------------------------------------------------------
|
||||
|
||||
typedef enum mjtLogLevel_ { // log message severity
|
||||
mjLOG_DEBUG = 0, // internal engine debug trace (opt-in via topic filtering)
|
||||
mjLOG_INFO, // informational (opt-in via topic filtering)
|
||||
mjLOG_WARNING, // warning
|
||||
mjLOG_ERROR, // error
|
||||
} mjtLogLevel;
|
||||
|
||||
typedef enum mjtLogTopic_ { // log topic identifiers
|
||||
mjTOPIC_NONE = 0, // no topic (always passes filtering)
|
||||
// INFO topics:
|
||||
mjTOPIC_TIME_STP = 1, // timing diagnostics (step)
|
||||
mjTOPIC_TIME_CMP = 2, // timing diagnostics (compile)
|
||||
// DEBUG topics:
|
||||
mjTOPIC_SLEEP = 3, // sleep/wake events
|
||||
|
||||
mjNTOPIC = 3 // number of filterable topics
|
||||
} mjtLogTopic;
|
||||
|
||||
typedef struct mjLogMessage_ { // structured log message
|
||||
int level; // mjtLogLevel
|
||||
int topic; // mjtLogTopic (0 for error/warning/user)
|
||||
char subject[1024]; // message subject (one-liner, printf-formatted)
|
||||
const char* body; // message body (multi-line detail, or NULL)
|
||||
const char* func; // __func__ or NULL
|
||||
const char* file; // __FILE__ or NULL
|
||||
int line; // __LINE__ or 0
|
||||
mjtBool timestamp; // prepend timestamp to output
|
||||
} mjLogMessage;
|
||||
|
||||
typedef struct mjLogConfig_ { // log handler default configuration
|
||||
mjtBool logto_console; // print to console (default: true)
|
||||
mjtBool logto_file; // print to log file (default: true)
|
||||
char logfile[1024]; // log file path (default: "MUJOCO_LOG.TXT")
|
||||
int topics; // enabled info topic bitmask (default: 0)
|
||||
} mjLogConfig;
|
||||
|
||||
// function type for log handler callback; must be thread-safe, must not call mju_error
|
||||
typedef void (*mjfLogHandler)(const mjLogMessage*);
|
||||
|
||||
#endif // MUJOCO_INCLUDE_MJTYPE_H_
|
||||
|
||||
+22
-3
@@ -41,12 +41,14 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// user error and memory handlers
|
||||
MJAPI extern void (*mju_user_error)(const char*);
|
||||
MJAPI extern void (*mju_user_warning)(const char*);
|
||||
// user memory handlers
|
||||
MJAPI extern void* (*mju_user_malloc)(size_t);
|
||||
MJAPI extern void (*mju_user_free)(void*);
|
||||
|
||||
// legacy error/warning handlers (deprecated: prefer mju_setLogHandler)
|
||||
MJAPI extern void (*mju_user_error)(const char*);
|
||||
MJAPI extern void (*mju_user_warning)(const char*);
|
||||
|
||||
|
||||
// callbacks extending computation pipeline
|
||||
MJAPI extern mjfGeneric mjcb_passive;
|
||||
@@ -71,6 +73,7 @@ MJAPI extern const char* mjLABELSTRING[mjNLABEL];
|
||||
MJAPI extern const char* mjFRAMESTRING[mjNFRAME];
|
||||
MJAPI extern const char* mjVISSTRING[mjNVISFLAG][3];
|
||||
MJAPI extern const char* mjRNDSTRING[mjNRNDFLAG][3];
|
||||
MJAPI extern const char* mjTOPICSTRING[mjNTOPIC];
|
||||
|
||||
|
||||
//---------------------------------- Virtual file system -------------------------------------------
|
||||
@@ -978,6 +981,22 @@ MJAPI void mju_warning(const char* msg, ...) mjPRINTFLIKE(1, 2);
|
||||
// Clear user error and memory handlers.
|
||||
MJAPI void mju_clearHandlers(void);
|
||||
|
||||
// Set the active log handler; return the previous handler.
|
||||
// If handler is NULL, restore the default handler.
|
||||
MJAPI mjfLogHandler mju_setLogHandler(mjfLogHandler handler);
|
||||
|
||||
// Get default handler configuration.
|
||||
MJAPI mjLogConfig mju_getLogConfig(void);
|
||||
|
||||
// Set default handler configuration.
|
||||
MJAPI void mju_setLogConfig(mjLogConfig config);
|
||||
|
||||
// Log an info message with optional topic filtering.
|
||||
MJAPI void mju_info(int topic, const char* msg, ...) mjPRINTFLIKE(2, 3);
|
||||
|
||||
// Dispatch a structured log message to the active handler.
|
||||
MJAPI void mju_message(const mjLogMessage* msg);
|
||||
|
||||
// Allocate memory; byte-align on 64; pad size to multiple of 64.
|
||||
MJAPI void* mju_malloc(size_t size);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user