Skip to content

Commit 649bf4f

Browse files
committed
Improve logging.
1 parent b73088e commit 649bf4f

File tree

3 files changed

+52
-46
lines changed

3 files changed

+52
-46
lines changed

domain-proxy/common.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ const (
2323
DefaultIdleTimeout = 1000 * time.Millisecond
2424
)
2525

26+
var Logger *log.Logger
27+
28+
func InitLogger(appName string) {
29+
Logger = log.New(os.Stdout, appName+" ", log.LstdFlags|log.Lshortfile)
30+
}
31+
2632
func BiDirectionalTransfer(leftConn, rightConn net.Conn, byteBufferSize int, idleTimeout time.Duration, executor *sync.WaitGroup) {
2733
defer executor.Done()
2834
defer CloseConnections(leftConn, rightConn)
@@ -46,14 +52,14 @@ func Transfer(targetConn, sourceConn net.Conn, done chan struct{}, bufferSize in
4652
handleConnectionError(err)
4753
return
4854
} else if n > 0 {
49-
log.Printf("%d bytes read", n)
55+
Logger.Printf("%d bytes read", n)
5056
sourceConn.SetReadDeadline(time.Now().Add(idleTimeout))
5157
n, err = targetConn.Write(buf[:n])
5258
if err != nil {
5359
handleConnectionError(err)
5460
return
5561
} else if n > 0 {
56-
log.Printf("%d bytes written", n)
62+
Logger.Printf("%d bytes written", n)
5763
targetConn.SetWriteDeadline(time.Now().Add(idleTimeout))
5864
}
5965
}
@@ -63,11 +69,11 @@ func Transfer(targetConn, sourceConn net.Conn, done chan struct{}, bufferSize in
6369
func handleConnectionError(err error) {
6470
var netErr net.Error
6571
if errors.As(err, &netErr) && netErr.Timeout() {
66-
log.Printf("Connection timed out")
72+
Logger.Printf("Connection timed out")
6773
} else if err != io.EOF {
68-
log.Printf("Error using connection: %v", err)
74+
Logger.Printf("Error using connection: %v", err)
6975
} else if err == io.EOF {
70-
log.Printf("EOF")
76+
Logger.Printf("EOF")
7177
}
7278
}
7379

@@ -78,13 +84,13 @@ func CloseConnections(leftConn, rightConn net.Conn) {
7884
if rightConn != nil {
7985
rightConn.Close()
8086
}
81-
log.Println("Connections closed")
87+
Logger.Println("Connections closed")
8288
}
8389

8490
func GetEnvVariable(key, defaultValue string) string {
8591
value := os.Getenv(key)
8692
if value == "" {
87-
log.Printf("Environment variable %s is not set, using default value: %s", key, defaultValue)
93+
Logger.Printf("Environment variable %s is not set, using default value: %s", key, defaultValue)
8894
return defaultValue
8995
}
9096
return value
@@ -93,12 +99,12 @@ func GetEnvVariable(key, defaultValue string) string {
9399
func GetIntEnvVariable(key string, defaultValue int) int {
94100
valueStr := os.Getenv(key)
95101
if valueStr == "" {
96-
log.Printf("Environment variable %s is not set, using default value: %d", key, defaultValue)
102+
Logger.Printf("Environment variable %s is not set, using default value: %d", key, defaultValue)
97103
return defaultValue
98104
}
99105
value, err := strconv.Atoi(valueStr)
100106
if err != nil {
101-
log.Printf("Invalid environment variable %s: %v, using default value: %d", key, err, defaultValue)
107+
Logger.Printf("Invalid environment variable %s: %v, using default value: %d", key, err, defaultValue)
102108
return defaultValue
103109
}
104110
return value
@@ -107,7 +113,7 @@ func GetIntEnvVariable(key string, defaultValue int) int {
107113
func GetCsvEnvVariable(key, defaultValue string) map[string]bool {
108114
valuesStr := os.Getenv(key)
109115
if valuesStr == "" {
110-
log.Printf("Environment variable %s is not set, using default value: %s", key, defaultValue)
116+
Logger.Printf("Environment variable %s is not set, using default value: %s", key, defaultValue)
111117
return parseCsvToMap(defaultValue)
112118
}
113119
return parseCsvToMap(valuesStr)
@@ -116,12 +122,12 @@ func GetCsvEnvVariable(key, defaultValue string) map[string]bool {
116122
func GetMillisecondsEnvVariable(key string, defaultValue time.Duration) time.Duration {
117123
valueStr := os.Getenv(key)
118124
if valueStr == "" {
119-
log.Printf("Environment variable %s is not set, using default value: %d", key, defaultValue.Milliseconds())
125+
Logger.Printf("Environment variable %s is not set, using default value: %d", key, defaultValue.Milliseconds())
120126
return defaultValue
121127
}
122128
value, err := strconv.Atoi(valueStr)
123129
if err != nil {
124-
log.Printf("Invalid environment variable %s: %v, using default value: %d", key, err, defaultValue.Milliseconds())
130+
Logger.Printf("Invalid environment variable %s: %v, using default value: %d", key, err, defaultValue.Milliseconds())
125131
return defaultValue
126132
}
127133
return time.Duration(value) * time.Millisecond

domain-proxy/domain_proxy_client.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package main
22

33
import (
44
"fmt"
5-
"log"
65
"net"
76
"os"
87
"os/signal"
@@ -41,34 +40,34 @@ func NewDomainProxyClient(domainSocket string, serverHttpPort, byteBufferSize in
4140
}
4241

4342
func (dpc *DomainProxyClient) Start() {
44-
log.Println("Starting domain proxy client...")
45-
log.Printf("Byte buffer size %d", dpc.byteBufferSize) // TODO Remove
43+
Logger.Println("Starting domain proxy client...")
44+
Logger.Printf("Byte buffer size %d", dpc.byteBufferSize) // TODO Remove
4645
var err error
4746
dpc.listener, err = net.Listen("tcp", fmt.Sprintf("%s:%d", Localhost, dpc.serverHttpPort))
4847
if err != nil {
49-
log.Fatalf("Failed to start HTTP server: %v", err)
48+
Logger.Fatalf("Failed to start HTTP server: %v", err)
5049
}
5150
dpc.executor.Add(1)
5251
go dpc.startClient()
5352
}
5453

5554
func (dpc *DomainProxyClient) startClient() {
5655
defer dpc.executor.Done()
57-
log.Println("HTTP server listening on port", dpc.serverHttpPort)
56+
Logger.Println("HTTP server listening on port", dpc.serverHttpPort)
5857
for {
5958
serverConn, err := dpc.listener.Accept()
6059
if err != nil {
6160
select {
6261
case <-dpc.shutdownChan:
6362
return
6463
default:
65-
log.Printf("Failed to accept connection: %v", err)
64+
Logger.Printf("Failed to accept connection: %v", err)
6665
continue
6766
}
6867
}
6968
domainConn, err := net.DialTimeout("unix", dpc.domainSocket, dpc.connectionTimeout)
7069
if err != nil {
71-
log.Printf("Failed to connect to domain socket: %v", err)
70+
Logger.Printf("Failed to connect to domain socket: %v", err)
7271
serverConn.Close()
7372
continue
7473
}
@@ -78,10 +77,10 @@ func (dpc *DomainProxyClient) startClient() {
7877
}
7978

8079
func (dpc *DomainProxyClient) Stop() {
81-
log.Println("Shutting down domain proxy client...")
80+
Logger.Println("Shutting down domain proxy client...")
8281
close(dpc.shutdownChan)
8382
if err := dpc.listener.Close(); err != nil {
84-
log.Printf("Error closing listener: %v", err)
83+
Logger.Printf("Error closing listener: %v", err)
8584
}
8685
dpc.executor.Wait()
8786
}
@@ -91,6 +90,7 @@ func GetServerHttpPort() int {
9190
}
9291

9392
func main() {
93+
InitLogger("Domain Proxy Client")
9494
client := NewDomainProxyClient(GetDomainSocket(), GetServerHttpPort(), GetByteBufferSize(), GetConnectionTimeout(), GetIdleTimeout())
9595
client.Start()
9696
sigs := make(chan os.Signal, 1)

domain-proxy/domain_proxy_server.go

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"bufio"
55
"fmt"
66
"io"
7-
"log"
87
"net"
98
"net/http"
109
"os"
@@ -52,9 +51,9 @@ func NewDomainProxyServer(domainSocket string, byteBufferSize int, connectionTim
5251
}
5352

5453
func (dps *DomainProxyServer) Start() {
55-
log.Println("Starting domain proxy server...")
56-
log.Printf("Byte buffer size %d", dps.byteBufferSize) // TODO Remove
57-
log.Printf("Proxy target whitelist: %v", dps.proxyTargetWhitelist) // TODO Remove
54+
Logger.Println("Starting domain proxy server...")
55+
Logger.Printf("Byte buffer size %d", dps.byteBufferSize) // TODO Remove
56+
Logger.Printf("Proxy target whitelist: %v", dps.proxyTargetWhitelist) // TODO Remove
5857
dps.executor.Add(1)
5958
go dps.startServer()
6059
}
@@ -63,23 +62,23 @@ func (dps *DomainProxyServer) startServer() {
6362
defer dps.executor.Done()
6463
if _, err := os.Stat(dps.domainSocket); err == nil {
6564
if err := os.Remove(dps.domainSocket); err != nil {
66-
log.Fatalf("Failed to delete existing domain socket: %v", err)
65+
Logger.Fatalf("Failed to delete existing domain socket: %v", err)
6766
}
6867
}
6968
var err error
7069
dps.listener, err = net.Listen("unix", dps.domainSocket)
7170
if err != nil {
72-
log.Fatalf("Failed to start domain socket listener: %v", err)
71+
Logger.Fatalf("Failed to start domain socket listener: %v", err)
7372
}
74-
log.Println("Domain socket server listening on", dps.domainSocket)
73+
Logger.Println("Domain socket server listening on", dps.domainSocket)
7574
for {
7675
conn, err := dps.listener.Accept()
7776
if err != nil {
7877
select {
7978
case <-dps.shutdownChan:
8079
return
8180
default:
82-
log.Printf("Failed to accept connection: %v", err)
81+
Logger.Printf("Failed to accept connection: %v", err)
8382
continue
8483
}
8584
}
@@ -95,7 +94,7 @@ func (dps *DomainProxyServer) handleRequest(conn net.Conn) {
9594
reader := bufio.NewReader(conn)
9695
req, err := http.ReadRequest(reader)
9796
if err != nil {
98-
log.Printf("Failed to read request: %v", err)
97+
Logger.Printf("Failed to read request: %v", err)
9998
conn.Close()
10099
return
101100
}
@@ -109,13 +108,13 @@ func (dps *DomainProxyServer) handleRequest(conn net.Conn) {
109108
}
110109

111110
func (dps *DomainProxyServer) handleHttpRequest(w http.ResponseWriter, r *http.Request) {
112-
log.Printf("Handling HTTP %s Request", r.Method)
111+
Logger.Printf("Handling HTTP %s Request", r.Method)
113112
requestNo := dps.counter
114-
log.Printf("Request %d", requestNo)
113+
Logger.Printf("Request %d", requestNo)
115114
hostPort := strings.Split(r.Host, ":")
116115
targetHost := hostPort[0]
117116
if dps.isTargetWhitelisted(targetHost, w) {
118-
log.Printf("Target URI %s", r.RequestURI)
117+
Logger.Printf("Target URI %s", r.RequestURI)
119118
startTime := time.Now()
120119
client := &http.Client{
121120
Transport: &http.Transport{
@@ -141,17 +140,17 @@ func (dps *DomainProxyServer) handleHttpRequest(w http.ResponseWriter, r *http.R
141140
}
142141
w.WriteHeader(resp.StatusCode)
143142
if _, err = io.CopyBuffer(w, resp.Body, make([]byte, dps.byteBufferSize)); err != nil {
144-
log.Printf("Error copying response body: %v", err)
143+
Logger.Printf("Error copying response body: %v", err)
145144
}
146-
log.Printf("Request %d took %d ms", requestNo, time.Since(startTime).Milliseconds())
145+
Logger.Printf("Request %d took %d ms", requestNo, time.Since(startTime).Milliseconds())
147146
// TODO log bytes written/read
148147
}
149148
}
150149

151150
func (dps *DomainProxyServer) handleHttpsRequest(sourceConn net.Conn, w http.ResponseWriter, r *http.Request) {
152-
log.Printf("Handling HTTPS %s Request", r.Method)
151+
Logger.Printf("Handling HTTPS %s Request", r.Method)
153152
requestNo := dps.counter
154-
log.Printf("Request %d", requestNo)
153+
Logger.Printf("Request %d", requestNo)
155154
hostPort := strings.Split(r.Host, ":")
156155
targetHost := hostPort[0]
157156
targetPort := HttpsPort
@@ -161,7 +160,7 @@ func (dps *DomainProxyServer) handleHttpsRequest(sourceConn net.Conn, w http.Res
161160
}
162161
}
163162
if dps.isTargetWhitelisted(targetHost, w) {
164-
log.Printf("Target URI %s", r.RequestURI)
163+
Logger.Printf("Target URI %s", r.RequestURI)
165164
startTime := time.Now()
166165
targetConn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", targetHost, targetPort), dps.connectionTimeout)
167166
if err != nil {
@@ -178,36 +177,36 @@ func (dps *DomainProxyServer) handleHttpsRequest(sourceConn net.Conn, w http.Res
178177
dps.executor.Add(1)
179178
go func() {
180179
BiDirectionalTransfer(sourceConn, targetConn, dps.byteBufferSize, dps.idleTimeout, dps.executor)
181-
log.Printf("Request %d took %d ms", requestNo, (time.Since(startTime) - dps.idleTimeout).Milliseconds())
180+
Logger.Printf("Request %d took %d ms", requestNo, (time.Since(startTime) - dps.idleTimeout).Milliseconds())
182181
}()
183182
}
184183
}
185184

186185
func (dps *DomainProxyServer) isTargetWhitelisted(targetHost string, w http.ResponseWriter) bool {
187-
log.Printf("Target host %s", targetHost)
186+
Logger.Printf("Target host %s", targetHost)
188187
if !dps.proxyTargetWhitelist[targetHost] && !dps.nonProxyHosts[targetHost] {
189-
log.Println("Target host is not whitelisted or a non-proxy host")
188+
Logger.Println("Target host is not whitelisted or a non-proxy host")
190189
http.Error(w, "The requested resource was not found.", http.StatusNotFound)
191190
return false
192191
}
193192
return true
194193
}
195194

196195
func (dps *DomainProxyServer) handleErrorResponse(w http.ResponseWriter, err error, message string) {
197-
log.Printf("%s: %v", message, err)
196+
Logger.Printf("%s: %v", message, err)
198197
http.Error(w, message+": "+err.Error(), http.StatusBadGateway)
199198
}
200199

201200
func (dps *DomainProxyServer) Stop() {
202-
log.Println("Shutting down domain proxy server...")
201+
Logger.Println("Shutting down domain proxy server...")
203202
close(dps.shutdownChan)
204203
if err := dps.listener.Close(); err != nil {
205-
log.Printf("Error closing listener: %v", err)
204+
Logger.Printf("Error closing listener: %v", err)
206205
}
207206
dps.executor.Wait()
208207
if _, err := os.Stat(dps.domainSocket); err == nil {
209208
if err := os.Remove(dps.domainSocket); err != nil {
210-
log.Printf("Error deleting domain socket: %v", err)
209+
Logger.Printf("Error deleting domain socket: %v", err)
211210
}
212211
}
213212
}
@@ -239,11 +238,12 @@ func (rw *responseWriter) WriteHeader(statusCode int) {
239238
}
240239
headers += "\r\n"
241240
if _, err := rw.conn.Write([]byte(headers)); err != nil {
242-
log.Printf("Error writing headers to connection: %v", err)
241+
Logger.Printf("Error writing headers to connection: %v", err)
243242
}
244243
}
245244

246245
func main() {
246+
InitLogger("Domain Proxy Server")
247247
server := NewDomainProxyServer(GetDomainSocket(),
248248
GetByteBufferSize(),
249249
GetConnectionTimeout(),

0 commit comments

Comments
 (0)