MatLogger2
Library for logging of numeric data to HDF5 MAT-files, which is RT-safe and multithreaded.
Building MatLogger2 from source
Standard cmake workflow: - git clone the repo to SOURCE_DIR - create a build folder BUILD_DIR - cd BUILD_DIR && cmake SOURCE_DIR - make - make install
Installing the binary release
- cd SOURCE_DIR/release (or
wget https://github.com/ADVRHumanoids/MatLogger2/raw/master/release/matlogger2-1.0.0-Linux.deb
) - sudo dpkg -i matlogger2-X.Y.Z-Linux.deb
The binary release has been tested only with Ubuntu 16.04
Linking against MatLogger2
find_package(matlogger2 REQUIRED)
target_link_libraries(mytarget matlogger2::matlogger2)
## Quick start ### Circular-buffer mode ```c++ #include
int main() { auto logger = XBot::MatLogger2::MakeLogger("/tmp/my_log"); // date-time automatically appended logger->set_buffer_mode(XBot::VariableBuffer::Mode::circular_buffer);
for(int i = 0; i < 1e5; i++)
{
Eigen::VectorXd vec(10);
Eigen::MatrixXd mat(6,8);
logger->add("my_vec_var", vec);
logger->add("my_scalar_var", M_PI);
logger->add("my_mat_var", mat);
}
} // destructor flushes to disk ```
### Producer-consumer mode (default) ```c++ #include
int main() { auto logger = XBot::MatLogger2::MakeLogger("/tmp/my_log.mat"); // extension provided -> date-time NOT appended auto appender = XBot::MatAppender::MakeInstance(); appender->add_logger(logger); appender->start_flush_thread();
for(int i = 0; i < 1e5; i++)
{
Eigen::VectorXd vec(10);
Eigen::MatrixXd mat(6,8);
logger->add("my_vec_var", vec);
logger->add("my_scalar_var", M_PI);
logger->add("my_mat_var", mat);
usleep(1000);
}
} ```
### Custom buffer size and compression ```c++ #include
int main() { XBot::MatLogger2::Options opt; opt.default_buffer_size = 1e4; // set default buffer size opt.enable_compression = true; // enable ZLIB compression // this can be computationally expensive auto logger = XBot::MatLogger2::MakeLogger("/tmp/my_log", opt);
logger->create("my_vec_var", 10); // this pre-allocates the buffer with default buffer size
logger->create("my_mat_var", 6, 8, 1e3); // custom buffer size can be set variable-wise
for(int i = 0; i < 1e5; i++)
{
Eigen::VectorXd vec(10);
Eigen::MatrixXd mat(6,8);
logger->add("my_vec_var", vec);
logger->add("my_scalar_var", M_PI);
logger->add("my_mat_var", mat);
usleep(1000);
}
logger.reset(); // manually destroy the logger in order to flush to disk
} ```
## Documentation Header files are documented with doxygen! An online version is also available.