I am looking to introduce a logging framework into our existing Oracle application to replace the use of DBMS_OUTPUT.
The framework will be used primarly to aid debugging and would detail such things as starting x procedure, details of parameters, ending procedure x etc. It should also have the functionality to be turned on for all or just one program unit, various levels of trace in fact what is pretty much standard logging functionality.
Implementing these requirements should be relatively straightforward, however where I would like your help is how best to turn this functionality off and on. What I am trying to achieve is the smallest possible performance hit when the trace is turned off. Which hopefully should be most of the time!
As the application is using 10g release 2, I initially I liked the look of wrapping the logging mechanism inside conditional compilation so that logging framework is not even visible during normal operation. Unfortunately I have had to grudgingly abandon this idea as most of the application is built using stand-a-lone procedures & functions so turning on a logging functionality could potentially invalidate a lot of code.
I have had look a several existing opensource and other's frameworks\functionality for inspiration:
log4plsql (http://log4plsql.sourceforge.net/)
APC's review here especially under acceptable impact gives me concerns.
OraLog project (http://oralog.sourceforge.net )
No updates since 2007
PL/VISION (here)
Looks quite old, no changes since Oracle 8i?
Ask Tom Instrumentation (here)
Update 01/04/2014 Tom Kyte now recommends Tyler Muth's Logger
I would be really interested to hear your experiences if you have introduced some form of logging into your Oracle application, how you implemented it and especially how you control it.