func()

in file/rotator.go [207:239]


func (r *Rotator) Write(data []byte) (int, error) {
	r.mutex.Lock()
	defer r.mutex.Unlock()

	dataLen := uint(len(data))
	if dataLen > r.maxSizeBytes {
		return 0, fmt.Errorf("data size (%d bytes) is greater than "+
			"the max file size (%d bytes)", dataLen, r.maxSizeBytes)
	}

	if r.file == nil {
		if err := r.openNew(); err != nil {
			return 0, fmt.Errorf("failed to open new log file for writing: %w", err)
		}
	} else {
		if reason, t := r.isRotationTriggered(dataLen); reason != rotateReasonNoRotate {
			if err := r.rotateWithTime(reason, t); err != nil {
				return 0, fmt.Errorf("error file rotating files reason: %s: %w", reason, err)
			}

			if err := r.openFile(); err != nil {
				return 0, fmt.Errorf("failed to open existing log file for writing: %w", err)
			}
		}
	}

	n, err := r.file.Write(data)
	if err != nil {
		return n, fmt.Errorf("failed to write to file: %w", err)
	}

	return n, nil
}