﷽
Overview
Residue is an effort to standardize application logging by implementing simple logging API, making it easily configurable, build-in configurable log rotators, simple way to format your log messages according to need of your application and most of all language-independent.
Details
Logging is an essential part of any application. But not all the applications can store these logs on the same device where they're running. For this reason, the logs must be transferred to a remote system.
Currently, there are two ways to do this:
- Collect log messages locally and have a scheduled task to synchronize all the log files to a remote system.
- Using real-time message forwarding protocols.
First one has many drawbacks especially when you need to debug a remote application in real-time. Also, transferring files in bulk can be heavy on network and possibly slow.
Second one is what residue client does. It delievers log messages in real-time to the (residue) server.
Residue is fully configurable and supports high-level security, compression and asyncronous operations. It uses Easylogging++ under the hood, that itself is a feature-rich library.
You can choose to integrate similar solutions like rsyslog
however residue has a lot of other built-in features that other solutions may lack, like built-in log rotation, bulk message forwarding etc. See Features section for details.
Features
Some of the notable features are listed below
- Lightweight: Residue is very light on CPU and RAM. On start-up it will only take approx 2mb of RAM and while running it will keep the memory as clean as possible using as low CPU as possible.
- Asyncronous: Residue has been built with speed in mind right from the beginning. It implements various techniques to speed up the process.
- Log rotation has been built in to the server that runs as scheduled task, allowing you to create backups and compress them without effecting the logging process. Every logger can be set up to have it's own rotation frequency from
hourly
to yearly
depending on your needs.
- Bulk requests is another concept that makes logging requests process much faster and make them highly compressible to reduce traffic on the network.
- Encryption: All the incoming and outgoing data is automatically encrypted. Residue also has several layers and techniques to secure the requests and to prevent unauthorised application from logging without compromising the speed.
- Compression: Residue server and official client libraries provide ability to compress the network packets which makes a big difference in amount of data transferred over the wire.
- Speed is not compromised in any way and there is a lot of testing being done every day to ensure that logging server meets the speed requirements.
- Dynamic buffers allow logs to be queued up in the memory while there is some I/O error (e.g, disk full) and cleared as soon as disk errors are fixed
- Residue extensions allow certain code to be executed in case of specific events (e.g, log dispatch failure) - see Extensions API
- Reliability: We are actively working on making the server much more reliable from restarting from the crash to handling bad traffic.
- Residue comes with various tools for devops and client libraries for easy integration.
- There are many more features available. Please feel free to download your copy of residue binary and give it a try.
Getting Started
Please see INSTALL.md to get started now.
Compatibility And Integration
No matter what language is your application written in, residue is compatible and can be used as central logging server. All you need is client library. You can either write your own using CLIENT_DEVELOPMENT.md guidelines or use one of the existing ones.
We're also actively working on client libraries for residue in other languages. Please feel free to contribute.
Build Matrix
Branch |
Platform |
Build Status |
develop |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / clang++ |
|
develop |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / g++-4.9 |
|
develop |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / g++-5 |
|
develop |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / g++-6 |
|
develop |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / g++-7 |
|
master |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / clang++ |
|
master |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / g++-4.9 |
|
master |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / g++-5 |
|
master |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / g++-6 |
|
master |
GNU/Linux 4.4 / Ubuntu 4.8.4 64-bit / g++-7 |
|
License
Please see LICENSE for licensing information.