mirror of
https://github.com/fosrl/newt.git
synced 2026-02-08 05:56:40 +00:00
162 lines
3.9 KiB
Go
162 lines
3.9 KiB
Go
// Example usage patterns for the extensible logger
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/fosrl/newt/logger"
|
|
)
|
|
|
|
// Example 1: Using the default logger (works exactly as before)
|
|
func exampleDefaultLogger() {
|
|
logger.Info("Starting application")
|
|
logger.Debug("Debug information")
|
|
logger.Warn("Warning message")
|
|
logger.Error("Error occurred")
|
|
}
|
|
|
|
// Example 2: Using a custom logger instance with standard writer
|
|
func exampleCustomInstance() {
|
|
log := logger.NewLogger()
|
|
log.SetLevel(logger.INFO)
|
|
log.Info("This is from a custom instance")
|
|
}
|
|
|
|
// Example 3: Custom writer that adds JSON formatting
|
|
type JSONWriter struct{}
|
|
|
|
func (w *JSONWriter) Write(level logger.LogLevel, timestamp time.Time, message string) {
|
|
fmt.Printf("{\"time\":\"%s\",\"level\":\"%s\",\"message\":\"%s\"}\n",
|
|
timestamp.Format(time.RFC3339),
|
|
level.String(),
|
|
message)
|
|
}
|
|
|
|
func exampleJSONLogger() {
|
|
jsonWriter := &JSONWriter{}
|
|
log := logger.NewLoggerWithWriter(jsonWriter)
|
|
log.Info("This will be logged as JSON")
|
|
}
|
|
|
|
// Example 4: File writer
|
|
type FileWriter struct {
|
|
file *os.File
|
|
}
|
|
|
|
func NewFileWriter(filename string) (*FileWriter, error) {
|
|
file, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &FileWriter{file: file}, nil
|
|
}
|
|
|
|
func (w *FileWriter) Write(level logger.LogLevel, timestamp time.Time, message string) {
|
|
fmt.Fprintf(w.file, "[%s] %s: %s\n",
|
|
timestamp.Format("2006-01-02 15:04:05"),
|
|
level.String(),
|
|
message)
|
|
}
|
|
|
|
func (w *FileWriter) Close() error {
|
|
return w.file.Close()
|
|
}
|
|
|
|
func exampleFileLogger() {
|
|
fileWriter, err := NewFileWriter("/tmp/app.log")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer fileWriter.Close()
|
|
|
|
log := logger.NewLoggerWithWriter(fileWriter)
|
|
log.Info("This goes to a file")
|
|
}
|
|
|
|
// Example 5: Multi-writer to log to multiple destinations
|
|
type MultiWriter struct {
|
|
writers []logger.LogWriter
|
|
}
|
|
|
|
func NewMultiWriter(writers ...logger.LogWriter) *MultiWriter {
|
|
return &MultiWriter{writers: writers}
|
|
}
|
|
|
|
func (w *MultiWriter) Write(level logger.LogLevel, timestamp time.Time, message string) {
|
|
for _, writer := range w.writers {
|
|
writer.Write(level, timestamp, message)
|
|
}
|
|
}
|
|
|
|
func exampleMultiWriter() {
|
|
// Log to both stdout and a file
|
|
standardWriter := logger.NewStandardWriter()
|
|
fileWriter, _ := NewFileWriter("/tmp/app.log")
|
|
|
|
multiWriter := NewMultiWriter(standardWriter, fileWriter)
|
|
log := logger.NewLoggerWithWriter(multiWriter)
|
|
|
|
log.Info("This goes to both stdout and file!")
|
|
}
|
|
|
|
// Example 6: Conditional writer (only log errors to a specific destination)
|
|
type ErrorOnlyWriter struct {
|
|
writer logger.LogWriter
|
|
}
|
|
|
|
func NewErrorOnlyWriter(writer logger.LogWriter) *ErrorOnlyWriter {
|
|
return &ErrorOnlyWriter{writer: writer}
|
|
}
|
|
|
|
func (w *ErrorOnlyWriter) Write(level logger.LogLevel, timestamp time.Time, message string) {
|
|
if level >= logger.ERROR {
|
|
w.writer.Write(level, timestamp, message)
|
|
}
|
|
}
|
|
|
|
func exampleConditionalWriter() {
|
|
errorWriter, _ := NewFileWriter("/tmp/errors.log")
|
|
errorOnlyWriter := NewErrorOnlyWriter(errorWriter)
|
|
|
|
log := logger.NewLoggerWithWriter(errorOnlyWriter)
|
|
log.Info("This won't be logged")
|
|
log.Error("This will be logged to errors.log")
|
|
}
|
|
|
|
/* Example 7: OS Log Writer (macOS/iOS only)
|
|
// Uncomment on Darwin platforms
|
|
|
|
func exampleOSLogWriter() {
|
|
osWriter := logger.NewOSLogWriter(
|
|
"net.pangolin.Pangolin.PacketTunnel",
|
|
"PangolinGo",
|
|
"MyApp",
|
|
)
|
|
|
|
log := logger.NewLoggerWithWriter(osWriter)
|
|
log.Info("This goes to os_log and can be viewed with Console.app")
|
|
}
|
|
*/
|
|
|
|
func main() {
|
|
fmt.Println("=== Example 1: Default Logger ===")
|
|
exampleDefaultLogger()
|
|
|
|
fmt.Println("\n=== Example 2: Custom Instance ===")
|
|
exampleCustomInstance()
|
|
|
|
fmt.Println("\n=== Example 3: JSON Logger ===")
|
|
exampleJSONLogger()
|
|
|
|
fmt.Println("\n=== Example 4: File Logger ===")
|
|
exampleFileLogger()
|
|
|
|
fmt.Println("\n=== Example 5: Multi-Writer ===")
|
|
exampleMultiWriter()
|
|
|
|
fmt.Println("\n=== Example 6: Conditional Writer ===")
|
|
exampleConditionalWriter()
|
|
}
|