diff --git a/README.md b/README.md index 6833230..0c48cc3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,77 @@ # gologger -a logger used in go \ No newline at end of file +GoLogger 是一个简单但功能强大的 Go 语言日志库,提供灵活的日志记录功能。它支持多种日志输出方式(控制台、文件等),并允许自定义日志格式。 + +## 特性 +- 支持多种日志级别:ERROR, WARN, INFO, DEBUG, TRACE +- 支持多种输出方式:控制台、文件(支持滚动策略) +- 可定制日志格式 +- 支持按类别记录日志 + +## 安装 +```bash +go get github.com/yourusername/gologger +``` + +## 快速开始 +```go +package main + +import ( + "github.com/yourusername/gologger" +) + +func main() { + // 获取默认logger + logger := gologger.GetLogger("main") + + // 设置全局日志级别 + gologger.Configure(gologger.LoggersConfig{ + Level: "info", + Appenders: []gologger.LogAppenderConfig{ + { + Type: "console", + }, + { + Type: "file", + Options: map[string]interface{}{ + "filePath": "app.log", + "EnableRolling": true, + "MaxSize": 1024 * 1024 * 10, // 10MB + }, + }, + }, + }) + + // 记录日志 + logger.Info("Application started") + logger.Error("An error occurred") +} +``` + +## 配置说明 + +### 日志级别 +支持的级别包括:off, error, warn, info, debug, trace + +### 输出方式(Appenders) + +1. **ConsoleAppender** - 控制台输出 + 配置示例: + ```go + { + Type: "console", + } + ``` + +2. **FileAppender** - 文件输出,支持滚动策略 + 配置参数: + - filePath: 日志文件路径 + - EnableRolling: 是否启用滚动(默认true) + - MaxSize: 单个文件最大大小(字节,默认10MB) + - MaxAge: 文件最大保存时间(秒,默认86400秒=24小时) + +### 格式化器 +可以通过SelectFormatter选择不同的日志格式: +- simple: 简单格式 `[timestamp] level : category - message` +- json: JSON 格式输出 \ No newline at end of file diff --git a/console.go b/console.go index be8e616..10c23e7 100644 --- a/console.go +++ b/console.go @@ -4,6 +4,18 @@ import ( "fmt" ) +// ConsoleAppender implements the LoggerAppender interface for console output. +// It uses color-coded templates for different log levels. +// Example: +// appender := &ConsoleAppender{ +// formatter: NewSimpleFormatter(), +// } +// appender.Append(event) +// appender.Close() +type ConsoleAppender struct { + formatter LogFormatter +} + const ( ErrorTemplate = "\033[1;31m%s\033[0m" WarnTemplate = "\033[1;33m%s\033[0m" @@ -12,10 +24,6 @@ const ( TraceTemplate = "\033[1;35m%s\033[0m" ) -type ConsoleAppender struct { - formatter LogFormatter -} - // Close implements LoggerAppender. func (c *ConsoleAppender) Close() { diff --git a/file.go b/file.go index b6f6a21..07b47e1 100644 --- a/file.go +++ b/file.go @@ -8,6 +8,17 @@ import ( "time" ) +// FileAppender implements the LoggerAppender interface for file output. +// It supports log rotation based on file size and age. +// Example: +// appender := &FileAppender{ +// formatter: NewSimpleFormatter(), +// filePath: "app.log", +// EnableRolling: true, +// MaxSize: 1024 * 1024 * 10, // 10MB +// } +// appender.Append(event) +// appender.Close() type FileAppender struct { formatter LogFormatter filePath string diff --git a/format.go b/format.go index 706f72c..064d06c 100644 --- a/format.go +++ b/format.go @@ -1,3 +1,5 @@ +// Package gologger provides a simple logging implementation with multiple appenders and formatters. +// It supports console, file, and HTTP logging with customizable formats. package gologger import ( @@ -6,10 +8,16 @@ import ( "strings" ) -const logTemplate = "[%s] %s : %s - %s\n" - +// LogFormatter is a function type that formats a LogEvent into a string. +// Example: +// formatter := func(event LogEvent) string { +// return fmt.Sprintf("[%s] %s: %v", event.Ts.Format("2006-01-02"), event.Level, event.Data) +// } type LogFormatter = func(LogEvent) string +// format is the default formatter that converts a LogEvent to a string using the default template. +// It handles both simple values and formatted strings. +// Template: "[timestamp] level : category - data" func format(logEvent LogEvent) string { data := logEvent.Ts.Format("2006-01-02 15:04:05") msg := "" diff --git a/main.go b/main.go index ee194f2..64188f9 100644 --- a/main.go +++ b/main.go @@ -1,3 +1,5 @@ +// Package gologger provides a simple logging implementation with multiple appenders and formatters. +// It supports console, file, and HTTP logging with customizable formats. package gologger import ( @@ -55,6 +57,12 @@ type LoggersConfig struct { Appenders map[string]LogAppenderConfig `json:"appenders"` Categories map[string]LogConfig `json:"categories"` } +// Logger represents a logger instance for a specific category. +// It maintains the log level and appenders for that category. +// Example: +// logger := GetLogger("mycategory") +// logger.Info("This is an info message") +// logger.Error("This is an error message") type Logger struct { category string level int