3ee0c9c098e73c7ae91ba6e4123c5776eaa08f62
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 filenamex-amz-meta-size: File sizex-amz-meta-sha256: SHA256 hash (optional)x-amz-meta-create-time: Creation timestampx-amz-meta-complete: Upload completion statusx-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
Languages
Go
96%
Shell
2.9%
Dockerfile
1.1%