--- name: tail_journal kind: function lang: bash domain: infra version: "1.0.0" purity: impure signature: "tail_journal(unit: string, lines: int=100, follow: bool=false, since: string=\"\", priority: string=\"info\") -> void" description: "Wrapper sobre journalctl con formato consistente. Tail logs de una unidad systemd con coloreado, filtro por prioridad y seguimiento opcional." tags: [journal, systemd, logs, pendiente-usar] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] params: - name: unit desc: "Nombre de la unidad systemd (ej. registry-api.service, caddy). Acepta sin extension .service." - name: lines desc: "Numero de lineas iniciales a mostrar. Default 100." - name: follow desc: "Si true o -f, activa seguimiento continuo (journalctl -f). Default false." - name: since desc: "Filtro temporal: '1 hour ago', 'yesterday', '2026-05-07'. Default vacio (sin filtro)." - name: priority desc: "Prioridad minima de logs: emerg|alert|crit|err|warning|notice|info|debug. Default info." output: "Lineas de journalctl en formato short-iso, una por linea. Si follow=true, flujo continuo." example: "tail_journal registry-api 200 true" tested: false tests: [] test_file_path: "" file_path: "bash/functions/infra/tail_journal.sh" --- ## Ejemplo ```bash # Ver ultimas 100 lineas de un servicio tail_journal caddy # Seguimiento continuo con 50 lineas iniciales tail_journal registry-api.service 50 true # Solo errores de la ultima hora tail_journal my-app 200 false "1 hour ago" err # Con pipe (funciona sin bufferizado) tail_journal registry-api 100 true "" warning | grep "ERROR" ``` ## Notas Detecta automaticamente si la unit pertenece al usuario (systemctl --user) o al sistema (sudo journalctl). Si la unit no es de usuario, se llama con sudo — el usuario debe tener NOPASSWD para journalctl o sudo configurado. Si follow=true, usa `stdbuf -oL` para deshabilitar el bufferizado de stdout, lo que permite piping en tiempo real (ej. `tail_journal ... | grep pattern`). Exit codes: 1 unit no existe o no especificada, 2 prioridad invalida, 5 journalctl no disponible. ``` ---