| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | package logimport (	"github.com/v2ray/v2ray-core/common/serial")// 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   serial.String	To     serial.String	Status AccessStatus	Reason serial.String}func (this *accessLog) Release() {	this.From = nil	this.To = nil	this.Reason = nil}func (this *accessLog) String() string {	return this.From.String() + " " + string(this.Status) + " " + this.To.String() + " " + this.Reason.String()}// 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 (", file, "): ", file, err)		return err	}	accessLoggerInstance = logger	return nil}// Access writes an access log.func Access(from, to serial.String, status AccessStatus, reason serial.String) {	accessLoggerInstance.Log(&accessLog{		From:   from,		To:     to,		Status: status,		Reason: reason,	})}
 |