actors-rs 0.1.4

Easily build fast, highly concurrent and resilient applications. An Actor Framework for Rust.
Documentation
# Logging

Riker provides logging out of the box which is built on top of the `Log` crate logging facade. The logger module starts during the actor system's start, making log macros such as `info!`, `debug!`, `error!` available immediately after `ActorSystem::new`:

```rust
#[macro_use]
extern crate log;

let sys = ActorSystem::new().unwrap();
info!("My first log message!");
```

The only requirement is importing the `Log` crate into your application.

## Base log level

The base log level is the level at which the `Log` crate's macros determine whether to ignore a message or forward it to the logger module. This is configured in `riker.toml`:

```toml
[log]
level = "debug"
```

## Default logger

Log messages will be routed to the logging module configured in the model.
The rest of this page refers primarily to the default Riker logger, the `riker-logger` crate.

Since the default logger is an actor log messages are handled concurrently, in a non-blocking manner. This means the impact of logging on an application's response time is reduced.

The default logger has the following features:

- Log entry format is configurable using named parameters
- Date and time formats can be configured
- Log entries can be further filtered at the module level
- An optional filter can be configured to omit logs from certain modules

Let's take a look at an example log configuration in `riker.toml`:

```toml
[log]
# max level to log
level = "debug"

# Uncomment this to enable filters on the logger.  The {module} field
# of every log line will be checked, and if the {module} field contains
# any item in this list, the entire log line will be omitted from the
# logging output.
#
# This example will omit any logging output from any module with
# "test" in the name and any module whose name contains "debug".
#
filter = [ "test", "debug" ]

# log format to use
# correlates to format!(log_format, date=, time=, level=, module=, body=);
# since named parameters are used the order of the fields is flexible
# the formatting of each field can be changed also
# e.g. to completely hide a field: {module:.0}
# See: https://doc.rust-lang.org/std/fmt/#syntax

# {date}    the calendar day
# {time}    the calendar time
# {level}   the level for the entry
# {module}  the module path originating the entry
# {body}    the message body
log_format = "{date} {time} {level} [{module}] {body}"
date_format = "%Y-%m-%d"
time_format = "%H:%M:%S%:z"
```

This configuration will produce log entries formatted like:

```
2018-06-11 08:31:58+00:00 DEBUG [riker::system::system] Actor system started
2018-06-11 08:31:58+00:00 DEBUG [main] My first log message!
```

and the log lines which would have otherwise been printed:

```
2018-06-11 08:31:58+00:00 DEBUG [testSystem] A test line which should be filtered out!
2018-06-11 08:31:58+00:00 DEBUG [debug] A debugger module's log message
```

will be omitted from the log output.