mirror of git://gcc.gnu.org/git/gcc.git
log/syslog: Restore interface to make this work on Solaris again.
From-SVN: r201188
This commit is contained in:
parent
dd7a40e14c
commit
9d824f6c8f
|
|
@ -88,6 +88,15 @@ type Writer struct {
|
||||||
raddr string
|
raddr string
|
||||||
|
|
||||||
mu sync.Mutex // guards conn
|
mu sync.Mutex // guards conn
|
||||||
|
conn serverConn
|
||||||
|
}
|
||||||
|
|
||||||
|
type serverConn interface {
|
||||||
|
writeString(p Priority, hostname, tag, s, nl string) error
|
||||||
|
close() error
|
||||||
|
}
|
||||||
|
|
||||||
|
type netConn struct {
|
||||||
conn net.Conn
|
conn net.Conn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,7 +144,7 @@ func Dial(network, raddr string, priority Priority, tag string) (*Writer, error)
|
||||||
func (w *Writer) connect() (err error) {
|
func (w *Writer) connect() (err error) {
|
||||||
if w.conn != nil {
|
if w.conn != nil {
|
||||||
// ignore err from close, it makes sense to continue anyway
|
// ignore err from close, it makes sense to continue anyway
|
||||||
w.conn.Close()
|
w.conn.close()
|
||||||
w.conn = nil
|
w.conn = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -148,7 +157,7 @@ func (w *Writer) connect() (err error) {
|
||||||
var c net.Conn
|
var c net.Conn
|
||||||
c, err = net.Dial(w.network, w.raddr)
|
c, err = net.Dial(w.network, w.raddr)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
w.conn = c
|
w.conn = netConn{c}
|
||||||
if w.hostname == "" {
|
if w.hostname == "" {
|
||||||
w.hostname = c.LocalAddr().String()
|
w.hostname = c.LocalAddr().String()
|
||||||
}
|
}
|
||||||
|
|
@ -168,7 +177,7 @@ func (w *Writer) Close() error {
|
||||||
defer w.mu.Unlock()
|
defer w.mu.Unlock()
|
||||||
|
|
||||||
if w.conn != nil {
|
if w.conn != nil {
|
||||||
err := w.conn.Close()
|
err := w.conn.close()
|
||||||
w.conn = nil
|
w.conn = nil
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -257,13 +266,22 @@ func (w *Writer) write(p Priority, msg string) (int, error) {
|
||||||
nl = "\n"
|
nl = "\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
timestamp := time.Now().Format(time.RFC3339)
|
w.conn.writeString(p, w.hostname, w.tag, msg, nl)
|
||||||
fmt.Fprintf(w.conn, "<%d>%s %s %s[%d]: %s%s",
|
|
||||||
p, timestamp, w.hostname,
|
|
||||||
w.tag, os.Getpid(), msg, nl)
|
|
||||||
return len(msg), nil
|
return len(msg), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n netConn) writeString(p Priority, hostname, tag, msg, nl string) error {
|
||||||
|
timestamp := time.Now().Format(time.RFC3339)
|
||||||
|
_, err := fmt.Fprintf(n.conn, "<%d>%s %s %s[%d]: %s%s",
|
||||||
|
p, timestamp, hostname,
|
||||||
|
tag, os.Getpid(), msg, nl)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n netConn) close() error {
|
||||||
|
return n.conn.Close()
|
||||||
|
}
|
||||||
|
|
||||||
// NewLogger creates a log.Logger whose output is written to
|
// NewLogger creates a log.Logger whose output is written to
|
||||||
// the system log service with the specified priority. The logFlag
|
// the system log service with the specified priority. The logFlag
|
||||||
// argument is the flag set passed through to log.New to create
|
// argument is the flag set passed through to log.New to create
|
||||||
|
|
|
||||||
|
|
@ -23,17 +23,17 @@ type libcConn int
|
||||||
|
|
||||||
func syslog_c(int, *byte)
|
func syslog_c(int, *byte)
|
||||||
|
|
||||||
func (libcConn) writeString(p Priority, hostname, tag, msg string) (int, error) {
|
func (libcConn) writeString(p Priority, hostname, tag, msg, nl string) error {
|
||||||
timestamp := time.Now().Format(time.RFC3339)
|
timestamp := time.Now().Format(time.RFC3339)
|
||||||
log := fmt.Sprintf("%s %s %s[%d]: %s", timestamp, hostname, tag, os.Getpid(), msg)
|
log := fmt.Sprintf("%s %s %s[%d]: %s%s", timestamp, hostname, tag, os.Getpid(), msg, nl)
|
||||||
buf, err := syscall.BytePtrFromString(log)
|
buf, err := syscall.BytePtrFromString(log)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return err
|
||||||
}
|
}
|
||||||
syscall.Entersyscall()
|
syscall.Entersyscall()
|
||||||
syslog_c(int(p), buf)
|
syslog_c(int(p), buf)
|
||||||
syscall.Exitsyscall()
|
syscall.Exitsyscall()
|
||||||
return len(msg), nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (libcConn) close() error {
|
func (libcConn) close() error {
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ import (
|
||||||
// unixSyslog opens a connection to the syslog daemon running on the
|
// unixSyslog opens a connection to the syslog daemon running on the
|
||||||
// local machine using a Unix domain socket.
|
// local machine using a Unix domain socket.
|
||||||
|
|
||||||
func unixSyslog() (conn net.Conn, err error) {
|
func unixSyslog() (conn serverConn, err error) {
|
||||||
logTypes := []string{"unixgram", "unix"}
|
logTypes := []string{"unixgram", "unix"}
|
||||||
logPaths := []string{"/dev/log", "/var/run/syslog"}
|
logPaths := []string{"/dev/log", "/var/run/syslog"}
|
||||||
for _, network := range logTypes {
|
for _, network := range logTypes {
|
||||||
|
|
@ -23,7 +23,7 @@ func unixSyslog() (conn net.Conn, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
return conn, nil
|
return netConn{conn}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue