{"id":31052806,"url":"https://github.com/uptutu/libai","last_synced_at":"2025-09-15T01:24:36.689Z","repository":{"id":313309183,"uuid":"1050911135","full_name":"uptutu/libai","owner":"uptutu","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-05T06:23:06.000Z","size":109,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"v2","last_synced_at":"2025-09-05T08:27:52.364Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uptutu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-05T06:21:53.000Z","updated_at":"2025-09-05T06:22:38.000Z","dependencies_parsed_at":"2025-09-05T16:01:13.768Z","dependency_job_id":null,"html_url":"https://github.com/uptutu/libai","commit_stats":null,"previous_names":["uptutu/libai"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/uptutu/libai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptutu%2Flibai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptutu%2Flibai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptutu%2Flibai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptutu%2Flibai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uptutu","download_url":"https://codeload.github.com/uptutu/libai/tar.gz/refs/heads/v2","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptutu%2Flibai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275193575,"owners_count":25421409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-15T01:24:31.900Z","updated_at":"2025-09-15T01:24:36.672Z","avatar_url":"https://github.com/uptutu.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Libai - Enterprise Go Logging Library\n\n[![Go Version](https://img.shields.io/badge/Go-1.25+-blue.svg)](https://golang.org)\n[![Status](https://img.shields.io/badge/Status-Production%20Ready-brightgreen.svg)](https://github.com)\n[![License](https://img.shields.io/badge/License-Private-red.svg)](https://github.com)\n\n**Libai** is a comprehensive, high-performance Go logging library that combines modern fluent/chain-style APIs with enterprise-grade features. Built on top of uber-go/zap, it provides structured logging with multiple output destinations, async processing, and advanced reliability features.\n\n## ✨ Key Features\n\n- 🔗 **Modern Chain-Style API**: Fluent interface for readable, type-safe logging\n- 🎯 **Multiple Output Destinations**: Console, File, Database (MongoDB), Message Queue\n- ⚡ **High Performance**: Built on uber-go/zap with object pooling and async processing\n- 🔄 **100% Backward Compatible**: Existing v1 API works unchanged\n- 🚀 **Enterprise Features**: Load balancing, circuit breakers, health monitoring\n- 📊 **Advanced Message Queue**: Extensible provider architecture with routing strategies\n- 🛡️ **Reliability**: Fault tolerance, automatic recovery, and comprehensive monitoring\n- 🏎️ **Optimized Performance**: Zero-copy paths, memory pooling, concurrent safety\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\n# Clone the repository (private module)\ngit clone \u003crepository-url\u003e\ncd libai\n\n# Initialize module\ngo mod tidy\n```\n\n### Basic Usage\n\n```go\npackage main\n\nimport (\n    \"local.git/libs/libai.git\"\n)\n\nfunc main() {\n    // Create chain logger\n    config := libai.DefaultConfig()\n    config.Origin = \"my-app\"\n    logger, _ := libai.NewChainLogger(config)\n    defer logger.Close()\n\n    // Chain-style logging\n    logger.Info().\n        Msg(\"User logged in\").\n        Str(\"user_id\", \"12345\").\n        Str(\"ip\", \"192.168.1.1\").\n        Int(\"session_duration\", 3600).\n        Log()\n\n    // Error logging with stack trace\n    logger.Error().\n        Msg(\"Database connection failed\").\n        Err(err).\n        Stack().\n        Log()\n}\n```\n\n## 📖 Documentation\n\n### Chain-Style API Examples\n\n```go\n// Basic logging with fields\nlogger.Info().\n    Msg(\"Processing request\").\n    Str(\"method\", \"POST\").\n    Str(\"path\", \"/api/users\").\n    Int(\"status\", 200).\n    Dur(\"duration\", time.Since(start)).\n    Log()\n\n// Context-aware logging\nuserLogger := logger.WithFields(map[string]interface{}{\n    \"user_id\": \"12345\",\n    \"session_id\": \"sess_abc123\",\n})\n\nuserLogger.Warn().\n    Msg(\"Rate limit approaching\").\n    Int(\"requests_count\", 95).\n    Int(\"limit\", 100).\n    Log()\n\n// Targeted output\nlogger.Error().\n    Msg(\"Critical system error\").\n    ToConsole().  // Always show in console\n    ToDB().       // Store in database\n    ToMQ(\"alerts\"). // Send to alerts queue\n    Log()\n```\n\n### Legacy API (Backward Compatible)\n\n```go\n// Existing v1 code works unchanged\nlogger, _ := libai.NewLoggerBuilder().\n    SetOrigin(\"legacy-app\").\n    SetDebugMode().\n    Build()\n\nlogger.Info(\"user_action\", \"login\", map[string]interface{}{\n    \"user_id\": 12345,\n    \"method\": \"password\",\n})\n\n// Or use legacy wrapper from chain logger\nchainLogger, _ := libai.NewChainLogger(config)\nlegacyLogger := chainLogger.Legacy()\nlegacyLogger.Error(\"db_error\", \"connection_failed\", errorData)\n```\n\n## ⚙️ Configuration\n\n### Complete Configuration Example\n\n```go\nconfig := libai.DefaultConfig()\nconfig.Origin = \"my-service\"\nconfig.Level = libai.DebugLevel\nconfig.EnableStack = true\n\n// Console output (Zap-powered)\nconfig.Console.Enabled = true\nconfig.Console.Format = \"text\"  // or \"json\"\nconfig.Console.Colorized = true\n\n// File output with rotation (Lumberjack)\nconfig.File.Enabled = true\nconfig.File.Filename = \"app.log\"\nconfig.File.MaxSize = 100    // MB\nconfig.File.MaxBackups = 5\nconfig.File.MaxAge = 30      // days\nconfig.File.Compress = true\n\n// Database output (MongoDB)\nconfig.Database.Enabled = true\nconfig.Database.Driver = libai.MongoDB\nconfig.Database.ConnectionString = \"mongodb://localhost:27017\"\nconfig.Database.DatabaseName = \"logs\"\n\n// Message Queue output\nconfig.MessageQueue.Enabled = true\nconfig.MessageQueue.Provider = \"kafka\"  // or \"rabbitmq\", \"mock\"\nconfig.MessageQueue.Topic = \"app-logs\"\nconfig.MessageQueue.BatchSize = 10\nconfig.MessageQueue.WorkerCount = 3\n```\n\n### Enterprise Configuration\n\n```go\n// Enable async processing\nconfig.AsyncDispatcher.Enabled = true\nconfig.AsyncDispatcher.BufferSize = 1000\nconfig.AsyncDispatcher.WorkerCount = 5\n\n// Load balancing\nconfig.LoadBalancer.Strategy = \"round_robin\"\nconfig.LoadBalancer.HealthCheckInterval = 5000\n\n// Circuit breaker\nconfig.CircuitBreaker.Enabled = true\nconfig.CircuitBreaker.FailureThreshold = 5\nconfig.CircuitBreaker.RecoveryTimeout = 30000\n```\n\n## 🏗️ Architecture\n\n### Core Components\n\n- **ChainLogger**: Main fluent API interface\n- **OutputPlugin**: Extensible output system (Console, File, Database, MQ)\n- **AsyncOutputDispatcher**: Enterprise async processing with worker pools\n- **LoadBalancer**: Multi-strategy load balancing\n- **CircuitBreaker**: Fault tolerance and isolation\n- **HealthMonitor**: Real-time component health tracking\n\n### Output Plugins\n\n1. **Console Output**: Zap-powered with colorization and JSON support\n2. **File Output**: Lumberjack integration with automatic rotation\n3. **Database Output**: MongoDB with connection pooling\n4. **Message Queue Output**: Extensible provider architecture\n\n### Message Queue Features\n\n- **Provider Architecture**: Pluggable MQ implementations (Kafka, RabbitMQ, etc.)\n- **Routing Strategies**: Default, level-based, field-based routing\n- **Batch Processing**: Configurable batch sizes and worker pools\n- **Failover Support**: Automatic provider switching on failures\n- **Health Monitoring**: Real-time provider health checking\n\n## 🧪 Testing\n\n```bash\n# Run all tests\ngo test -v\n\n# Run specific test suites\ngo test -v -run TestChainLogger\ngo test -v -run TestMQOutput\ngo test -v -run TestDatabaseOutput\ngo test -v -run TestAsyncDispatcher\n\n# Performance benchmarks\ngo test -bench=. -benchmem\n\n# Test coverage\ngo test -cover -v\n```\n\n## 📊 Performance\n\n### Benchmarks\n\n```\nBenchmarkChainLogger-8           1000000    1050 ns/op    248 B/op    3 allocs/op\nBenchmarkAsyncDispatcher-8       2000000     850 ns/op    184 B/op    2 allocs/op\nBenchmarkObjectPool-8           10000000     105 ns/op      0 B/op    0 allocs/op\n```\n\n### Performance Features\n\n- **Object Pooling**: Zero-allocation log entry reuse\n- **Async Processing**: Non-blocking log output\n- **Level Filtering**: Compile-time optimization\n- **Batch Processing**: Reduced I/O overhead\n- **Circuit Breaking**: Prevents cascading failures\n\n## 🔧 Examples and Demos\n\nRun the comprehensive demo suite:\n\n```bash\n# Main demo (overview of all features)\ngo run demo/main.go\n\n# Specific feature demos\ngo run demo/zap_demo.go        # Zap integration\ngo run demo/mq_demo.go         # Message queue features\ngo run demo/database_demo.go   # Database output\ngo run demo/file_demo.go       # File output and rotation\n```\n\n## 📋 Migration Guide\n\n### From v1 to v2\n\n**Phase 1: Zero Changes (100% Compatible)**\n```go\n// Existing code works unchanged\nlogger, _ := NewLoggerBuilder().SetOrigin(\"app\").Build()\nlogger.Info(\"event\", \"data\", fields)\n```\n\n**Phase 2: Hybrid Approach**\n```go\n// Use BuildChain() for new instances\nchainLogger, _ := NewLoggerBuilder().SetOrigin(\"app\").BuildChain()\n\n// Mix APIs as needed\nlegacyLogger := chainLogger.Legacy()\nlegacyLogger.Info(\"old_style\", \"message\", data)\n\nchainLogger.Info().Msg(\"New style\").Str(\"key\", \"value\").Log()\n```\n\n**Phase 3: Full Chain API**\n```go\nconfig := DefaultConfig()\nlogger, _ := NewChainLogger(config)\n\nlogger.Info().\n    Msg(\"Fully migrated\").\n    Str(\"api\", \"v2\").\n    Bool(\"ready\", true).\n    Log()\n```\n\n## 🛠️ Extending Libai\n\n### Custom MQ Provider\n\n```go\n// Implement MQProvider interface\ntype CustomProvider struct{}\n\nfunc (p *CustomProvider) Initialize(config map[string]interface{}) error {\n    // Initialize your MQ client\n    return nil\n}\n\nfunc (p *CustomProvider) Publish(ctx context.Context, topic string, message *MQMessage) error {\n    // Publish to your MQ system\n    return nil\n}\n\n// Register provider\nfactory := \u0026CustomProviderFactory{}\nlibai.RegisterMQProvider(\"custom\", factory)\n\n// Use in configuration\nconfig.MessageQueue.Provider = \"custom\"\n```\n\n### Custom Output Plugin\n\n```go\n// Implement OutputPlugin interface\ntype CustomOutput struct{}\n\nfunc (c *CustomOutput) Write(ctx context.Context, entry *LogEntry) error {\n    // Custom output logic\n    return nil\n}\n\nfunc (c *CustomOutput) GetStats() map[string]interface{} {\n    return map[string]interface{}{\"status\": \"active\"}\n}\n```\n\n## 📄 License\n\nThis is a private/internal library. All rights reserved.\n\n## 🤝 Contributing\n\nThis is a private module. For internal development guidelines, see `CLAUDE.md`.\n\n## 📞 Support\n\nFor questions and support, please refer to the internal documentation and examples provided in the `demo/` directory.\n\n---\n\n**Libai v2.0** - Enterprise Go Logging Library  \n*Built for high-performance, reliable, and scalable logging needs.*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuptutu%2Flibai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuptutu%2Flibai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuptutu%2Flibai/lists"}