aimrt.log
Configuration Overview
The aimrt.log configuration item is used to configure logging. Detailed configuration items are described below:
Node |
Type |
Optional |
Default |
Description |
|---|---|---|---|---|
core_lvl |
string |
Optional |
“Info” |
Framework log level |
default_module_lvl |
string |
Optional |
“Info” |
Default module log level |
enable_crash_log |
bool |
Optional |
false |
Whether to output stack trace on program crash |
backends |
array |
Optional |
“” |
List of log backends |
backends[i].type |
string |
Required |
“” |
Log backend type |
backends[i].options |
map |
Optional |
- |
Specific backend config |
Log level options include the following (case-insensitive):
Trace
Debug
Info
Warn
Error
Fatal
Off
aimrt.log configuration notes:
core_lvlsets the log level for the AimRT runtime kernel; kernel logs are usually set to Info.default_module_lvlis the default module log level.enable_crash_logis a boolean type used to choose whether to output a stack trace when the program crashesbackendsis an array used to register various log backends.backends[i].typeis the type of the log backend. AimRT officially provides several log backends, and some plugins also provide additional types. Some backends allow duplicate registration; see the corresponding backend documentation for details.backends[i].optionsare initialization parameters passed by AimRT to each log backend. The format of this configuration is defined by each backend type; refer to the corresponding backend documentation.
Here is a simple example:
aimrt:
log:
core_lvl: INFO
default_module_lvl: INFO
backends:
- type: console
- type: rotate_file
options:
path: ./log
filename: examples_cpp_executor_real_time.log
console Console Log Backend
The console log backend is an officially provided AimRT backend that prints logs to the console,which works on the guard thread. All its configuration items are as follows:
Node |
Type |
Optional |
Default |
Description |
|---|---|---|---|---|
color |
bool |
Optional |
true |
Whether to print in color |
module_filter |
string |
Optional |
“(.*)” |
Module filter |
pattern |
string |
Optional |
“[%c.%f][%l][t][%n][%g:%R @%F]%v” |
Log output format |
Usage notes:
The
consolebackend does not allow duplicate registration; only one instance is allowed per AimRT process.colorconfigures whether to use colored output. This may not be supported on some operating systems.module_filtersupports regular expressions to determine which module logs are processed by this backend. This differs from module log levels, which are global, precedence-based, and affect all backends, whereas this filter only affects the current backend.log_executor_namespecifies the log executor. It must be thread-safe; if not provided, the guard thread is used.patternuses"%" + characterfor formatting. Available formats are:
Format |
Description |
Example |
|---|---|---|
%c |
Full date and time |
2024-03-15 14:30:45 |
%Y |
Year |
2024 |
%m |
Month |
03 |
%d |
Day |
15 |
%H |
Hour |
14 |
%M |
Minute |
30 |
%S |
Second |
45 |
%D |
Date only |
2024-03-15 |
%T |
Time only |
14:30:45 |
%f |
Microseconds |
123456 |
%A |
Weekday |
Sunday |
%a |
Weekday (abbreviated) |
Sun |
%l |
Log level |
Info |
%t |
Thread ID |
1234 |
%n |
Module name |
test_module |
%G |
Filename (last segment) |
test_file.cpp |
%g |
Full file path |
/XX/YY/ZZ/test_file.cpp |
%R |
Line number |
20 |
%F |
Function name |
TestFunc |
%v |
Log message content |
“This is a log message” |
%other |
Literal output |
e.g. |
Here is a simple example:
aimrt:
executor:
executors:
- name: test_log_executor
type: tbb_thread
options:
thread_num: 1
log:
core_lvl: INFO
default_module_lvl: INFO
backends:
- type: console
options:
color: true
module_filter: "(.*)"
log_executor_name: test_log_executor.log
rotate_file Rotating File Log Backend
The rotate_file log backend is an officially provided AimRT backend that writes logs to files, which works on the guard thread. All its configuration items are as follows:
Node |
Type |
Optional |
Default |
Description |
|---|---|---|---|---|
path |
string |
Required |
“./log” |
Directory for log files |
filename |
string |
Required |
“aimrt.log” |
Base name for log files |
max_file_size_m |
unsigned int |
Optional |
16 |
Maximum file size in Mb |
max_file_num |
unsigned int |
Optional |
100 |
Maximum number of files. 0 means unlimited |
module_filter |
string |
Optional |
“(.*)” |
Module filter |
pattern |
string |
Optional |
“[%c.%f][%l][t][%n][%g:%R @%F]%v” |
Log output format |
enable_sync |
bool |
Optional |
false |
Enable periodic flush |
sync_interval_ms |
unsigned int |
Optional |
30000 |
Periodic flush interval in ms |
sync_executor_name |
string |
Conditional |
“” |
Executor for periodic flush. Required if enable_sync is true |
suffix_with_timestamp |
bool |
Optional |
true |
Append timestamp suffix to log file name |
Usage notes:
The
rotate_filebackend allows duplicate registration, enabling different modules to log to different files.pathsets the directory for log files. If the directory does not exist, it will be created; creation failure throws an exception.filenamesets the base name for log files.When a log file exceeds
max_file_size_m, a new file is created and the old one is renamed with an_xsuffix.When the number of log files exceeds
max_file_num, the oldest file is deleted. Setting to 0 disables deletion.module_filtersupports regular expressions to determine which module logs are processed by this backend. This differs from module log levels, which are global, precedence-based, and affect all backends, whereas this filter only affects the current backend.log_executor_namespecifies the log executor. It must be thread-safe; if not provided, the guard thread is used.patternuses"%" + characterfor formatting; see thepatternsection under console console.enable_syncenables periodic flushing. When enabled, data is flushed to disk everysync_interval_msto ensure data integrity, but performance is reduced.sync_interval_mssets the flush interval in ms. Balance between data integrity and performance.sync_executor_namespecifies the executor for periodic flushing. The executor must support timer scheduling.The
suffix_with_timestampconfiguration controls whether to append a timestamp to the log file name, which represents the log file rotation time.
Here is a simple example:
aimrt:
executor:
executors:
- name: test_log_executor
type: tbb_thread
options:
thread_num: 1
log:
core_lvl: INFO
default_module_lvl: INFO
backends:
- type: rotate_file
options:
path: ./log
filename: example.log
max_file_size_m: 4
max_file_num: 10
module_filter: "(.*)"
log_executor_name: test_log_executor.log