Each solution has it's advantages.
I personally use transactional replication as it's usually only 3 or 4 seconds latency and both copies of the data are queryable. Plus you can filter just the tables, colums and rows you need
log shipping is great for making a cold standby (each time you restore a log file the database is read only) - typically I use this for a server that runs reports at the weekend and we can scrap it afterwards.. but you have to take the entire database (which is why I like replication)
mirroring is good, but only on enterprise edition where you can use high performance mode (high safety has issues when your standby goes down... it takes your primary down too) - and you will have to create snapshots of your mirror to query it.
you could also use Redgate's SQL Data compare if it's a one off synchronisation