| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | package log// AccessStatus is the status of an access request from clients.type AccessStatus stringconst (	AccessAccepted = AccessStatus("accepted")	AccessRejected = AccessStatus("rejected"))var (	accessLoggerInstance logWriter = &noOpLogWriter{})type accessLog struct {	From   string	To     string	Status AccessStatus	Reason string}func (this *accessLog) String() string {	return this.From + " " + string(this.Status) + " " + this.To + " " + this.Reason}// InitAccessLogger initializes the access logger to write into the give file.func InitAccessLogger(file string) error {	logger, err := newFileLogWriter(file)	if err != nil {		Error("Failed to create access logger on file (%s): %v", file, err)		return err	}	accessLoggerInstance = logger	return nil}// Access writes an access log.func Access(from, to string, status AccessStatus, reason string) {	accessLoggerInstance.Log(&accessLog{		From:   from,		To:     to,		Status: status,		Reason: reason,	})}
 |