# Operação de logs 24x7

## Política operacional oficial

A política final do bundle fica dividida por responsabilidade, sem limpeza manual e sem crescimento indefinido:

1. **Logs de aplicação do portal, platform e gateway**
   - rotação por **política própria controlada** em `scripts/rotate-logs.sh`;
   - execução diária via `nvr-log-rotate.timer` e fallback por `deploy/scheduler/nvr-log-rotate.cron`;
   - rotação também pode ocorrer antes do dia virar quando o arquivo ultrapassa o limite configurado;
   - compressão habilitada quando `gzip` estiver disponível;
   - retenção padrão: **14 dias**;
   - tamanho máximo por arquivo atual antes de rotação por tamanho: **50 MiB**.

2. **stdout/stderr dos serviços sob supervisor**
   - limitação no próprio supervisor com `stdout_logfile_maxbytes`, `stderr_logfile_maxbytes`, `stdout_logfile_backups` e `stderr_logfile_backups`;
   - política padrão: **20 MiB por arquivo** com **10 backups**.

3. **stdout/stderr dos serviços sob systemd**
   - encaminhamento para **journald**;
   - retenção/capacidade controladas por `deploy/systemd/journald-nvr-stack.conf`;
   - política padrão: `SystemMaxUse=1G`, `RuntimeMaxUse=256M`, `MaxRetentionSec=14day`, `MaxFileSec=1day`, `Compress=yes`.

## Escopo coberto

### Portal
- `portal/storage/logs/app.log`
- `portal/storage/logs/mail.log`

### Platform
- `platform/storage/logs/app.log`
- `platform/storage/logs/failed-jobs.log`
- `platform/storage/logs/scheduler.log`
- logs auxiliares de supervisor em `platform/storage/logs/*.log` quando o deploy direto do `platform` for usado

### Gateway
- `gateway/storage/logs/gateway.log`
- `gateway/storage/logs/recording-*.log`

### Root do bundle
- logs auxiliares em `storage/logs/*.log` que **não** sejam `*.out.log` ou `*.err.log`
- `storage/logs/*.out.log` e `storage/logs/*.err.log` ficam sob responsabilidade do **supervisor**, com limites próprios

## Instalação

```bash
bash scripts/install-services.sh
sudo systemctl daemon-reload
sudo systemctl restart systemd-journald
sudo systemctl enable --now nvr-log-rotate.timer
```

## Ajustes de retenção

O script de rotação aceita ajustes explícitos:

```bash
bash scripts/rotate-logs.sh --root /var/www/portal-principal/public/nvr --retention-days 21 --max-size-mb 100 --compress true
```

Também é possível usar variáveis de ambiente:

- `LOG_ROTATION_RETENTION_DAYS`
- `LOG_ROTATION_MAX_SIZE_MB`
- `LOG_ROTATION_COMPRESS`

## Verificação operacional

A checagem oficial desta política é:

```bash
php scripts/check-log-rotation-policy.php
```

Ela valida:
- presença dos artefatos de deploy;
- limites de stdout/stderr do supervisor;
- presença da política do journald;
- capacidade real do script de rotacionar, comprimir e podar logs em ambiente temporário.
