Thread overview
new scrapple Lib: API logging
Aug 13, 2008
BCS
Aug 14, 2008
Christopher Wright
Aug 14, 2008
BCS
August 13, 2008
(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


August 14, 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.
August 14, 2008
Reply to Christopher,

> 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.
> 

Ah, Yah. that about sums it up.

> 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)