// StatsAndLogging constructs a Statter and an AuditLogger based on its config // parameters, and return them both. Crashes if any setup fails. // Also sets the constructed AuditLogger as the default logger. func StatsAndLogging(statConf StatsdConfig, logConf SyslogConfig) (metrics.Statter, blog.Logger) { stats, err := metrics.NewStatter(statConf.Server, statConf.Prefix) FailOnError(err, "Couldn't connect to statsd") tag := path.Base(os.Args[0]) syslogger, err := syslog.Dial( "", "", syslog.LOG_INFO|syslog.LOG_LOCAL0, // default, overridden by log calls tag) FailOnError(err, "Could not connect to Syslog") stdoutLoglevel := int(syslog.LOG_DEBUG) if logConf.StdoutLevel != nil { stdoutLoglevel = *logConf.StdoutLevel } syslogLogLevel := int(syslog.LOG_DEBUG) if logConf.SyslogLevel != nil { syslogLogLevel = *logConf.SyslogLevel } logger, err := blog.New(syslogger, stdoutLoglevel, syslogLogLevel) FailOnError(err, "Could not connect to Syslog") _ = blog.Set(logger) cfsslLog.SetLogger(cfsslLogger{logger}) _ = mysql.SetLogger(mysqlLogger{logger}) return stats, logger }
// StatsAndLogging constructs a Statter and an AuditLogger based on its config // parameters, and return them both. Crashes if any setup fails. // Also sets the constructed AuditLogger as the default logger, and configures // the cfssl, mysql, and grpc packages to use our logger. // This must be called before any gRPC code is called, because gRPC's SetLogger // doesn't use any locking. func StatsAndLogging(statConf StatsdConfig, logConf SyslogConfig) (metrics.Statter, blog.Logger) { stats, err := metrics.NewStatter(statConf.Server, statConf.Prefix) FailOnError(err, "Couldn't connect to statsd") tag := path.Base(os.Args[0]) syslogger, err := syslog.Dial( "", "", syslog.LOG_INFO, // default, not actually used tag) FailOnError(err, "Could not connect to Syslog") syslogLevel := int(syslog.LOG_INFO) if logConf.SyslogLevel != 0 { syslogLevel = logConf.SyslogLevel } logger, err := blog.New(syslogger, logConf.StdoutLevel, syslogLevel) FailOnError(err, "Could not connect to Syslog") _ = blog.Set(logger) cfsslLog.SetLogger(cfsslLogger{logger}) _ = mysql.SetLogger(mysqlLogger{logger}) grpclog.SetLogger(grpcLogger{logger}) return stats, logger }
func (s *stapled) initResponder(httpAddr string, logger *log.Logger) { cflog.SetLogger(&log.ResponderLogger{logger}) m := http.StripPrefix("/", cfocsp.NewResponder(s)) h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // hack to make monitors that just check / returns a 200 are satisfied if r.Method == "GET" && r.URL.Path == "/" { w.Header().Set("Cache-Control", "max-age=43200") // Cache for 12 hours w.WriteHeader(200) return } m.ServeHTTP(w, r) }) s.responder = &http.Server{ Addr: httpAddr, Handler: h, } }