123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package srslog
- import (
- "crypto/tls"
- "crypto/x509"
- "io/ioutil"
- "log"
- "os"
- )
- // This interface allows us to work with both local and network connections,
- // and enables Solaris support (see syslog_unix.go).
- type serverConn interface {
- writeString(framer Framer, formatter Formatter, p Priority, hostname, tag, s string) error
- close() error
- }
- // New establishes a new connection to the system log daemon. Each
- // write to the returned Writer sends a log message with the given
- // priority and prefix.
- func New(priority Priority, tag string) (w *Writer, err error) {
- return Dial("", "", priority, tag)
- }
- // Dial establishes a connection to a log daemon by connecting to
- // address raddr on the specified network. Each write to the returned
- // Writer sends a log message with the given facility, severity and
- // tag.
- // If network is empty, Dial will connect to the local syslog server.
- func Dial(network, raddr string, priority Priority, tag string) (*Writer, error) {
- return DialWithTLSConfig(network, raddr, priority, tag, nil)
- }
- // DialWithTLSCertPath establishes a secure connection to a log daemon by connecting to
- // address raddr on the specified network. It uses certPath to load TLS certificates and configure
- // the secure connection.
- func DialWithTLSCertPath(network, raddr string, priority Priority, tag, certPath string) (*Writer, error) {
- serverCert, err := ioutil.ReadFile(certPath)
- if err != nil {
- return nil, err
- }
- return DialWithTLSCert(network, raddr, priority, tag, serverCert)
- }
- // DialWIthTLSCert establishes a secure connection to a log daemon by connecting to
- // address raddr on the specified network. It uses serverCert to load a TLS certificate
- // and configure the secure connection.
- func DialWithTLSCert(network, raddr string, priority Priority, tag string, serverCert []byte) (*Writer, error) {
- pool := x509.NewCertPool()
- pool.AppendCertsFromPEM(serverCert)
- config := tls.Config{
- RootCAs: pool,
- }
- return DialWithTLSConfig(network, raddr, priority, tag, &config)
- }
- // DialWithTLSConfig establishes a secure connection to a log daemon by connecting to
- // address raddr on the specified network. It uses tlsConfig to configure the secure connection.
- func DialWithTLSConfig(network, raddr string, priority Priority, tag string, tlsConfig *tls.Config) (*Writer, error) {
- if err := validatePriority(priority); err != nil {
- return nil, err
- }
- if tag == "" {
- tag = os.Args[0]
- }
- hostname, _ := os.Hostname()
- w := &Writer{
- priority: priority,
- tag: tag,
- hostname: hostname,
- network: network,
- raddr: raddr,
- tlsConfig: tlsConfig,
- }
- w.Lock()
- defer w.Unlock()
- err := w.connect()
- if err != nil {
- return nil, err
- }
- return w, err
- }
- // NewLogger creates a log.Logger whose output is written to
- // the system log service with the specified priority. The logFlag
- // argument is the flag set passed through to log.New to create
- // the Logger.
- func NewLogger(p Priority, logFlag int) (*log.Logger, error) {
- s, err := New(p, "")
- if err != nil {
- return nil, err
- }
- return log.New(s, "", logFlag), nil
- }
|