# AppLogger

The RoadRunner server has a useful `app-logger` plugin that allows users to send logs from their applications to the RoadRunner server using an RPC interface. This plugin is enabled by default and does not require any additional configurations. It can be used to observe all application and server logs in one place. This is especially useful when debugging and monitoring applications.

{% hint style="info" %}
It will send raw messages to the RoadRunner `STDERR`
{% endhint %}

## Configuration

The `logs` section in the RoadRunner configuration file allows you to configure logging behavior for their application.

{% code title=".rr.yaml" %}

```yaml
rpc:
  listen: tcp://127.0.0.1:6001

logs:
  channels:
    app:
      level: info
```

{% endcode %}

{% hint style="warning" %}
To interact with the RoadRunner app-logger plugin, you will need to have the RPC defined in the rpc configuration section. You can refer to the documentation page [here](https://docs.roadrunner.dev/docs/php-worker/rpc) to learn more about the configuration.
{% endhint %}

The `level` key is used to specify the logging level for this channel. This means that only log messages with a severity level of info or higher will be sent to this channel.

{% hint style="info" %}
Read more about logging in the [Logging — Logger](https://docs.roadrunner.dev/docs/logging-and-observability/logger) section.
{% endhint %}

## PHP client

The RoadRunner `app-logger` plugin comes with a convenient PHP package that simplifies the process of integrating the plugin with your PHP application.

### Installation

To get started, you can install the package via Composer using the following command:

```bash
composer require roadrunner-php/app-logger
```

### Usage

After the installation, you can create an instance of the `RoadRunner\Logger\Logger` class, which will allow you to use the available class methods.

**Here is an example:**

{% code title="logger.php" %}

```php
use Spiral\Goridge\RPC\RPC;
use RoadRunner\Logger\Logger;

$rpc = RPC::create('tcp://127.0.0.1:6001');

$logger = new Logger($rpc);

$logger->info('Hello, RoadRunner!');
$logger->warning('Something might be wrong...');
$logger->error('Houston, we have a problem!');
```

{% endcode %}

{% hint style="info" %}
You can refer to the documentation page [here](https://docs.roadrunner.dev/docs/php-worker/rpc) to learn more about creating the RPC connection.
{% endhint %}

### Available methods

* `debug(string): void`: Sends a debug log message to the server
* `error(string): void`: Sends an error log message to the server
* `info(string): void`: Sends an info log message to the server
* `warning(string): void`: Sends a warning log message to the server
* `log(string): void`: Sends a log message directly to the `STDERR` of the server

## API

### RPC API

RoadRunner provides an RPC API, which allows you to manage app-logger in your applications using remote procedure calls. The RPC API provides a set of methods that map to the available methods of the `RoadRunner\Logger\Logger`class in PHP.

{% hint style="info" %}
All methods accept a `string` (which will be log message) as a first argument and a `bool` placeholder for the second arg.
{% endhint %}

#### Error

Method sends an `error` log message with the specified message to the RoadRunner server.

```go
func (r *RPC) Error(in string, _ *bool) error {}
```

#### Info

Method sends an `info` log message with the specified message to the RoadRunner server.

```go
func (r *RPC) Info(in string, _ *bool) error {}
```

#### Warning

Method sends a `warning` log message with the specified message to the RoadRunner server.

```go
func (r *RPC) Warning(in string, _ *bool) error {}
```

#### Debug

Method sends a `debug` log message with the specified message to the RoadRunner server.

```go
func (r *RPC) Debug(in string, _ *bool) error {}
```

#### Log

Method sends a log message with the specified message directly to the `STDERR` of the RoadRunner server.

```go
func (r *RPC) Log(in string, _ *bool) error {}
```
