I am reading about the surface code and I am still not sure how to perform and measure logical operators, such as $X_L$ or $Z_L$, without creating defects. Suppose I stabilise my qubit array into a quiescent state $|\psi\rangle$, knowing all stabilizer eigenvalues. Performing $X_L$ on the qubit array does change the quiescent state non-trivially, but the syndrome remains equal. So by stabilizer measurements alone, I cannot detect that I applied the logical $X$ operator. So how do you perform such an operation, in a way that it can be read out?
Extra question, how do you even prepare an eigenstate of these operators, i.e. $|0\rangle_L, |1\rangle_L, |+\rangle_L, |-\rangle_L$ to begin with?
All the answers I find require defects.