stashlog 0.0.13

A minimalistic Rust library for Logstash Event format logging.
Documentation
# Rust StashLog

A minimalistic Rust library for [Logstash Event](https://github.com/elastic/logstash/blob/main/logstash-core/src/main/java/org/logstash/Event.java) format logging.


[![Release](https://github.com/MedUnes/stashlog/actions/workflows/publish.yml/badge.svg)](https://github.com/MedUnes/stashlog/actions/workflows/publish.yml) [![Build](https://github.com/MedUnes/stashlog/actions/workflows/test.yml/badge.svg)](https://github.com/MedUnes/stashlog/actions/workflows/test.yml)

### Usage

```rust
use medunes::stashlog;
fn main() {
        let logger = stashlog::Logger {
            config: Config {
                version: 1,
                app_name: "my-app".to_string(),
                file_path: "/home/my-app/logs/logstash.log".to_string(),
            },
        };
        logger.info("User Logged in");
        logger.info_extra("User Logged in", &json!({"user_id": user_id}).to_string());
        logger.error_extra("Maximum login attemps reached", &json!({"user_id": user_id}).to_string());
```

### An example of production case scenario

#### 1- Generate with `StashLog`

Your rust application uses the `stashlog` package to output logs to a preconfigured file path: for example here ```/opt/example-app/log-path/logstash.log```

#### 2- Push with ```Filebeat```

* We suppose the app on the server writes logs to ```/opt/example-app/log-path/logstash.log```
* Here is an example [filebeat]https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html configuration which keeps pusing the log changes to a [Logstash]https://www.elastic.co/logstash server supposedly at ```some-server.logstash.com:5044```

```yaml
#/etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /opt/example-app/log-path/logstash.log
  fields:
    log_type: logstash

output.logstash:
  hosts: ["some-server.logstash.com:5044"]
  transport: udp
```

#### 3- Collect & View with ```ELK```

* [Logstash]https://www.elastic.co/logstash, if correctly configured, will index the incoming traffic to  [Elasticsearch]https://www.elastic.co/elasticsearch
* You can then use [Kibana]https://www.elastic.co/kibana to search, filter and visualize your application's logs.

![ELK Logging Stack](elk.webp)

### Credits

* Inspired from [Monolog]https://github.com/Seldaek/monolog/blob/main/src/Monolog/Formatter/LogstashFormatter.php