Skip to content

Commit 2df5865

Browse files
committed
Introduce logger
- go routine safe stdout/stderr - move config to ./etc/ - cleanup
1 parent 969e9c6 commit 2df5865

File tree

6 files changed

+41
-38
lines changed

6 files changed

+41
-38
lines changed

Dockerfile.develop

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ WORKDIR /go/src/go-syslogd
2020
# Build and install
2121
RUN go build \
2222
&& cp -a go-syslogd /usr/local/bin \
23-
&& cp /go/src/go-syslogd/go-syslog.yml /etc/go-syslog.yml
23+
&& cp /go/src/go-syslogd/etc/go-syslog.yml /etc/go-syslog.yml
2424

2525
CMD ["./go-syslogd"]
File renamed without changes.

log.go

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
package main
22

33
import (
4-
"fmt"
5-
"os"
6-
"strings"
4+
"log"
75
)
86

9-
10-
// Log error object as message
11-
func logError(err error) {
12-
fmt.Fprintln(os.Stderr, fmt.Sprintf("Error: %s\n", err))
7+
type SyslogLogger struct {
8+
*log.Logger
139
}
1410

15-
// Log error object as message
16-
func logFatalErrorAndExit(err error, exitCode int) {
17-
cmdline := fmt.Sprintf("%s %s", argparser.Command.Name, strings.Join(os.Args[1:], " "))
18-
19-
fmt.Fprintln(os.Stderr, fmt.Sprintf("Error: %s", err))
20-
fmt.Fprintln(os.Stderr, fmt.Sprintf("Command: %s", cmdline))
21-
22-
os.Exit(exitCode)
11+
func (SyslogLogger SyslogLogger) Verbose(message string) {
12+
if opts.Verbose {
13+
SyslogLogger.Println(message)
14+
}
2315
}

main.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,23 @@ import (
66
"io/ioutil"
77
"sync"
88
"strings"
9+
"log"
910
flags "github.com/jessevdk/go-flags"
1011
yaml "gopkg.in/yaml.v2"
1112
)
1213

1314
const (
14-
Name = "go-syslogd"
15-
Author = "webdevops.io"
16-
Version = "0.1.0"
15+
Name = "go-syslogd"
16+
Author = "webdevops.io"
17+
Version = "0.1.0"
18+
LogPrefix = ""
1719
)
1820

1921
var (
2022
argparser *flags.Parser
2123
configuration ConfigurationDefinition
24+
LoggerStdout SyslogLogger
25+
LoggerStderr SyslogLogger
2226
)
2327

2428
type ConfigurationDefinition struct {
@@ -28,6 +32,7 @@ type ConfigurationDefinition struct {
2832

2933
var opts struct {
3034
Configuration string `short:"c" long:"configuration" description:"Configuration file (yml)" default:"/etc/go-syslog.yml"`
35+
Verbose bool `short:"v" long:"verbose" description:"verbose mode"`
3136
ShowVersion bool `short:"V" long:"version" description:"show version and exit"`
3237
ShowOnlyVersion bool ` long:"dumpversion" description:"show only version number and exit"`
3338
}
@@ -76,20 +81,25 @@ func parseConfiguration() {
7681
}
7782
}
7883

79-
func printMessage(dest *os.File, msg string) {
80-
fmt.Fprint(dest, msg)
81-
}
82-
8384
// Prints help
8485
func printHelp() {
8586
argparser.WriteHelp(os.Stdout)
8687
os.Exit(1)
8788
}
8889

90+
// Init system loggers
91+
func initLogger() {
92+
LoggerStdout = SyslogLogger{log.New(os.Stdout, LogPrefix, 0)}
93+
LoggerStderr = SyslogLogger{log.New(os.Stderr, LogPrefix, 0)}
94+
}
95+
8996
// Main function
9097
func main() {
9198
var wg sync.WaitGroup
9299

100+
// init logger
101+
initLogger()
102+
93103
// init argument parser
94104
argparser = flags.NewParser(&opts, flags.Default)
95105
args, err := argparser.Parse()
@@ -108,7 +118,7 @@ func main() {
108118
// parse yml configuration
109119
parseConfiguration()
110120

111-
fmt.Println(fmt.Sprintf("Starting %s version %s", Name, Version))
121+
LoggerStdout.Println(fmt.Sprintf("Starting %s version %s", Name, Version))
112122

113123
// init pipes
114124
for _, pipe := range configuration.Pipes {

pipe.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,16 @@ type Pipe struct {
1717

1818
// Create and handle log data from pipe
1919
func handlePipe(pipe Pipe) {
20-
var pipeOutput *os.File
2120
pipeExists := false
2221

22+
LoggerStdout.Verbose(fmt.Sprintf(" -> Starting named pipe (%s)", pipe.Path))
23+
2324
// get pipe permissions
2425
if pipe.Perms == "" {
2526
pipe.Perms = "0600"
2627
}
2728
pipePerms, _ := strconv.ParseUint(pipe.Perms, 8, 32)
2829

29-
// get pipe output destination
30-
switch pipe.Type {
31-
case "stdout":
32-
pipeOutput = os.Stdout
33-
case "stderr":
34-
pipeOutput = os.Stderr
35-
}
36-
3730
// check for existing file
3831
fileInfo, err := os.Stat(pipe.Path)
3932

@@ -50,26 +43,32 @@ func handlePipe(pipe Pipe) {
5043
if !pipeExists {
5144
err := syscall.Mkfifo(pipe.Path, uint32(pipePerms))
5245
if err != nil {
53-
panic(fmt.Sprintf("Creation of pipe %s failed: %v", pipe.Path, err.Error()))
46+
panic(fmt.Sprintf("Creation of named pipe %s failed: %v", pipe.Path, err.Error()))
5447
}
5548
}
5649

5750
// Open pipe for reading
5851
fd, err := os.Open(pipe.Path)
5952
if err != nil {
60-
panic(fmt.Sprintf("Failed opening pipe %s: %v", pipe.Path, err.Error()))
53+
panic(fmt.Sprintf("Failed opening named pipe %s: %v", pipe.Path, err.Error()))
6154
}
6255
defer fd.Close()
6356
reader := bufio.NewReader(fd)
6457

58+
// loop messages
6559
for {
6660
message, err := reader.ReadString(0xa)
6761
if err != nil && err != io.EOF {
68-
panic(fmt.Sprintf("Reading from pipe %s failed: %v", pipe.Path, err.Error()))
62+
panic(fmt.Sprintf("Reading from named pipe %s failed: %v", pipe.Path, err.Error()))
6963
}
7064

7165
if message != "" {
72-
printMessage(pipeOutput, message)
66+
switch pipe.Type {
67+
case "stdout":
68+
LoggerStdout.Println(message)
69+
case "stderr":
70+
LoggerStderr.Println(message)
71+
}
7372
}
7473
}
7574
}

syslog.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ var SyslogFacilityLookup = map[int]string {
5353
}
5454

5555
func handleSyslog() {
56+
LoggerStdout.Verbose(fmt.Sprintf(" -> Starting syslog daemon (%s)", configuration.Syslog.Path))
57+
5658
// Check if syslog path exists, remove if already existing
5759
_, err := os.Stat(configuration.Syslog.Path)
5860
if err == nil {
@@ -82,7 +84,7 @@ func handleSyslog() {
8284
}
8385

8486
message := fmt.Sprintf("%s: %s", facility, logParts["content"])
85-
printMessage(os.Stdout, message)
87+
LoggerStdout.Println(message)
8688
}
8789
}(channel)
8890

0 commit comments

Comments
 (0)