hunk.code_window:     Company: "company",
       CompanyPlural: "companies"
   }
  
hunk.labels: keep replace replace
hunk.after_edit:     CompanyPlural: "companies",
       CompanyPossessive: "company's"
   };
hunk.file_path: web/static/config/config.js
hunk.type: replace
file: // Copyright (C) 2010, Kyle Lemons <kyle@kylelemons.net>.  All rights reserved.
  
  package log4go
  
  import (
  	"encoding/json"
  	"fmt"
  	"net"
  	"os"
  )
  
  // This log writer sends output to a socket
  type SocketLogWriter chan *LogRecord
  
  // This is the SocketLogWriter's output method
  func (w SocketLogWriter) LogWrite(rec *LogRecord) {
  	w <- rec
  }
  
  func (w SocketLogWriter) Close() {
  	close(w)
  }
  
  func NewSocketLogWriter(proto, hostport string) SocketLogWriter {
  	sock, err := net.Dial(proto, hostport)
  	if err != nil {
  		fmt.Fprintf(os.Stderr, "NewSocketLogWriter(%q): %s\n", hostport, err)
  		return nil
  	}
  
  	w := SocketLogWriter(make(chan *LogRecord, LogBufferLength))
  
  	go func() {
  		defer func() {
  			if sock != nil && proto == "tcp" {
  				sock.Close()
  			}
  		}()
  
  		for rec := range w {
  			// Marshall into JSON
  			js, err := json.Marshal(rec)
  			if err != nil {
  				fmt.Fprint(os.Stderr, "SocketLogWriter(%q): %s", hostport, err)
  				return
  			}
  
  			_, err = sock.Write(js)
  			if err != nil {
  				fmt.Fprint(os.Stderr, "SocketLogWriter(%q): %s", hostport, err)
  				return
  			}
  		}
  	}()
  
  	return w
  }
  