A fast, lightweight, zero-dependency logging solution for Go applications that prioritizes performance and
simplicity.
Compatible with Go version 1.18.x and above
- Lightweight: No external dependencies mean faster builds and smaller binaries
The dependencies that you see in thego.modfile are not included in the final binary since they are only used in_testfiles. - Simplicity: Clean API design with a minimal learning curve. You'll set it up in seconds.
- Performance: The library is benchmarked to be very fast. It implements custom JSON and YAML marshaling
specifically optimized for logging
- Up to 1.4x faster JSON marshaling than
encoding/json - Up to 5x faster YAML marshaling than
gopkg.in/yaml.v3
- Up to 1.4x faster JSON marshaling than
- Color Support: Built-in ANSI color support for terminal output
- Thread-Safe: Concurrent-safe logging with atomic operations
- Time-Optimized: Efficient date/time print built-int logic with minimal allocations
- Reliability: Thoroughly tested with high test coverage
- Maintainability: A small, focused codebase makes it easy to understand and modify at will
/******************** Basic Logging methods usage ********************/
logger := logs.NewLogger()
logger.Warn("my warning test") // stdout: 'WARN: my warning test'
logger.Info("my", "info", "test", 2) // stdout: 'INFO: my info test 2'
logger.Debug("hey", "check this", "debug") // stdout: 'DEBUG: hey check this debug'
logger.Error("here is the error") // stderr: 'ERROR: here is the error'
/******************** Configuration setup example ********************/
logger := logs.NewLogger().
SetLogLvl(ll.WarnLvlName).
EnableColors(true).
AddTime(true).
AddDate(true)
logger.Warn("This is my Warn log") // stdout: WARN[03/11/2024 18:35:43]: This is my Warn log
logger.SetEncoder(shared.JsonEncoderType)
logger.Debug("This is my Debug log") // stdout: {"level":"DEBUG","datetime":"03/11/2024 18:35:43","message":"This is my Debug log"}
logger.AddTime(false)
logger.Debug("This is my Debug log") // stdout: {"level":"DEBUG","date":"03/11/2024","message":"This is my Debug log"}
/******************** Logging to a file example ********************/
file, err := os.OpenFile("./my-out-file.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
println("ERROR: cannot open out file", err)
}
logger := logs.NewLogger().SetLogFile(file) // From this point on loggers logs will be redirected to the file
logger.Debug("This is my Debug log", "Test arg")
logger.CloseLogFile()
/******************** Date Time Formatting example ********************/
logger := logs.NewLogger().SetDateTimeFormat(shared.IT)
logger.Debug("This is my Debug log", "Test arg") // stdout: 03/11/2024 18:35:43: This is my Debug log Test arg
logger.SetDateTimeFormat(shared.US)
logger.Debug("This is my Debug log", "Test arg") // stdout: 11/03/2024 18:35:43: This is my Debug log Test arg
logger.SetDateTimeFormat(shared.UnixTimestamp)
logger.Debug("This is my Debug log", "Test arg") // stdout: 1690982143.000000 This is my Debug log Test argThis is the result of running the ./test/benchmark_test.go benchmark on my machine, (ns/op)times do not include the
terminal graphical visualization time.
| Encoder | Configuration | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| Default Encoder | All Properties OFF | 490.3 | 80 | 1 |
| All Properties ON | 511.2 | 104 | 1 | |
| JSON Encoder | All Properties OFF | 513.3 | 80 | 1 |
| All Properties ON | 536.5 | 104 | 1 | |
| YAML Encoder | All Properties OFF | 535.3 | 80 | 1 |
| All Properties ON | 557.1 | 104 | 1 |
Contributions are welcome, Here's how you can help:
- Fork the repository
- Clone your fork:
- Create a new branch:
git checkout -b feat/your-feature-name-
Code Style
- Follow standard Go formatting (
go fmt) - Use meaningful variable names
- Add comments for non-obvious code sections
- Write tests for new functionality
- Follow standard Go formatting (
-
Testing
- Run tests:
make test - Run benchmarks:
make test-benchmark - Ensure test coverage remains high; it can be checked using
make test-coverage
- Run tests:
MIT License—see LICENSE file for details