Browse Source

move to channel-based logging

tags/v0.1.0
Jeremy Latt 10 years ago
parent
commit
e15f47c766
9 changed files with 80 additions and 71 deletions
  1. 2
    6
      ergonomadic.conf
  2. 1
    6
      ergonomadic.go
  3. 1
    4
      irc/client.go
  4. 6
    18
      irc/client_lookup_set.go
  5. 1
    7
      irc/config.go
  6. 0
    6
      irc/constants.go
  7. 60
    0
      irc/logging.go
  8. 4
    12
      irc/server.go
  9. 5
    12
      irc/socket.go

+ 2
- 6
ergonomadic.conf View File

3
 database = "ergonomadic.db" ; path relative to this file
3
 database = "ergonomadic.db" ; path relative to this file
4
 listen = "localhost:6667" ; see `net.Listen` for examples
4
 listen = "localhost:6667" ; see `net.Listen` for examples
5
 listen = "[::1]:6667" ; multiple `listen`s are allowed.
5
 listen = "[::1]:6667" ; multiple `listen`s are allowed.
6
+log = "debug" ; error, warn, info, debug
6
 motd = "motd.txt" ; path relative to this file
7
 motd = "motd.txt" ; path relative to this file
7
 password = "JDJhJDA0JHJzVFFlNXdOUXNhLmtkSGRUQVVEVHVYWXRKUmdNQ3FKVTRrczRSMTlSWGRPZHRSMVRzQmtt" ; 'test'
8
 password = "JDJhJDA0JHJzVFFlNXdOUXNhLmtkSGRUQVVEVHVYWXRKUmdNQ3FKVTRrczRSMTlSWGRPZHRSMVRzQmtt" ; 'test'
9
+log = "debug"
8
 
10
 
9
 [operator "root"]
11
 [operator "root"]
10
 password = "JDJhJDA0JEhkcm10UlNFRkRXb25iOHZuSDVLZXVBWlpyY0xyNkQ4dlBVc1VMWVk1LlFjWFpQbGxZNUtl" ; 'toor'
12
 password = "JDJhJDA0JEhkcm10UlNFRkRXb25iOHZuSDVLZXVBWlpyY0xyNkQ4dlBVc1VMWVk1LlFjWFpQbGxZNUtl" ; 'toor'
11
-
12
-[debug]
13
-net = true
14
-client = false
15
-channel = false
16
-server = false

+ 1
- 6
ergonomadic.go View File

46
 		return
46
 		return
47
 	}
47
 	}
48
 
48
 
49
-	// TODO move to data structures
50
-	irc.DEBUG_NET = config.Debug.Net
51
-	irc.DEBUG_CLIENT = config.Debug.Client
52
-	irc.DEBUG_CHANNEL = config.Debug.Channel
53
-	irc.DEBUG_SERVER = config.Debug.Server
54
-
49
+	irc.Log.SetLevel(config.Server.Log)
55
 	server := irc.NewServer(config)
50
 	server := irc.NewServer(config)
56
 	log.Println(irc.SEM_VER, "running")
51
 	log.Println(irc.SEM_VER, "running")
57
 	defer log.Println(irc.SEM_VER, "exiting")
52
 	defer log.Println(irc.SEM_VER, "exiting")

+ 1
- 4
irc/client.go View File

2
 
2
 
3
 import (
3
 import (
4
 	"fmt"
4
 	"fmt"
5
-	"log"
6
 	"net"
5
 	"net"
7
 	"time"
6
 	"time"
8
 )
7
 )
149
 
148
 
150
 	client.socket.Close()
149
 	client.socket.Close()
151
 
150
 
152
-	if DEBUG_CLIENT {
153
-		log.Printf("%s: destroyed", client)
154
-	}
151
+	Log.debug.Printf("%s: destroyed", client)
155
 }
152
 }
156
 
153
 
157
 func (client *Client) IdleTime() time.Duration {
154
 func (client *Client) IdleTime() time.Duration {

+ 6
- 18
irc/client_lookup_set.go View File

88
 		`SELECT nickname FROM client WHERE userhost LIKE ? ESCAPE '\'`,
88
 		`SELECT nickname FROM client WHERE userhost LIKE ? ESCAPE '\'`,
89
 		QuoteLike(userhost))
89
 		QuoteLike(userhost))
90
 	if err != nil {
90
 	if err != nil {
91
-		if DEBUG_SERVER {
92
-			log.Println("ClientLookupSet.FindAll.Query:", err)
93
-		}
91
+		Log.error.Println("ClientLookupSet.FindAll.Query:", err)
94
 		return
92
 		return
95
 	}
93
 	}
96
 	for rows.Next() {
94
 	for rows.Next() {
97
 		var nickname string
95
 		var nickname string
98
 		err := rows.Scan(&nickname)
96
 		err := rows.Scan(&nickname)
99
 		if err != nil {
97
 		if err != nil {
100
-			if DEBUG_SERVER {
101
-				log.Println("ClientLookupSet.FindAll.Scan:", err)
102
-			}
98
+			Log.error.Println("ClientLookupSet.FindAll.Scan:", err)
103
 			return
99
 			return
104
 		}
100
 		}
105
 		client := clients.Get(nickname)
101
 		client := clients.Get(nickname)
106
 		if client == nil {
102
 		if client == nil {
107
-			if DEBUG_SERVER {
108
-				log.Println("ClientLookupSet.FindAll: missing client:", nickname)
109
-			}
103
+			Log.error.Println("ClientLookupSet.FindAll: missing client:", nickname)
110
 			continue
104
 			continue
111
 		}
105
 		}
112
 		set.Add(client)
106
 		set.Add(client)
122
 	var nickname string
116
 	var nickname string
123
 	err := row.Scan(&nickname)
117
 	err := row.Scan(&nickname)
124
 	if err != nil {
118
 	if err != nil {
125
-		if DEBUG_SERVER {
126
-			log.Println("ClientLookupSet.Find:", err)
127
-		}
119
+		Log.error.Println("ClientLookupSet.Find:", err)
128
 		return nil
120
 		return nil
129
 	}
121
 	}
130
 	return clients.Get(nickname)
122
 	return clients.Get(nickname)
163
 	_, err := db.db.Exec(`INSERT INTO client (nickname, userhost) VALUES (?, ?)`,
155
 	_, err := db.db.Exec(`INSERT INTO client (nickname, userhost) VALUES (?, ?)`,
164
 		client.Nick(), client.UserHost())
156
 		client.Nick(), client.UserHost())
165
 	if err != nil {
157
 	if err != nil {
166
-		if DEBUG_SERVER {
167
-			log.Println("ClientDB.Add:", err)
168
-		}
158
+		Log.error.Println("ClientDB.Add:", err)
169
 	}
159
 	}
170
 }
160
 }
171
 
161
 
173
 	_, err := db.db.Exec(`DELETE FROM client WHERE nickname = ?`,
163
 	_, err := db.db.Exec(`DELETE FROM client WHERE nickname = ?`,
174
 		client.Nick())
164
 		client.Nick())
175
 	if err != nil {
165
 	if err != nil {
176
-		if DEBUG_SERVER {
177
-			log.Println("ClientDB.Remove:", err)
178
-		}
166
+		Log.error.Println("ClientDB.Remove:", err)
179
 	}
167
 	}
180
 }
168
 }
181
 
169
 

+ 1
- 7
irc/config.go View File

23
 		PassConfig
23
 		PassConfig
24
 		Database string
24
 		Database string
25
 		Listen   []string
25
 		Listen   []string
26
+		Log      string
26
 		MOTD     string
27
 		MOTD     string
27
 		Name     string
28
 		Name     string
28
 	}
29
 	}
29
 
30
 
30
 	Operator map[string]*PassConfig
31
 	Operator map[string]*PassConfig
31
-
32
-	Debug struct {
33
-		Net     bool
34
-		Client  bool
35
-		Channel bool
36
-		Server  bool
37
-	}
38
 }
32
 }
39
 
33
 
40
 func (conf *Config) Operators() map[string][]byte {
34
 func (conf *Config) Operators() map[string][]byte {

+ 0
- 6
irc/constants.go View File

7
 )
7
 )
8
 
8
 
9
 var (
9
 var (
10
-	// debugging flags
11
-	DEBUG_NET     = false
12
-	DEBUG_CLIENT  = false
13
-	DEBUG_CHANNEL = false
14
-	DEBUG_SERVER  = false
15
-
16
 	// errors
10
 	// errors
17
 	ErrAlreadyDestroyed = errors.New("already destroyed")
11
 	ErrAlreadyDestroyed = errors.New("already destroyed")
18
 
12
 

+ 60
- 0
irc/logging.go View File

1
+package irc
2
+
3
+import (
4
+	"io"
5
+	"log"
6
+	"os"
7
+)
8
+
9
+type Logging struct {
10
+	debug *log.Logger
11
+	info  *log.Logger
12
+	warn  *log.Logger
13
+	error *log.Logger
14
+}
15
+
16
+var (
17
+	levels = map[string]uint8{
18
+		"debug": 4,
19
+		"info":  3,
20
+		"warn":  2,
21
+		"error": 1,
22
+	}
23
+	devNull io.Writer
24
+)
25
+
26
+func init() {
27
+	var err error
28
+	devNull, err = os.Open(os.DevNull)
29
+	if err != nil {
30
+		log.Fatal(err)
31
+	}
32
+}
33
+
34
+func NewLogger(on bool) *log.Logger {
35
+	return log.New(output(on), "", log.LstdFlags)
36
+}
37
+
38
+func output(on bool) io.Writer {
39
+	if on {
40
+		return os.Stdout
41
+	}
42
+	return devNull
43
+}
44
+
45
+func (logging *Logging) SetLevel(level string) {
46
+	logging.debug = NewLogger(levels[level] >= levels["debug"])
47
+	logging.info = NewLogger(levels[level] >= levels["info"])
48
+	logging.warn = NewLogger(levels[level] >= levels["warn"])
49
+	logging.error = NewLogger(levels[level] >= levels["error"])
50
+}
51
+
52
+func NewLogging(level string) *Logging {
53
+	logging := &Logging{}
54
+	logging.SetLevel(level)
55
+	return logging
56
+}
57
+
58
+var (
59
+	Log = NewLogging("warn")
60
+)

+ 4
- 12
irc/server.go View File

109
 
109
 
110
 func (server *Server) processCommand(cmd Command) {
110
 func (server *Server) processCommand(cmd Command) {
111
 	client := cmd.Client()
111
 	client := cmd.Client()
112
-	if DEBUG_SERVER {
113
-		log.Printf("%s → %s %s", client, server, cmd)
114
-	}
112
+	Log.debug.Printf("%s → %s %s", client, server, cmd)
115
 
113
 
116
 	switch client.phase {
114
 	switch client.phase {
117
 	case Registration:
115
 	case Registration:
180
 		log.Fatal(s, "listen error: ", err)
178
 		log.Fatal(s, "listen error: ", err)
181
 	}
179
 	}
182
 
180
 
183
-	if DEBUG_SERVER {
184
-		log.Printf("%s listening on %s", s, addr)
185
-	}
181
+	Log.info.Printf("%s listening on %s", s, addr)
186
 
182
 
187
 	for {
183
 	for {
188
 		conn, err := listener.Accept()
184
 		conn, err := listener.Accept()
189
 		if err != nil {
185
 		if err != nil {
190
-			if DEBUG_SERVER {
191
-				log.Printf("%s accept error: %s", s, err)
192
-			}
186
+			Log.error.Printf("%s accept error: %s", s, err)
193
 			continue
187
 			continue
194
 		}
188
 		}
195
-		if DEBUG_SERVER {
196
-			log.Printf("%s accept: %s", s, conn.RemoteAddr())
197
-		}
189
+		Log.debug.Printf("%s accept: %s", s, conn.RemoteAddr())
198
 
190
 
199
 		s.newConns <- conn
191
 		s.newConns <- conn
200
 	}
192
 	}

+ 5
- 12
irc/socket.go View File

3
 import (
3
 import (
4
 	"bufio"
4
 	"bufio"
5
 	"io"
5
 	"io"
6
-	"log"
7
 	"net"
6
 	"net"
8
 	"strings"
7
 	"strings"
9
 )
8
 )
38
 
37
 
39
 func (socket *Socket) Close() {
38
 func (socket *Socket) Close() {
40
 	socket.conn.Close()
39
 	socket.conn.Close()
41
-	if DEBUG_NET {
42
-		log.Printf("%s closed", socket)
43
-	}
40
+	Log.debug.Printf("%s closed", socket)
44
 }
41
 }
45
 
42
 
46
 func (socket *Socket) readLines(commands chan<- Command) {
43
 func (socket *Socket) readLines(commands chan<- Command) {
57
 		if len(line) == 0 {
54
 		if len(line) == 0 {
58
 			continue
55
 			continue
59
 		}
56
 		}
60
-		if DEBUG_NET {
61
-			log.Printf("%s → %s", socket, line)
62
-		}
57
+		Log.debug.Printf("%s → %s", socket, line)
63
 
58
 
64
 		msg, err := ParseCommand(line)
59
 		msg, err := ParseCommand(line)
65
 		if err != nil {
60
 		if err != nil {
87
 		return
82
 		return
88
 	}
83
 	}
89
 
84
 
90
-	if DEBUG_NET {
91
-		log.Printf("%s ← %s", socket, line)
92
-	}
85
+	Log.debug.Printf("%s ← %s", socket, line)
93
 	return
86
 	return
94
 }
87
 }
95
 
88
 
96
 func (socket *Socket) isError(err error, dir rune) bool {
89
 func (socket *Socket) isError(err error, dir rune) bool {
97
 	if err != nil {
90
 	if err != nil {
98
-		if DEBUG_NET && (err != io.EOF) {
99
-			log.Printf("%s %c error: %s", socket, dir, err)
91
+		if err != io.EOF {
92
+			Log.debug.Printf("%s %c error: %s", socket, dir, err)
100
 		}
93
 		}
101
 		return true
94
 		return true
102
 	}
95
 	}

Loading…
Cancel
Save