# mikhaildadaev/ulog architecture

> Architecture diagram of the GitHub repository mikhaildadaev/ulog, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mikhaildadaev/ulog
- Repository: https://github.com/mikhaildadaev/ulog

## Overview

ULOG is a Go telemetry library for emitting structured logs, metrics, and traces through configurable writers and sinks. Callers create typed fields and a Telemetry instance, optionally extract context values, and submit events; the core applies formatting and sync/async delivery before dispatching to a writer. File sinks rotate and compress local logs, while HTTP sinks batch and deliver protocol-specific payloads with retry, sampling, deduplication, and circuit-breaker controls. The README also documents eight service integrations. Those destinations are represented as one documented integration branch because their runtime wiring is not fully sampled.

Main entry points: [`core.go`](https://github.com/mikhaildadaev/ulog/blob/main/core.go) (Telemetry API), [`ulog.go`](https://github.com/mikhaildadaev/ulog/blob/main/ulog.go) (Format output), [`sink_http.go`](https://github.com/mikhaildadaev/ulog/blob/main/sink_http.go) (HTTP sink), [`sink_factory.go`](https://github.com/mikhaildadaev/ulog/blob/main/sink_factory.go) (Integration factories)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Telemetry core"]
  node_api["Telemetry API<br/>[core.go]"]
  node_fields["Typed fields<br/>[core.go]"]
  node_context["Context extraction<br/>[core.go]"]
  node_formatter["Format output<br/>[ulog.go]"]
  node_async["Async writer<br/>[ulog.go]"]
end

subgraph group_delivery["Sink delivery"]
  node_tee["Tee sink<br/>[sink.go]"]
  node_file["File sink<br/>[sink_file.go]"]
end

subgraph group_http["HTTP integrations"]
  node_http_sink["HTTP sink<br/>[sink_http.go]"]
  node_factory["Integration factories<br/>[sink_factory.go]"]
  node_destinations(("Telemetry services"))
end

node_caller(("Application"))

node_caller -->|"configures and emits"| node_api
node_caller -->|"creates fields"| node_fields
node_api -->|"extracts values"| node_context
node_api -->|"formats events"| node_formatter
node_api -->|"queues writes"| node_async
node_formatter -->|"dispatches writes"| node_tee
node_formatter -->|"dispatches writes"| node_file
node_formatter -->|"dispatches writes"| node_http_sink
node_tee -.->|"writes to"| node_file
node_factory -->|"constructs"| node_http_sink
node_factory -->|"formats for"| node_destinations
node_http_sink -.->|"sends HTTP"| node_destinations

click node_api "https://github.com/mikhaildadaev/ulog/blob/main/core.go"
click node_fields "https://github.com/mikhaildadaev/ulog/blob/main/core.go"
click node_context "https://github.com/mikhaildadaev/ulog/blob/main/core.go"
click node_formatter "https://github.com/mikhaildadaev/ulog/blob/main/ulog.go"
click node_async "https://github.com/mikhaildadaev/ulog/blob/main/ulog.go"
click node_tee "https://github.com/mikhaildadaev/ulog/blob/main/sink.go"
click node_file "https://github.com/mikhaildadaev/ulog/blob/main/sink_file.go"
click node_http_sink "https://github.com/mikhaildadaev/ulog/blob/main/sink_http.go"
click node_factory "https://github.com/mikhaildadaev/ulog/blob/main/sink_factory.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_fields,node_context,node_formatter,node_async toneBlue
class node_tee,node_file toneAmber
class node_http_sink,node_factory,node_destinations toneMint
class node_caller toneIndigo
```

## Components

### Telemetry core

- [Telemetry API](https://github.com/mikhaildadaev/ulog/blob/main/core.go): `core.go`
- [Typed fields](https://github.com/mikhaildadaev/ulog/blob/main/core.go): `core.go`
- [Context extraction](https://github.com/mikhaildadaev/ulog/blob/main/core.go): `core.go`
- [Format output](https://github.com/mikhaildadaev/ulog/blob/main/ulog.go): `ulog.go`
- [Async writer](https://github.com/mikhaildadaev/ulog/blob/main/ulog.go): `ulog.go`

### Sink delivery

- [Tee sink](https://github.com/mikhaildadaev/ulog/blob/main/sink.go): `sink.go`
- [File sink](https://github.com/mikhaildadaev/ulog/blob/main/sink_file.go): `sink_file.go`

### HTTP integrations

- [HTTP sink](https://github.com/mikhaildadaev/ulog/blob/main/sink_http.go): `sink_http.go`
- [Integration factories](https://github.com/mikhaildadaev/ulog/blob/main/sink_factory.go): `sink_factory.go`
- **Telemetry services**

### Other components

- **Application**

## Connections

- Application → Telemetry API: configures and emits (evidence: `README.md`)
- Application → Typed fields: creates fields (evidence: `core.go`)
- Telemetry API → Context extraction: extracts values (evidence: `core.go`)
- Telemetry API → Format output: formats events (evidence: `ulog.go`)
- Telemetry API → Async writer: queues writes (evidence: `core.go`)
- Format output → Tee sink: dispatches writes (evidence: `ulog.go`)
- Format output → File sink: dispatches writes (evidence: `ulog.go`)
- Format output → HTTP sink: dispatches writes (evidence: `ulog.go`)
- Tee sink → File sink: writes to
- Integration factories → HTTP sink: constructs (evidence: `sink_factory.go`)
- Integration factories → Telemetry services: formats for (evidence: `README.md`)
- HTTP sink → Telemetry services: sends HTTP
