func (sink *tryJournalSink) Log(fields Fields) { if journal.Enabled() { sink.j.Log(fields) } else { sink.w.Log(fields) } }
// New creates a journald logger using the configuration passed in on // the context. func New(ctx logger.Context) (logger.Logger, error) { if !journal.Enabled() { return nil, fmt.Errorf("journald is not enabled on this host") } // Strip a leading slash so that people can search for // CONTAINER_NAME=foo rather than CONTAINER_NAME=/foo. name := ctx.ContainerName if name[0] == '/' { name = name[1:] } // parse log tag tag, err := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate) if err != nil { return nil, err } vars := map[string]string{ "CONTAINER_ID": ctx.ContainerID[:12], "CONTAINER_ID_FULL": ctx.ContainerID, "CONTAINER_NAME": name, "CONTAINER_TAG": tag, } extraAttrs := ctx.ExtraAttributes(sanitizeKeyMod) for k, v := range extraAttrs { vars[k] = v } return &journald{vars: vars, readers: readerList{readers: make(map[*logger.LogWatcher]*logger.LogWatcher)}}, nil }
func init() { sinks := make([]Sink, 0) sinks = append(sinks, WriterSink(os.Stdout, BasicFormat, BasicFields)) if journal.Enabled() { sinks = append(sinks, JournalSink()) } defaultLogger = NewSimple(sinks...) }
func CombinedSink(writer io.Writer, format string, fields []string) Sink { sinks := make([]Sink, 0) sinks = append(sinks, WriterSink(writer, format, fields)) if journal.Enabled() { sinks = append(sinks, JournalSink()) } return &combinedSink{ sinks: sinks, } }
func New(id string, name string) (logger.Logger, error) { if !journal.Enabled() { return nil, fmt.Errorf("journald is not enabled on this host") } // Strip a leading slash so that people can search for // CONTAINER_NAME=foo rather than CONTAINER_NAME=/foo. if name[0] == '/' { name = name[1:] } jmap := map[string]string{ "CONTAINER_ID": id[:12], "CONTAINER_ID_FULL": id, "CONTAINER_NAME": name} return &Journald{Jmap: jmap}, nil }
// New creates a journald logger using the configuration passed in on // the context. func New(ctx logger.Context) (logger.Logger, error) { if !journal.Enabled() { return nil, fmt.Errorf("journald is not enabled on this host") } // Strip a leading slash so that people can search for // CONTAINER_NAME=foo rather than CONTAINER_NAME=/foo. name := ctx.ContainerName if name[0] == '/' { name = name[1:] } jmap := map[string]string{ "CONTAINER_ID": ctx.ContainerID[:12], "CONTAINER_ID_FULL": ctx.ContainerID, "CONTAINER_NAME": name} return &journald{Jmap: jmap}, nil }
// New creates a journald logger using the configuration passed in on // the context. func New(ctx logger.Context) (logger.Logger, error) { if !journal.Enabled() { return nil, fmt.Errorf("journald is not enabled on this host") } // Strip a leading slash so that people can search for // CONTAINER_NAME=foo rather than CONTAINER_NAME=/foo. name := ctx.ContainerName if name[0] == '/' { name = name[1:] } vars := map[string]string{ "CONTAINER_ID": ctx.ContainerID[:12], "CONTAINER_ID_FULL": ctx.ContainerID, "CONTAINER_NAME": name, } extraAttrs := ctx.ExtraAttributes(strings.ToTitle) for k, v := range extraAttrs { vars[k] = v } return &journald{vars: vars, readers: readerList{readers: make(map[*logger.LogWatcher]*logger.LogWatcher)}}, nil }
// New creates a journald logger using the configuration passed in on // the context. func New(ctx logger.Context) (logger.Logger, error) { if !journal.Enabled() { return nil, fmt.Errorf("journald is not enabled on this host") } // parse log tag tag, err := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate) if err != nil { return nil, err } vars := map[string]string{ "CONTAINER_ID": ctx.ContainerID[:12], "CONTAINER_ID_FULL": ctx.ContainerID, "CONTAINER_NAME": ctx.Name(), "CONTAINER_TAG": tag, } extraAttrs := ctx.ExtraAttributes(sanitizeKeyMod) for k, v := range extraAttrs { vars[k] = v } return &journald{vars: vars, readers: readerList{readers: make(map[*logger.LogWatcher]*logger.LogWatcher)}}, nil }
func NewJournaldFormatter() (Formatter, error) { if !journal.Enabled() { return nil, errors.New("No systemd detected") } return &journaldFormatter{}, nil }
func NewJournalLogger() (Logger, error) { if !journal.Enabled() { return nil, errors.New("could not connect to journald socket") } return &jlogger{}, nil }
func connector(context *cli.Context) int { config, configFilename, err := lib.GetConfig(context) if err != nil { fmt.Fprintf(os.Stderr, "Failed to read config file: %s", err) return 1 } logToJournal := config.LogToJournal && journal.Enabled() logToConsole := context.Bool("log-to-console") if logToJournal { log.SetJournalEnabled(true) if logToConsole { log.SetWriter(os.Stderr) } else { log.SetWriter(ioutil.Discard) } } else { logFileMaxBytes := config.LogFileMaxMegabytes * 1024 * 1024 var logWriter io.Writer logWriter, err = log.NewLogRoller(config.LogFileName, logFileMaxBytes, config.LogMaxFiles) if err != nil { fmt.Fprintf(os.Stderr, "Failed to start log roller: %s", err) return 1 } if logToConsole { logWriter = io.MultiWriter(logWriter, os.Stderr) } log.SetWriter(logWriter) } logLevel, ok := log.LevelFromString(config.LogLevel) if !ok { fmt.Fprintf(os.Stderr, "Log level %s is not recognized", config.LogLevel) return 1 } log.SetLevel(logLevel) if configFilename == "" { log.Info("No config file was found, so using defaults") } log.Info(lib.FullName) fmt.Println(lib.FullName) if !config.CloudPrintingEnable && !config.LocalPrintingEnable { log.Fatal("Cannot run connector with both local_printing_enable and cloud_printing_enable set to false") return 1 } if _, err := os.Stat(config.MonitorSocketFilename); !os.IsNotExist(err) { if err != nil { log.Fatalf("Failed to stat monitor socket: %s", err) } else { log.Fatalf( "A connector is already running, or the monitoring socket %s wasn't cleaned up properly", config.MonitorSocketFilename) } return 1 } jobs := make(chan *lib.Job, 10) xmppNotifications := make(chan xmpp.PrinterNotification, 5) var g *gcp.GoogleCloudPrint var x *xmpp.XMPP if config.CloudPrintingEnable { xmppPingTimeout, err := time.ParseDuration(config.XMPPPingTimeout) if err != nil { log.Fatalf("Failed to parse xmpp ping timeout: %s", err) return 1 } xmppPingInterval, err := time.ParseDuration(config.XMPPPingInterval) if err != nil { log.Fatalf("Failed to parse xmpp ping interval default: %s", err) return 1 } g, err = gcp.NewGoogleCloudPrint(config.GCPBaseURL, config.RobotRefreshToken, config.UserRefreshToken, config.ProxyName, config.GCPOAuthClientID, config.GCPOAuthClientSecret, config.GCPOAuthAuthURL, config.GCPOAuthTokenURL, config.GCPMaxConcurrentDownloads, jobs) if err != nil { log.Fatal(err) return 1 } x, err = xmpp.NewXMPP(config.XMPPJID, config.ProxyName, config.XMPPServer, config.XMPPPort, xmppPingTimeout, xmppPingInterval, g.GetRobotAccessToken, xmppNotifications) if err != nil { log.Fatal(err) return 1 } defer x.Quit() } cupsConnectTimeout, err := time.ParseDuration(config.CUPSConnectTimeout) if err != nil { log.Fatalf("Failed to parse CUPS connect timeout: %s", err) return 1 } c, err := cups.NewCUPS(config.CopyPrinterInfoToDisplayName, config.PrefixJobIDToJobTitle, config.DisplayNamePrefix, config.CUPSPrinterAttributes, config.CUPSMaxConnections, cupsConnectTimeout, config.PrinterBlacklist, config.CUPSIgnoreRawPrinters, config.CUPSIgnoreClassPrinters) if err != nil { log.Fatal(err) return 1 } defer c.Quit() var s *snmp.SNMPManager if config.SNMPEnable { log.Info("SNMP enabled") s, err = snmp.NewSNMPManager(config.SNMPCommunity, config.SNMPMaxConnections) if err != nil { log.Fatal(err) return 1 } defer s.Quit() } var priv *privet.Privet if config.LocalPrintingEnable { if g == nil { priv, err = privet.NewPrivet(jobs, config.GCPBaseURL, nil) } else { priv, err = privet.NewPrivet(jobs, config.GCPBaseURL, g.ProximityToken) } if err != nil { log.Fatal(err) return 1 } defer priv.Quit() } cupsPrinterPollInterval, err := time.ParseDuration(config.CUPSPrinterPollInterval) if err != nil { log.Fatalf("Failed to parse CUPS printer poll interval: %s", err) return 1 } pm, err := manager.NewPrinterManager(c, g, priv, s, cupsPrinterPollInterval, config.CUPSJobQueueSize, config.CUPSJobFullUsername, config.CUPSIgnoreRawPrinters, config.ShareScope, jobs, xmppNotifications) if err != nil { log.Fatal(err) return 1 } defer pm.Quit() m, err := monitor.NewMonitor(c, g, priv, pm, config.MonitorSocketFilename) if err != nil { log.Fatal(err) return 1 } defer m.Quit() if config.CloudPrintingEnable { if config.LocalPrintingEnable { log.Infof("Ready to rock as proxy '%s' and in local mode", config.ProxyName) fmt.Printf("Ready to rock as proxy '%s' and in local mode\n", config.ProxyName) } else { log.Infof("Ready to rock as proxy '%s'", config.ProxyName) fmt.Printf("Ready to rock as proxy '%s'\n", config.ProxyName) } } else { log.Info("Ready to rock in local-only mode") fmt.Println("Ready to rock in local-only mode") } waitIndefinitely() log.Info("Shutting down") fmt.Println("") fmt.Println("Shutting down") return 0 }
func NewLogger() Logger { if !debug && journal.Enabled() { return &JournaldLogger{} } return &StdErrLogger{} }