ALox  V. 2402 R. 0
Home ALox for C++ ALox for C# ALox for Java Download
02 - Features and Limitations

Current Features

  • Available for C++ 11 (GNU/Linux, Windows OS, macOS), C# (.Net, Windows, Linux, Microsoft, Mono ) and Java (with Android support and extensions).
  • Free software, published under Boost Software License.
  • Jump-start tutorials for ALox for C++,ALox for C# and ALox for Java, Sample Projects and pre-configured project files for different IDEs and CMake.
  • Formatted, colorful, configurable log output with support for ANSI compatible consoles and Windows OS consoles.
  • Log lines **'clickable' in IDE** to jump to the corresponding source code line (depending on IDE).
  • Automatic collection of meta information like time stamp, time-difference to previous log, executing thread or executing source scope information (platform/language dependent).
  • Automatic removal, aka **'pruning'**, of debug-log statements from release code mostly without the need of pre-processor if/endif code cluttering. Optionally also automatic pruning of release-log statements. (In Java: implemented using Proguard, with provision of ready to use configuration files.
  • Minimal intrusiveness in respect to cluttering your code and what you need to make it really work.
  • Use of external configuration (INI-files, command line parameters, environment variables, etc.) which allows developer specific local settings and greatly supports working in teams.
  • Hierarchical 'Log-Domains', (like for example "MYAPP/UI", "MYAPP/DATABASE" that allow the classification of different Log Statements into user defined topics. Verbosity is controlled per domain to allow the programmer to concentrate on the area of current interest.
  • Defaulting 'Log-Domains' for source scopes, like file, class or method, which allows to omit the log-domain parameter from the Log Statements (again: leads to short, clean and readable Log Statements).
  • Defaulting 'Log-Domains' for thread scopes, which allows to control the verbosity of the log output on a per thread basis.
  • Support for CMake, Eclipse, Visual Studio, QT Creator, Mono Develop in combination with GNU/Linux, Windows, Windows Phone and Android. (Windows Phone in current versions not tested any more). Porting to other platforms should be easy.
  • Very fast to minimize runtime overhead of logging (We just broke our former record and did one million log lines in a second, including meta information. This was of-course the C++ version doing release logging on release executable).
  • Multiple parallel log streams with different Verbosity, e.g. for logging to the console and in parallel into a file.
  • Extensible with own loggers, which enables dedicated "data drains" (e.g. databases or Internet services) and custom output formatting. ALox provides a simple programming interface and internal architecture that is easy to learn, not overloaded by 'factories' and 'factory factories' ;-)
  • Logging of arbitrary objects which means the whole ALox architecture builds on logging 'objects' instead of just string messages. Only the logger instances which are attached at runtime, decide how logged data might be converted to human readable strings.
  • Scope dependent Log Data to add debug variables that automatically get pruned like the debug-logging statements are.
  • Conditional logging (similar to assertions).
  • Log Once to restrict a log message or a set of log messages to appear only once (or up to n-times).
  • Support for Recursive logging, which is the correct execution of log statements during the evaluation of parameters of another log statement.
  • Automatic (OK, half-automatic :-) mapping of thread IDs to readable thread names
  • LogTools (in C# and Java) for
    • Recursive logging of complex types with one line of code using class inspection/reflection. Variable recursion depth and detection of cyclic references.
    • Logging Exceptions (recursively with inner exceptions)
    • Logging XML trees
  • C++ version:
    • Compiled and tested on GNU/Linux, Windows OS and Apple macOS.
    • Accepts arbitrary objects to be logged. This goal is reached by using underlying library ALib Boxing which allows to pass 'anything' as a parameter to C++ functions and methods.
    • Accepts 3rd party string types. This goal is reached by using underlying library ALib Strings.
  • and finally: ALox is under continuous development. You're invited to contribute!

Future work... and today's limitations

  • Plug-ins for IDEs implementing dedicated ALox log output windows (planned is QT Creator).
  • File loggers (Well, there is one, but this is very basic still)
  • HTTP/SOAP/REST/Email loggers (send us your proposals for the right standards/backends to support first. Or better: Contribute us your source)
  • Thread tools for analysis and assertions
  • More on performance logging

Next chapter: 03 - Terminology and Key Concepts
Back to index