The one that comes in mind now is using interception (for example using Unity to intercept instances or types).
I've used this a while ago for trying to fail back to local data (cached from previous requests) when wcf services failed.
So I guess you could intercept calls to your DAL classes and try to log the information in the pre/post events of the pipeline.
For more info you can check this link.
Another approach could be to inject a logger class in your DAL classes (which hopefully have a base DAL class) by using an IoC container (Unity again, or MEF if you're in .NET 4.0).
If something else crosses my mind I`ll let you know.
Regards...