Get old value and new value on bind

Hi, i have a screen with a form that user input data and change info, i want to create a log of the user changes for further audit.

My idea was to use bind addStatusChangeListener to get changes and store the old values before user changes.

Is that possible? There is any other way of doing this?
Im using vaadin 8.3.1.

Already did what i want, not the most efficient way but it works, on the object chageListener i set the old value com a empty entity, after i set all the changes, on the action button i set the other values from the bind.

Something like this:

boleto.addValueChangeListener(e -> oldValues.setBoleto(e.getOldValue()));
public void setFilter(NfCabeca filterBean, NfCabeca nfOld) {
		Objects.requireNonNull(filterBean, "Filter text cannot be null");
		this.beanCabeca = filterBean;

		try {
			for (Field f : nfOld.getClass().getDeclaredFields()) {
				f.setAccessible(true);
				if (f.get(nfOld) != null) {
					System.out.println("Alterado: " + f.getName() + " " + f.get(nfOld));
				} else {
					nfOld.getClass().getDeclaredField(f.getName()).set(nfOld, filterBean.getClass().getDeclaredField(f.getName()).get(filterBean) );
					System.out.println("Setado: " + f.getName() + " " + f.get(nfOld));
				}
			}
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}

		refreshAll();
	}