From 6cc96d8fae4061c50035581a023177c6a44bceeb Mon Sep 17 00:00:00 2001 From: "ged@faeriemud.org" Date: Wed, 6 Oct 2021 17:25:50 +0000 Subject: [PATCH] Add Loggability for nicer debugging output. FossilOrigin-Name: ff761d0e8e8638b1f4d98d8d913d99591d83da0167d75b28f1bd186e1907ee47 --- ext/mdbx_ext/mdbx_ext.c | 54 +++++++++++++++++++++++++++++++++++++++++ ext/mdbx_ext/mdbx_ext.h | 16 ++++++++++++ gem.deps.rb | 2 ++ lib/mdbx.rb | 7 ++++++ lib/mdbx/database.rb | 3 +++ 5 files changed, 82 insertions(+) diff --git a/ext/mdbx_ext/mdbx_ext.c b/ext/mdbx_ext/mdbx_ext.c index 9836b51..773fa65 100644 --- a/ext/mdbx_ext/mdbx_ext.c +++ b/ext/mdbx_ext/mdbx_ext.c @@ -6,6 +6,60 @@ VALUE rmdbx_mMDBX; VALUE rmdbx_eDatabaseError; VALUE rmdbx_eRollback; +/* + * Log a message to the given +context+ object's logger. + */ +void +#ifdef HAVE_STDARG_PROTOTYPES +rmdbx_log_obj( VALUE context, const char *level, const char *fmt, ... ) +#else +rmdbx_log_obj( VALUE context, const char *level, const char *fmt, va_dcl ) +#endif +{ + char buf[BUFSIZ]; + va_list args; + VALUE logger = Qnil; + VALUE message = Qnil; + + va_init_list( args, fmt ); + vsnprintf( buf, BUFSIZ, fmt, args ); + message = rb_str_new2( buf ); + + logger = rb_funcall( context, rb_intern("log"), 0 ); + rb_funcall( logger, rb_intern(level), 1, message ); + + va_end( args ); +} + + +/* + * Log a message to the global logger. + */ +void +#ifdef HAVE_STDARG_PROTOTYPES +rmdbx_log( const char *level, const char *fmt, ... ) +#else +rmdbx_log( const char *level, const char *fmt, va_dcl ) +#endif +{ + char buf[BUFSIZ]; + va_list args; + VALUE logger = Qnil; + VALUE message = Qnil; + + va_init_list( args, fmt ); + vsnprintf( buf, BUFSIZ, fmt, args ); + message = rb_str_new2( buf ); + + logger = rb_funcall( rmdbx_mMDBX, rb_intern("logger"), 0 ); + rb_funcall( logger, rb_intern(level), 1, message ); + + va_end( args ); +} + + + + /* * MDBX initialization */ diff --git a/ext/mdbx_ext/mdbx_ext.h b/ext/mdbx_ext/mdbx_ext.h index 64bb63d..872e245 100644 --- a/ext/mdbx_ext/mdbx_ext.h +++ b/ext/mdbx_ext/mdbx_ext.h @@ -54,6 +54,22 @@ typedef struct rmdbx_db rmdbx_db_t; static const rb_data_type_t rmdbx_db_data; +/* ------------------------------------------------------------ + * Logging + * ------------------------------------------------------------ */ +#ifdef HAVE_STDARG_PROTOTYPES +#include +#define va_init_list(a,b) va_start(a,b) +void rmdbx_log_obj( VALUE, const char *, const char *, ... ); +void rmdbx_log( const char *, const char *, ... ); +#else +#include +#define va_init_list(a,b) va_start(a) +void rmdbx_log_obj( VALUE, const char *, const char *, va_dcl ); +void rmdbx_log( const char *, const char *, va_dcl ); +#endif + + /* ------------------------------------------------------------ * Globals * ------------------------------------------------------------ */ diff --git a/gem.deps.rb b/gem.deps.rb index 0865dc5..3ee64ce 100644 --- a/gem.deps.rb +++ b/gem.deps.rb @@ -1,5 +1,7 @@ source "https://rubygems.org/" +gem 'loggability', '~> 0.17' + group( :development ) do gem 'pry', '~> 0.13' gem 'rake', '~> 13.0' diff --git a/lib/mdbx.rb b/lib/mdbx.rb index a84aedf..41d4fd3 100644 --- a/lib/mdbx.rb +++ b/lib/mdbx.rb @@ -2,15 +2,22 @@ # vim: set nosta noet ts=4 sw=4 ft=ruby: # encoding: utf-8 +require 'loggability' + require 'mdbx_ext' # Top level namespace for MDBX. # module MDBX + extend Loggability # The version of this gem. VERSION = '0.3.2' + + log_as :mdbx + + end # module MDBX diff --git a/lib/mdbx/database.rb b/lib/mdbx/database.rb index a25114f..4f53dfc 100644 --- a/lib/mdbx/database.rb +++ b/lib/mdbx/database.rb @@ -8,6 +8,9 @@ require 'mdbx' unless defined?( MDBX ) # The primary class for interacting with an MDBX database. # class MDBX::Database + extend Loggability + + log_to :mdbx ### call-seq: ### MDBX::Database.open( path ) => db