digitalmars.D.announce - new scrapple Lib: API logging
- BCS (13/13) Aug 13 2008 (lets try this again in the correct NG :)
- Christopher Wright (7/28) Aug 13 2008 This is really ugly, but it does a good thing.
- BCS (11/45) Aug 13 2008 I wanted very light dependencies, I actually considered going with print...
(lets try this again in the correct NG :) I have posted a new library to scrapple. http://www.dsource.org/projects/scrapple/browser/trunk/log_api This library allows simple wrapping of function calls with logging of file name/line number of call, function name and argument/return values. The intended use for this lib is for debugging the external API's. For example I wrote it because I was having issues with a mysql wrapper lib and wanted to known what api calls were being made. To use it, replace the calls to be logged with wrapped calls: ulong r = mysql_real_escape_string(connection, ret.ptr, string.ptr, string.length); ulong r = TraceAPI!("mysql_real_escape_string)(__FILE__,__LINE__,connection, ret.ptr, string.ptr, string.length); a little fun with regex and you can have a whole file done in about a minute
Aug 13 2008
BCS wrote:(lets try this again in the correct NG :) I have posted a new library to scrapple. http://www.dsource.org/projects/scrapple/browser/trunk/log_api This library allows simple wrapping of function calls with logging of file name/line number of call, function name and argument/return values. The intended use for this lib is for debugging the external API's. For example I wrote it because I was having issues with a mysql wrapper lib and wanted to known what api calls were being made. To use it, replace the calls to be logged with wrapped calls: ulong r = mysql_real_escape_string(connection, ret.ptr, string.ptr, string.length); ulong r = TraceAPI!("mysql_real_escape_string)(__FILE__,__LINE__,connection, ret.ptr, string.ptr, string.length);This is really ugly, but it does a good thing. Maybe you could incorporate jive.stacktrace (or one of the hacked versions that actually works) so you don't have to use __FILE__, __LINE__? Though that's probably more than you want to do. Also, have you tried alias parameters rather than strings? It results in more sensible error messages.
Aug 13 2008
Reply to Christopher,BCS wrote:Ah, Yah. that about sums it up.(lets try this again in the correct NG :) I have posted a new library to scrapple. http://www.dsource.org/projects/scrapple/browser/trunk/log_api This library allows simple wrapping of function calls with logging of file name/line number of call, function name and argument/return values. The intended use for this lib is for debugging the external API's. For example I wrote it because I was having issues with a mysql wrapper lib and wanted to known what api calls were being made. To use it, replace the calls to be logged with wrapped calls: ulong r = mysql_real_escape_string(connection, ret.ptr, string.ptr, string.length); ulong r = TraceAPI!("mysql_real_escape_string)(__FILE__,__LINE__,connection, ret.ptr, string.ptr, string.length);This is really ugly, but it does a good thing.Maybe you could incorporate jive.stacktrace (or one of the hacked versions that actually works) so you don't have to use __FILE__, __LINE__? Though that's probably more than you want to do.I wanted very light dependencies, I actually considered going with printf rather than writef but I can live with that one Considering if you are smart about it you doesn't need to type the __FILE__,__LINE__ more than once (http://gskinner.com/RegExr/) I can live with that ugliness.Also, have you tried alias parameters rather than strings? It results in more sensible error messages.Yup that was my first thought, but it didn't work for some reason and the string trick did. I was kind of in a Fast, Stupid 'n Works kind of mood. I don't recall why it wasn't working but I might take a pass at trying at again (feel free to take a crack at it your self, I can get you SVN access if you want to commit improvements)
Aug 13 2008