PHPackages                             viu/viu-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. viu/viu-laravel

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

viu/viu-laravel
===============

Laravel SDK for Viu logging platform — Monolog Handler, Facade, HTTP/Kafka transport

0.2.0(3mo ago)011MITPHPPHP ^8.1

Since Mar 13Pushed 3mo agoCompare

[ Source](https://github.com/amarjr-dev/viu-laravel)[ Packagist](https://packagist.org/packages/viu/viu-laravel)[ RSS](/packages/viu-viu-laravel/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (7)Versions (3)Used By (0)

viu-laravel
===========

[](#viu-laravel)

[![Packagist Version](https://camo.githubusercontent.com/710eefa853a7a5c2f57aa300e43e6f8e6b220a048e5b4acbe226162100fdfbf3/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7669752f7669752d6c61726176656c2e737667)](https://packagist.org/packages/viu/viu-laravel)[![PHP Version](https://camo.githubusercontent.com/015993f189f0a4686c09ba3b7521160805f7cc81c26faafd32a39482ed0431d1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f7669752f7669752d6c61726176656c2e737667)](https://packagist.org/packages/viu/viu-laravel)[![License](https://camo.githubusercontent.com/779fc8f48aeff634319bc608904df2e0df567b177c127c2b61f654c77f11adef/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f7669752d7465616d2f766975)](https://github.com/viu-team/viu/blob/main/LICENSE)

[![PHP](https://camo.githubusercontent.com/0b828fae3809f5692b3303526d43b126732078cc61f176b8f877332096c98bc0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532422d3737374242343f7374796c653d666f722d7468652d6261646765266c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/0b828fae3809f5692b3303526d43b126732078cc61f176b8f877332096c98bc0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532422d3737374242343f7374796c653d666f722d7468652d6261646765266c6f676f3d706870266c6f676f436f6c6f723d7768697465)[![Laravel](https://camo.githubusercontent.com/8cd0ef64c2f84a17efc24bd77f59e4381f2c94d50dc64058525f58c2beafdbaf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3130253246313125324631322d4646324432303f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/8cd0ef64c2f84a17efc24bd77f59e4381f2c94d50dc64058525f58c2beafdbaf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3130253246313125324631322d4646324432303f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)[![Monolog](https://camo.githubusercontent.com/72ff489d19c56682bf9ca571833336b709bc808d562746c20ccc76e41c99a719/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f6e6f6c6f672d332e782d3030413938463f7374796c653d666f722d7468652d6261646765266c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/72ff489d19c56682bf9ca571833336b709bc808d562746c20ccc76e41c99a719/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f6e6f6c6f672d332e782d3030413938463f7374796c653d666f722d7468652d6261646765266c6f676f3d706870266c6f676f436f6c6f723d7768697465)

**Laravel SDK para o sistema Viu de centralização de logs**

✨ Quer ver logs? → Joga no Viu. Viu?
------------------------------------

[](#-quer-ver-logs--joga-no-viu-viu)

`viu-laravel` integra o sistema de logging nativo do Laravel com a plataforma Viu, oferecendo:

- **Monolog Handler** — integração nativa via `config/logging.php`
- **Facade** — acesso direto via `Viu::info()`, `Viu::error()`, etc.
- **Middleware** — propagação automática de Correlation ID
- **HTTP Transport** (recomendado) — via Guzzle com retry + circuit breaker
- **Kafka Transport** (alternativo) — envio direto ao tópico Kafka

### 🚀 Features

[](#-features)

- ✅ **Monolog Handler** — plug-and-play com `Log::channel('viu')`
- ✅ **Auto-discovery** — zero configuração manual de providers
- ✅ **Circuit Breaker** — previne connection storms
- ✅ **Retry automático** — backoff exponencial em 429/5xx
- ✅ **Smart Batching** — envia em lote, flush automático no shutdown
- ✅ **Correlation IDs** — rastreamento de requisições ponta-a-ponta
- ✅ **PHP 8.1+ / Laravel 10/11/12**
- ✅ **Kafka support** — via `longlang/phpkafka` (pure PHP, sem extensão C)

---

📦 Instalação
------------

[](#-instalação)

```
composer require viu/viu-laravel
```

> O service provider é registrado automaticamente via auto-discovery do Laravel.

**Opcional — Transport Kafka:**

```
composer require longlang/phpkafka
```

---

⚙️ Configuração
---------------

[](#️-configuração)

### 1. Publicar o arquivo de configuração

[](#1-publicar-o-arquivo-de-configuração)

```
php artisan vendor:publish --tag=viu-config
```

Isso cria `config/viu.php` no seu projeto.

### 2. Variáveis de ambiente (`.env`)

[](#2-variáveis-de-ambiente-env)

```
VIU_SERVICE_NAME=my-laravel-app
VIU_ENVIRONMENT=production
VIU_API_URL=https://api.viu.com
VIU_API_KEY=viu_live_xxxxxxxxxxxxxxxxxxxxxxxx

# Opcional
VIU_LOG_LEVEL=debug
VIU_BATCH_SIZE=100
VIU_HTTP_TIMEOUT=5
VIU_HTTP_MAX_RETRIES=3
```

---

🎯 Formas de uso
---------------

[](#-formas-de-uso)

### 1. Canal Monolog (recomendado)

[](#1-canal-monolog-recomendado)

Adicione o canal `viu` em `config/logging.php`:

```
'channels' => [
    // Canal dedicado
    'viu' => [
        'driver' => 'viu',
    ],

    // Stack combinando logs locais + Viu
    'stack' => [
        'driver'   => 'stack',
        'channels' => ['daily', 'viu'],
    ],
],
```

Uso em código:

```
use Illuminate\Support\Facades\Log;

Log::channel('viu')->info('User logged in', ['user_id' => 123]);
Log::channel('viu')->error('Payment failed', ['amount' => 99.90]);

// Ou via stack (envia para 'daily' e 'viu' simultaneamente)
Log::stack(['daily', 'viu'])->warning('Rate limit approaching');
```

Sobrescrever o nível mínimo por canal:

```
'viu' => [
    'driver' => 'viu',
    'level'  => 'warning', // ignora debug e info neste canal
],
```

---

### 2. Facade Viu

[](#2-facade-viu)

```
use Viu\ViuLaravel\Facades\Viu;

Viu::info('User logged in', ['user_id' => 123]);
Viu::warning('Rate limit approaching', ['remaining' => 10]);
Viu::error('Payment failed', ['amount' => 99.90, 'currency' => 'BRL']);
Viu::critical('Database unreachable', ['host' => 'db.prod']);

// Com exception
try {
    processPayment($order);
} catch (\Throwable $e) {
    Viu::error('Payment processing failed', [
        'exception' => $e,
        'order_id'  => $order->id,
        'amount'    => $order->total,
    ]);
}
```

---

### 3. Injeção de dependência

[](#3-injeção-de-dependência)

```
use Viu\ViuLaravel\ViuLogger;

class OrderService
{
    public function __construct(
        private readonly ViuLogger $logger,
    ) {}

    public function processOrder(Order $order): void
    {
        $this->logger->info('Processing order', ['order_id' => $order->id]);

        try {
            // ...
        } catch (\Throwable $e) {
            $this->logger->error('Order failed', [
                'exception' => $e,
                'order_id'  => $order->id,
            ]);
        }
    }
}
```

---

🔗 Middleware — Correlation ID
-----------------------------

[](#-middleware--correlation-id)

O `ViuCorrelationMiddleware` propaga automaticamente o `Correlation ID` e `Trace ID` entre requisições, garantindo rastreabilidade ponta-a-ponta nos logs.

### Laravel 10 — `app/Http/Kernel.php`

[](#laravel-10--apphttpkernelphp)

```
protected $middlewareGroups = [
    'api' => [
        \Viu\ViuLaravel\Middleware\ViuCorrelationMiddleware::class,
        // ...
    ],
    'web' => [
        \Viu\ViuLaravel\Middleware\ViuCorrelationMiddleware::class,
        // ...
    ],
];
```

### Laravel 11/12 — `bootstrap/app.php`

[](#laravel-1112--bootstrapappphp)

```
use Viu\ViuLaravel\Middleware\ViuCorrelationMiddleware;

->withMiddleware(function (Middleware $middleware) {
    $middleware->appendToGroup('api', ViuCorrelationMiddleware::class);
    $middleware->appendToGroup('web', ViuCorrelationMiddleware::class);
})
```

### Comportamento

[](#comportamento)

CenárioComportamentoHeader `X-Correlation-ID` presenteUsa o valor recebidoHeader ausenteGera um novo UUID v4Header `X-Trace-ID` presenteUsa como Trace ID`X-Trace-ID` ausenteUsa o Correlation ID como Trace IDHeaders adicionados na response:

- `X-Correlation-ID`
- `X-Trace-ID`

---

🚀 Modo Kafka (alternativo)
--------------------------

[](#-modo-kafka-alternativo)

Para ambientes de alta performance onde o envio direto ao Kafka é desejado:

```
composer require longlang/phpkafka
```

```
VIU_TRANSPORT_MODE=kafka
VIU_KAFKA_BROKERS=kafka.example.com:9092
VIU_KAFKA_TOPIC=logs.my-tenant
VIU_KAFKA_USERNAME=tenant_user
VIU_KAFKA_PASSWORD=secure-password
VIU_KAFKA_SASL_MECHANISM=SCRAM-SHA-256
VIU_KAFKA_SECURITY_PROTOCOL=SASL_SSL
```

> O modo HTTP é recomendado para a maioria dos casos por sua simplicidade e segurança (não expõe Kafka diretamente).

---

📋 Configuração completa
-----------------------

[](#-configuração-completa)

```
// config/viu.php
return [
    'service_name'          => env('VIU_SERVICE_NAME', env('APP_NAME', 'laravel-app')),
    'environment'           => env('VIU_ENVIRONMENT', env('APP_ENV', 'production')),
    'transport_mode'        => env('VIU_TRANSPORT_MODE', 'http'), // 'http' | 'kafka'

    'http' => [
        'api_url'     => env('VIU_API_URL', ''),
        'api_key'     => env('VIU_API_KEY', ''),
        'timeout'     => (int) env('VIU_HTTP_TIMEOUT', 5),
        'max_retries' => (int) env('VIU_HTTP_MAX_RETRIES', 3),
    ],

    'kafka' => [
        'brokers'           => env('VIU_KAFKA_BROKERS', 'localhost:9092'),
        'topic'             => env('VIU_KAFKA_TOPIC', 'logs.app.raw'),
        'username'          => env('VIU_KAFKA_USERNAME', ''),
        'password'          => env('VIU_KAFKA_PASSWORD', ''),
        'sasl_mechanism'    => env('VIU_KAFKA_SASL_MECHANISM', 'SCRAM-SHA-256'),
        'security_protocol' => env('VIU_KAFKA_SECURITY_PROTOCOL', 'SASL_SSL'),
    ],

    'batch_size'           => (int) env('VIU_BATCH_SIZE', 100),
    'level'                => env('VIU_LOG_LEVEL', 'debug'),
    'correlation_id_header' => env('VIU_CORRELATION_ID_HEADER', 'X-Correlation-ID'),
];
```

---

🧩 Payload enviado ao backend
----------------------------

[](#-payload-enviado-ao-backend)

```
{
    "timestamp": "2026-03-13T15:04:05.000+00:00",
    "level": "ERROR",
    "message": "Payment failed",
    "service": "my-laravel-app",
    "environment": "production",
    "source": "payments",
    "correlation_id": "550e8400-e29b-41d4-a716-446655440000",
    "trace_id": "550e8400-e29b-41d4-a716-446655440000",
    "span_id": "a1b2c3d4e5f6g7h8",
    "module": "payments",
    "file": "",
    "line": 0,
    "context": {
        "amount": 99.90,
        "currency": "BRL",
        "exception": {
            "type": "RuntimeException",
            "message": "Insufficient funds",
            "code": 0,
            "file": "/app/Services/PaymentService.php",
            "line": 42,
            "stacktrace": "..."
        }
    }
}
```

---

🧪 Flush manual (queue workers / jobs)
-------------------------------------

[](#-flush-manual-queue-workers--jobs)

Em processos de longa duração (queue workers, Octane, etc.), chame `flush()` após cada job para garantir o envio dos logs pendentes:

```
// Em um Job
public function handle(ViuLogger $logger): void
{
    $logger->info('Job started', ['job' => static::class]);
    // ...
    $logger->info('Job completed');
    $logger->flush(); // envia imediatamente
}
```

Via Facade:

```
Viu::info('Job done');
Viu::flush();
```

---

🧪 Testes
--------

[](#-testes)

```
composer install
./vendor/bin/phpunit
```

---

📄 Licença
---------

[](#-licença)

MIT — veja [LICENSE](LICENSE).

###  Health Score

33

—

LowBetter than 72% of packages

Maintenance80

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

105d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/1b92edc92d3c0bba49fb0082d163c1a11ce7ccd97d61aead3ac235f1cc1a4f89?d=identicon)[amarjr](/maintainers/amarjr)

---

Top Contributors

[![amarjr-dev](https://avatars.githubusercontent.com/u/255945425?v=4)](https://github.com/amarjr-dev "amarjr-dev (2 commits)")

---

Tags

laravelloggingmonologobservabilitykafkalokiviu

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/viu-viu-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/viu-viu-laravel/health.svg)](https://phpackages.com/packages/viu-viu-laravel)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M2.9k](/packages/craftcms-cms)[naoray/laravel-github-monolog

Log driver to store logs as github issues

10822.5k](/packages/naoray-laravel-github-monolog)[shaffe/laravel-mail-log-channel

A package to support logging via email in Laravel

1392.4k](/packages/shaffe-laravel-mail-log-channel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
