1) DBCC SHRINKFILE is probably more what you want. It takes time to execute because pages have to be moved within the file. This has other bad consequences. Paul Randal tried, I think, to have these commands removed from SQL Server. If this is a regular "maintenance" routine then stop - you are doing it wrong. Have a look at Paul Randal's blog for his thoughts on shrinking databases & logs.
2) Create a DDL trigger and log the data in to a table. I have not used it but CDC might be useful too.