2026-01-28 10:28:13 +08:00
2026-01-28 10:28:13 +08:00
2026-01-28 10:28:13 +08:00
2026-01-28 10:28:13 +08:00
2026-01-28 10:28:13 +08:00
2026-01-28 10:28:13 +08:00

upkg

Go utility packages collection.

file_manager

File management abstraction layer supporting multiple storage backends.

Features

  • Local Storage: Store files on local filesystem with manifest-based metadata
  • S3 Compatible Storage: Support AWS S3, MinIO, and other S3-compatible services
  • SHA256 Verification: Optional file integrity verification
  • Automatic Cleanup: Configurable timeout for incomplete uploads and expiration for completed files
  • Persistent State: State managed via manifest files (local) or object metadata (S3)

Usage

import "gitea.loveuer.com/loveuer/upkg/controller/file_manager"

Local Storage

fm := file_manager.New(
    file_manager.WithDir("/path/to/uploads"),
    file_manager.WithTimeout(5*time.Minute),
    file_manager.WithExpire(24*time.Hour),
)
defer fm.CloseManager()

S3 Storage

fm := file_manager.New(
    file_manager.WithS3(
        "http://minio:9000",
        "access-key",
        "secret-key",
        "bucket-name",
        "us-east-1",
    ),
    file_manager.WithS3PathStyle(true),
    file_manager.WithTimeout(10*time.Minute),
    file_manager.WithExpire(48*time.Hour),
)
defer fm.CloseManager()

API

// Create creates a file record, returns code for upload
result, err := fm.Create(ctx, "filename.txt", 1024, "")

// Upload uploads file content
total, written, err := fm.Upload(ctx, code, 0, 1024, reader)

// Get retrieves file content
data, err := fm.Get(ctx, code)

// GetInfo returns file metadata
info, err := fm.GetInfo(ctx, code)

// Delete removes file
err := fm.Delete(ctx, code)

// Close closes file handle
err := fm.Close(code)

// CloseManager shuts down the manager
fm.CloseManager()

Manifest Format (Local)

{
  "filename": "file.txt",
  "size": 1024,
  "sha256": "abc123...",
  "path": "/uploads/abc123",
  "create_time": "2024-01-01T00:00:00Z",
  "complete": true
}

S3 Object Metadata

  • x-amz-meta-filename: Original filename
  • x-amz-meta-size: File size
  • x-amz-meta-sha256: SHA256 hash (optional)
  • x-amz-meta-create-time: Creation timestamp
  • x-amz-meta-complete: Upload completion status
  • x-amz-meta-code: Unique file code

logger

A lightweight, structured logging package for Go.

Features

  • Simple API: Format strings and structured fields
  • Global & Instance: Use default global logger or create custom instances
  • Context Support: Extract trace_id from context automatically
  • Multiple Formats: Text (default) and JSON
  • Level Filtering: DEBUG, INFO, WARN, ERROR, FATAL, PANIC
  • No Dependencies: Standard library only
  • High Performance: ~727 ns/op for text format, zero-allocation when filtered

Quick Start

import "gitea.loveuer.com/loveuer/upkg/logger"

// Global logger (default)
logger.Info("hello %s", "world")
logger.Error("failed: %v", err)

// With fields
logger.InfoField("user logged in",
    "user_id", 123,
    "action", "login",
)

// Context with trace_id
ctx := context.WithValue(ctx, "trace_id", "req-123")
logger.InfoCtx(ctx, "request processed")

Custom Logger

log := logger.New(
    logger.WithLevel(logger.DEBUG),
    logger.WithFormat(logger.JSON),
    logger.WithOutput(logger.Stdout),
    logger.WithCaller(true),
)

log.Info("custom logger")
log.InfoField("event", "key", "value")

API

Level Methods

log.Debug(format string, args ...)
log.Info(format string, args ...)
log.Warn(format string, args ...)
log.Error(format string, args ...)
log.Fatal(format string, args ...)
log.Panic(format string, args ...)

Context Methods

log.InfoCtx(ctx, format string, args ...)
// Automatically adds trace_id from ctx as a field

Field Methods

log.InfoField(message string, keyValues ...interface{})
// Example: log.InfoField("user created", "id", 123, "name", "john")

Configuration Options

logger.New(
    WithLevel(INFO),              // Minimum log level
    WithFormat(TEXT),             // TEXT or JSON
    WithOutput(Stdout),           // Stdout, Stderr, or use WithOutputFile
    WithOutputFile("/path/to.log"), // Write to file
    WithCaller(true),             // Include file:line in output
    WithFieldKey("trace_id"),     // Context field key name
    WithPrefix("myapp"),          // Text format prefix
    WithTimeFormat("2006-01-02"), // Custom time format
)

Performance

Benchmark ns/op B/op allocs
Info (Text) 727 319 6
Info (JSON) 1932 1026 18
Info (Filtered) 2 0 0
InfoField 1889 1014 14
InfoWithCaller 1772 856 11

Text Format Output

2026-01-17 15:30:45 INFO hello world
2026-01-17 15:30:45 INFO user logged in user_id=123 action=login

JSON Format Output

{"time":"2026-01-17T15:30:45Z","level":"INFO","message":"hello world"}
{"time":"2026-01-17T15:30:45Z","level":"INFO","message":"user logged in","user_id":123,"action":"login"}

Packages

Package Description
controller/file_manager File storage abstraction (local/S3)
logger Structured logging package

License

MIT

Description
No description provided
Readme 86 KiB
Languages
Go 96%
Shell 2.9%
Dockerfile 1.1%