axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dmitry Goncharov <dgoncha...@unison.com>
Subject Re: changes to the axutil log functions
Date Wed, 05 Nov 2008 08:27:53 GMT
Hi,

You can make axis to do logging the way you need w/o making changes in 
the axis code.
Have a look at util/src/log.c. Function axutil_log_impl_write_to_file() 
is used to do logging.
All you need to do is to make your own shared library with only one 
function: axutil_log_impl_write_to_file().
The function has to have the same signature as the one in util/src/log.c.
Then use LD_PRELOAD to preload this new library when starting you 
application.
That's it. The axis code will invoke you implementation of 
axutil_log_impl_write_to_file().


Your proposed fix to pass a FILE* instead of a filename has the same 
restrictions as the current code. It makes the client do logging the way 
library wants.
The library already provides the interface to do logging the way the 
client needs.
You can  allocate an instance of axutil_log_t and set ops.free and 
ops.write to your own functions.
The you can replace the log object in your env struct with your 
customized log object.
Unfortunately, axis doesn't use ops.write.
The correct fix would be to change util/src/log.c to use ops.write() and 
ops.free().
I considered providing a patch, but finally decided not to (because the 
library maintainers dont seem to be willing to apply patches) and used 
the LD_PRELOAD method described above.

BR, Dmitry


Haszlakiewicz, Eric wrote:
> I have a need to use axis within an existing system that has it's own
> ways of opening/closing/rotating logs and I've found the existing axis
> log interfaces to be a bit lacking.  I have some patches, but before I
> submit a issue in jira I wanted to run the changes past some people to
> see if what I'm doing makes sense.
>
> There are two issues that I'm fixing:
>   1) the log functions don't keep track of whether the filedescriptor
> was opened by axis, so if you create a env using axutil_env_create() it
> ends up closing stderr when you try to set a new log file.
>
>   2) There's no way to tell axis to log to a filedescriptor rather than
> to a named file.
>
> I added two functions to axutil_log_default.h:
>
> One to create a axutil_log_t using an existing FILE * as returned from
> fopen:
>     AXIS2_EXTERN axutil_log_t *AXIS2_CALL
>     axutil_log_create_fp(
>         axutil_allocator_t *allocator,
>         axutil_log_ops_t *ops,
>         void *stream,
>         int close_stream);
> I also factored out a static axutil_log_create_common() function, which
> is used by both axutil_log_create_fp() and the original
> axutil_log_create().
>
> And, one to switch the FILE pointer on an existing log structure:
>     AXIS2_EXTERN void AXIS2_CALL
>     axutil_log_set_stream(
>         axutil_allocator_t *allocator,
>         axutil_log_t *log,
>         void *stream,
>         int close_stream);
>
> In both of these, the close_stream flag indicates whether axis is
> allowed to close the stream when a new one is set or when the log
> structure is cleaned up.  That is stored in a new field in the
> axutil_log_impl structure.
>
> Does this seem reasonable?  Should I send the full patch to the list?
>
> eric
>
> (btw, I created a couple of other jira issues (AXIS2C-1271, AXIS2C-1280)
> w/ patches attached.  About how long can I expect before they are
> applied?)
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-c-dev-help@ws.apache.org
>
>   

Mime
View raw message