Commits · ampify

tav  ·  b523946b0b301ddcfcca3797483f681eb5c7c338  ·  ampify  ·  github 1311796487

Added logging.Wait and limited quote to file logger.

Changes

src/amp/logging/logging.go
......@@ -45,6 +45,12 @@ var (
4545
 	ConsoleFilters = make([]Filter, 0)
4646
 )
4747
 
48
+var (
49
+	checker  = make(chan int, 1)
50
+	waiter   = make(chan int, 1)
51
+	waitable = false
52
+)
53
+
4854
 type Filter func(record *Record) (write bool, data []interface{})
4955
 
5056
 type ConsoleLogger struct {
......@@ -123,7 +129,8 @@ func (logger *FileLogger) log() {
123129
 			}
124130
 			fmt.Fprintf(logger.file, "%v", Now)
125131
 			for i := 0; i < argLength; i++ {
126
-				fmt.Fprintf(logger.file, "\xfe%v", record.Items[i])
132
+				message := strconv.Quote(fmt.Sprint(record.Items[i]))
133
+				fmt.Fprintf(logger.file, "\xfe%s", message[0:len(message)-1])
127134
 			}
128135
 			logger.file.Write(endOfLogRecord)
129136
 		}
......@@ -140,9 +147,18 @@ func (logger *ConsoleLogger) log() {
140147
 	var write bool
141148
 
142149
 	for {
143
-		record = <-logger.receiver
144
-		items = record.Items
145
-		write = true
150
+		select {
151
+		case record = <-logger.receiver:
152
+			items = record.Items
153
+			write = true
154
+		case <-checker:
155
+			if len(logger.receiver) > 0 {
156
+				checker <- 1
157
+				continue
158
+			}
159
+			waiter <- 1
160
+			continue
161
+		}
146162
 		for _, filter := range ConsoleFilters {
147163
 			write, data := filter(record)
148164
 			if !write {
......@@ -183,11 +199,7 @@ func Info(message string, v ...interface{}) {
183199
 	if len(v) > 0 {
184200
 		message = fmt.Sprintf(message, v...)
185201
 	}
186
-	message = strconv.Quote(message)
187
-	items := make([]interface{}, 2)
188
-	items[0] = "m"
189
-	items[1] = message[1 : len(message)-1]
190
-	record := &Record{false, items}
202
+	record := &Record{false, []interface{}{"m", message}}
191203
 	for _, receiver := range InfoReceivers {
192204
 		receiver <- record
193205
 	}
......@@ -204,11 +216,7 @@ func Error(message string, v ...interface{}) {
204216
 	if len(v) > 0 {
205217
 		message = fmt.Sprintf(message, v...)
206218
 	}
207
-	message = strconv.Quote(message)
208
-	items := make([]interface{}, 2)
209
-	items[0] = "m"
210
-	items[1] = message[1 : len(message)-1]
211
-	record := &Record{true, items}
219
+	record := &Record{true, []interface{}{"m", message}}
212220
 	for _, receiver := range ErrorReceivers {
213221
 		receiver <- record
214222
 	}
......@@ -258,12 +266,11 @@ func FixUpLog(filename string) (pointer int) {
258266
 }
259267
 
260268
 func AddFileLogger(name string, directory string, rotate int, logType int) (logger *FileLogger, err os.Error) {
261
-	receiver := make(chan *Record, 100)
262269
 	logger = &FileLogger{
263270
 		name:      name,
264271
 		directory: directory,
265272
 		rotate:    rotate,
266
-		receiver:  receiver,
273
+		receiver:  make(chan *Record, 100),
267274
 	}
268275
 	filename := logger.GetFilename(UTC)
269276
 	pointer := FixUpLog(filename)
......@@ -282,9 +289,9 @@ func AddFileLogger(name string, directory string, rotate int, logType int) (logg
282289
 }
283290
 
284291
 func AddConsoleLogger() {
285
-	stdReceiver := make(chan *Record, 100)
292
+	waitable = true
286293
 	console := &ConsoleLogger{
287
-		receiver: stdReceiver,
294
+		receiver: make(chan *Record, 100),
288295
 	}
289296
 	go console.log()
290297
 	AddReceiver(console.receiver, MixedLog)
......@@ -303,6 +310,13 @@ func AddConsoleFilter(filter Filter) {
303310
 	ConsoleFilters = append(ConsoleFilters, filter)
304311
 }
305312
 
313
+func Wait() {
314
+	if waitable {
315
+		checker <- 1
316
+		<-waiter
317
+	}
318
+}
319
+
306320
 func init() {
307321
 
308322
 	go func() {