// InitLogging configures a logger according to the specified // config params. If not called, the default logger set by the // package init() is used. // Concurrenty note: should only be called from the main // goroutine. func InitLogging(config *Config) error { level, err := logrus.ParseLevel(config.LogLevel) if err != nil { return common.ContextError(err) } logWriter := os.Stderr if config.LogFilename != "" { logWriter, err = os.OpenFile( config.LogFilename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666) if err != nil { return common.ContextError(err) } } log = &ContextLogger{ &logrus.Logger{ Out: logWriter, Formatter: &CustomJSONFormatter{}, Level: level, }, } return nil }
// InitLogging configures a logger according to the specified // config params. If not called, the default logger set by the // package init() is used. // When configured, InitLogging also establishes a local syslog // logger specifically for fail2ban integration. // Concurrenty note: should only be called from the main // goroutine. func InitLogging(config *Config) error { level, err := logrus.ParseLevel(config.LogLevel) if err != nil { return psiphon.ContextError(err) } hooks := make(logrus.LevelHooks) var syslogHook *logrus_syslog.SyslogHook if config.SyslogFacility != "" { syslogHook, err = logrus_syslog.NewSyslogHook( "", "", getSyslogPriority(config), config.SyslogTag) if err != nil { return psiphon.ContextError(err) } hooks.Add(syslogHook) } log = &ContextLogger{ &logrus.Logger{ Out: os.Stderr, Formatter: new(logrus.TextFormatter), Hooks: hooks, Level: level, }, } if config.Fail2BanFormat != "" { fail2BanFormat = config.Fail2BanFormat fail2BanWriter, err = syslog.Dial( "", "", syslog.LOG_AUTH|syslog.LOG_INFO, config.SyslogTag) if err != nil { return psiphon.ContextError(err) } } return nil }