Open lessfantasy opened 3 years ago
package main
import (
"flag"
"log"
"os"
"log/syslog"
)
// Define flags for log output and level
var (
logOutput = flag.String("log-output", "syslog", "Log output destination (file, syslog, none)")
logFile = flag.String("log-file", "clickhouse-bulk.log", "Log file path (if log-output is file)")
logLevel = flag.String("log-level", "info", "Log level (debug, info, warn, error)")
)
func main() {
flag.Parse()
// Setup logger based on the output destination
switch *logOutput {
case "file":
file, err := os.OpenFile(*logFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatalf("Error opening log file: %v", err)
}
log.SetOutput(file)
case "syslog":
syslogWriter, err := syslog.New(syslog.LOG_NOTICE|syslog.LOG_DAEMON, "clickhouse-bulk")
if err != nil {
log.Fatalf("Error setting up syslog: %v", err)
}
log.SetOutput(syslogWriter)
case "none":
log.SetOutput(os.DevNull)
default:
log.Fatalf("Unsupported log output: %s", *logOutput)
}
// Example of setting up a simple log level check before logging
// This is a basic implementation; for more complex scenarios consider using a logging library
debugLog("This is a debug message")
infoLog("This is an info message")
}
func debugLog(message string) {
if *logLevel == "debug" {
log.Println("DEBUG:", message)
}
}
func infoLog(message string) {
if *logLevel == "debug" || *logLevel == "info" {
log.Println("INFO:", message)
}
}
Now all logs store in syslog, that is not very useful. Please, make option to choose place for logs storing (file, syslog, work without logging) and make possible to set up log level (for ex. I don't want to store logs like ' clickhouse-bulk[40680]: 2020/08/17 13:58:01 INFO: send 0 rows to ...')