# logger v1

## Repository

{% embed url="<https://github.com/metadiv-io/logger/tree/v1>" %}

## Features

* Multiple log levels (INFO, ERROR, DEBUG)
* File-based logging with daily rotation
* Trace ID support for distributed systems
* Asynchronous file writing
* Graceful shutdown handling
* Environment variable configuration
* Log file management utilities

## Installation

```bash
go get github.com/your-repo/logger
```

## Usage

### Basic Logging

```go
import "github.com/your-repo/logger"
// Basic logging
logger.Info("Application started")
logger.Error("Something went wrong:", err)
logger.Debug("Debug information") // Only prints if LOG_DEBUG=true
```

### Traced Logging (for distributed systems)

```go
// Logging with trace IDs
traceID := "req-123"
logger.TracedInfo(traceID, "Request received")
logger.TracedError(traceID, "Request failed:", err)
logger.TracedDebug(traceID, "Processing request") // Only prints if LOG_DEBUG=true
```

### Log File Management

```go
// List all log files
files := logger.ListLogFiles()
// Read contents of a specific log file
content := logger.ReadLogFile("2024-03-20.log")
```

### Configuration

#### Environment Variables

* `LOG_DEBUG`: Set to `true` to enable debug logging (default: `false`)

#### Log Format

* Regular logs: `[LEVEL] YYYY-MM-DD HH:mm:ss message`
* Traced logs: `[LEVEL] YYYY-MM-DD HH:mm:ss (trace: trace-id) message`

#### Log File Location

Logs are stored in the `logs` directory, with files named by date (YYYY-MM-DD.log)

### Features Details

#### Log Levels

* `INFO`: General information messages
* `ERROR`: Error messages and exceptions
* `DEBUG`: Detailed debug information (only when LOG\_DEBUG=true)

#### File Management

* Logs are automatically rotated daily
* Files are created in the `logs` directory
* Each log entry is appended with a newline
* Buffered writing with periodic flush (every second)

#### Shutdown Handling

The package automatically handles:

* System interrupts (SIGTERM)
* Panic recovery
* Graceful log flushing before exit

### Implementation Notes

* Log messages are temporarily stored in memory and flushed to disk every second
* The package automatically creates the logs directory if it doesn't exist
* All file operations use appropriate permissions (0644)
* Thread-safe operations for concurrent logging

### Best Practices

1. Use traced logging when tracking requests across distributed systems
2. Enable debug logging only when needed
3. Regularly monitor and rotate old log files
4. Handle the returned errors when reading log files
