There is a global --verbose option that can be used multiple times to increase verbosity (2 levels currently) of zypper's output to find out what is going on. For example, use zypper -vv up.
Since version 0.8.0, the zypper log is by default at /var/log/zypper.log. The location of the log file can be changed using ZYPP_LOGFILE environment variable, e.g.
$ ZYPP_LOGFILE=zypper-refresh-updates.log zypper refresh updates
Solver Test Case
Since version 0.8.7, zypper is able to generate a solver test case to help debugging problems related to package dependencies and libzypp's dependency resolver. To generate a test case, add the --debug-solver command option to commands like install, remove, update, dist-upgrade, verify, or source-install. For example:
$ zypper install --debug-solver MozillaFirefox
The test case files will be written into /var/log/zypper.solverTestCase directory. You can pack and compress and attach them to a bug report then.
Reporting a Bug
When filing bugs, please use component libzypp and attach the log and zypper output. If you can easily reproduce the bug, there is no need to attach the whole log from previous runs. When reproducing the bug, prepend ZYPP_LOGFILE=logfile_name to the zypper command you are about to execute, and attach the file you specified, e.g.:
$ ZYPP_LOGFILE=zypper.log zypper -vv install MozillaFirefox
Discussing usage and bugs
Ignore still running zypper
During development of applications, it can be useful to ignore a lock for zypper (don't try this on production machines!):
$ export ZYPP_READONLY_HACK=1 $ zypper ...