Skip to content

Commit

Permalink
Merge pull request #47 from mysteriumnetwork/1290-stdlog
Browse files Browse the repository at this point in the history
Allow customizing logger
  • Loading branch information
tadaskay committed Oct 24, 2019
2 parents 75afeb4 + 1b056c4 commit 12f2923
Show file tree
Hide file tree
Showing 11 changed files with 186 additions and 58 deletions.
9 changes: 0 additions & 9 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,6 @@

required = ["github.com/magefile/mage/mage"]

[[constraint]]
name = "github.com/cihub/seelog"
version = "2.6.0"

[[constraint]]
name = "github.com/stretchr/testify"
version = "1.2.2"
Expand Down
17 changes: 8 additions & 9 deletions openvpn/cmd_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,11 @@ package openvpn
import (
"bufio"
"errors"
"io"
"os/exec"
"sync"

"io"

log "github.com/cihub/seelog"
"github.com/mysteriumnetwork/go-openvpn/openvpn/log"
)

// CommandFunc represents the func for running external commands
Expand Down Expand Up @@ -61,7 +60,7 @@ func (cw *CmdWrapper) Start(arguments []string) (err error) {
return errors.New("nothing to execute for an empty command")
}

log.Info(cw.logPrefix, "Starting cmd: ", cmd.Args[0], " with arguments: ", arguments)
log.Info(cw.logPrefix, "Starting cmd:", cmd.Args[0], "with arguments:", arguments)

// Attach logger for stdout and stderr
stdout, err := cmd.StdoutPipe()
Expand All @@ -72,8 +71,8 @@ func (cw *CmdWrapper) Start(arguments []string) (err error) {
if err != nil {
return err
}
go cw.outputToLog(stdout, "Stdout: ")
go cw.outputToLog(stderr, "Stderr: ")
go cw.outputToLog(stdout, "Stdout:")
go cw.outputToLog(stderr, "Stderr:")

// Try to start the cmd
err = cmd.Start()
Expand Down Expand Up @@ -109,10 +108,10 @@ func (cw *CmdWrapper) Stop() {
func (cw *CmdWrapper) outputToLog(output io.ReadCloser, streamPrefix string) {
scanner := bufio.NewScanner(output)
for scanner.Scan() {
log.Trace(cw.logPrefix, streamPrefix, scanner.Text())
log.Debug(cw.logPrefix, streamPrefix, scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Warn(cw.logPrefix, streamPrefix, "(failed to read: ", err, ")")
log.Warn(cw.logPrefix, streamPrefix, "failed to read:", err)
} else {
log.Info(cw.logPrefix, streamPrefix, "stream ended")
}
Expand All @@ -128,6 +127,6 @@ func (cw *CmdWrapper) waitForShutdown(cmd *exec.Cmd) {
//First - shutdown gracefully by sending SIGINT (the only two signals guaranteed to be present in all OS'es SIGINT and SIGKILL)
//TODO - add timer and send SIGKILL after timeout?
if err := cmd.Process.Signal(exitSignal); err != nil {
log.Error(cw.logPrefix, "Error killing cw = ", err)
log.Error(cw.logPrefix, "Error killing cw:", err)
}
}
30 changes: 30 additions & 0 deletions openvpn/log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (C) 2019 The "MysteriumNetwork/go-openvpn" Authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package openvpn

import "github.com/mysteriumnetwork/go-openvpn/openvpn/log"

// UseLogger sets go-openvpn library logger.
func UseLogger(l log.Logger) {
log.UseLogger(l)
}

// UseDefaultLogger resets logger to the default logger.
func UseDefaultLogger() {
log.UseDefaultLogger()
}
59 changes: 59 additions & 0 deletions openvpn/log/log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* Copyright (C) 2019 The "MysteriumNetwork/go-openvpn" Authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package log

// Logger interface to go-openvpn library logger.
// Stdout implementation is used by default.
type Logger interface {
Error(args ...interface{})
Warn(args ...interface{})
Info(args ...interface{})
Debug(args ...interface{})
}

var logger Logger = stdLogger{}

// UseLogger sets go-openvpn library logger.
func UseLogger(l Logger) {
logger = l
}

// UseDefaultLogger resets logger to the default logger.
func UseDefaultLogger() {
logger = stdLogger{}
}

// Error prints an error.
func Error(args ...interface{}) {
logger.Error(args...)
}

// Warn prints a warning.
func Warn(args ...interface{}) {
logger.Warn(args...)
}

// Info prints information.
func Info(args ...interface{}) {
logger.Info(args...)
}

// Debug prints debug message.
func Debug(args ...interface{}) {
logger.Debug(args...)
}
53 changes: 53 additions & 0 deletions openvpn/log/stdlog.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright (C) 2019 The "MysteriumNetwork/go-openvpn" Authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package log

import (
"log"
)

type stdLogger struct {
}

func (l stdLogger) Error(args ...interface{}) {
var msg []interface{}
msg = append(msg, "ERROR")
msg = append(msg, args...)
log.Println(msg...)
}

func (l stdLogger) Warn(args ...interface{}) {
var msg []interface{}
msg = append(msg, "WARN ")
msg = append(msg, args...)
log.Println(msg...)
}

func (l stdLogger) Info(args ...interface{}) {
var msg []interface{}
msg = append(msg, "INFO ")
msg = append(msg, args...)
log.Println(msg...)
}

func (l stdLogger) Debug(args ...interface{}) {
var msg []interface{}
msg = append(msg, "DEBUG")
msg = append(msg, args...)
log.Println(msg...)
}
22 changes: 11 additions & 11 deletions openvpn/management/listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
"sync"
"time"

log "github.com/cihub/seelog"
"github.com/mysteriumnetwork/go-openvpn/openvpn/log"
)

// Addr struct represents local address on which listener waits for incoming management connections
Expand Down Expand Up @@ -78,7 +78,7 @@ func NewManagement(socketAddress Addr, logPrefix string, middlewares ...Middlewa
// channel which receives true when connection is accepted or false overwise (i.e. listener stop requested). It returns non nil
// error on any error condition
func (management *Management) WaitForConnection() error {
log.Info(management.logPrefix, "Binding to socket: ", management.BoundAddress.String())
log.Info(management.logPrefix, "Binding to socket:", management.BoundAddress.String())

listener, err := net.Listen("tcp", management.BoundAddress.String())
if err != nil {
Expand Down Expand Up @@ -124,7 +124,7 @@ func (management *Management) listenForConnection(listener net.Listener) {
go func() {
conn, err := listener.Accept()
if err != nil {
log.Critical(management.logPrefix, "Connection accept error: ", err)
log.Error(management.logPrefix, "Connection accept error:", err)
close(connChannel)
return
}
Expand Down Expand Up @@ -176,7 +176,7 @@ func (management *Management) startMiddlewares(connection CommandWriter) {
if err != nil {
//TODO what we should do with errors on middleware start? Stop already running, close cmdWriter, bailout?
//at least log errors for now
log.Error(management.logPrefix, "Middleware startup error: ", err)
log.Error(management.logPrefix, "Middleware startup error:", err)
}
}
}
Expand All @@ -186,7 +186,7 @@ func (management *Management) stopMiddlewares(connection CommandWriter) {
err := middleware.Stop(connection)
if err != nil {
//log error but do not stop cleaning process
log.Warn(management.logPrefix, "Middleware stop error. ", err)
log.Warn(management.logPrefix, "Middleware stop error:", err)
}
}
}
Expand All @@ -196,12 +196,12 @@ func (management *Management) consumeOpenvpnConnectionOutput(input io.Reader, ou
for {
line, err := reader.ReadLine()
if err != nil {
log.Warn(management.logPrefix, "Connection failed to read. ", err)
log.Warn(management.logPrefix, "Connection failed to read:", err)
close(outputChannel)
close(eventChannel)
return
}
log.Debug(management.logPrefix, "Line received: ", line)
log.Debug(management.logPrefix, "Line received:", line)

output := outputChannel
if strings.HasPrefix(line, ">") {
Expand All @@ -212,26 +212,26 @@ func (management *Management) consumeOpenvpnConnectionOutput(input io.Reader, ou
select {
case output <- line:
case <-time.After(time.Second):
log.Error(management.logPrefix, "Failed to transport line: ", line)
log.Error(management.logPrefix, "Failed to transport line:", line)
}
}
}

func (management *Management) deliverOpenvpnManagementEvents(eventChannel chan string) {
for event := range eventChannel {
log.Trace(management.logPrefix, "Line delivering: ", event)
log.Debug(management.logPrefix, "Line delivering:", event)

lineConsumed := false
for _, middleware := range management.middlewares {
consumed, err := middleware.ConsumeLine(event)
if err != nil {
log.Error(management.logPrefix, "Failed to deliver event: ", event, ". ", err)
log.Error(management.logPrefix, "Failed to deliver event:", event, ". ", err)
}

lineConsumed = lineConsumed || consumed
}
if !lineConsumed {
log.Trace(management.logPrefix, "Line not delivered: ", event)
log.Debug(management.logPrefix, "Line not delivered:", event)
}
}
log.Info(management.logPrefix, "Event consumer is done")
Expand Down
6 changes: 3 additions & 3 deletions openvpn/middlewares/client/auth/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ package auth
import (
"regexp"

log "github.com/cihub/seelog"
"github.com/mysteriumnetwork/go-openvpn/openvpn"
"github.com/mysteriumnetwork/go-openvpn/openvpn/log"
"github.com/mysteriumnetwork/go-openvpn/openvpn/management"
)

Expand All @@ -48,7 +48,7 @@ func NewMiddleware(credentials CredentialsProvider) *middleware {

func (m *middleware) Start(commandWriter management.CommandWriter) error {
m.commandWriter = commandWriter
log.Info("starting client user-pass provider middleware")
log.Info("Starting client user-pass provider middleware")
return nil
}

Expand All @@ -67,7 +67,7 @@ func (m *middleware) ConsumeLine(line string) (consumed bool, err error) {
return false, err
}

log.Info("authenticating user ", username)
log.Info("Authenticating user", username)

_, err = m.commandWriter.SingleLineCommand("password 'Auth' %s", password)
if err != nil {
Expand Down
Loading

0 comments on commit 12f2923

Please sign in to comment.