mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
75 lines
2.4 KiB
OCaml
75 lines
2.4 KiB
OCaml
(* Example showing how to enable debugging, and capture it into any
|
|
* custom logging system.
|
|
*)
|
|
|
|
(* Events we are interested in. This bitmask covers all trace and
|
|
* debug messages.
|
|
*)
|
|
let event_bitmask = [
|
|
Guestfs.EVENT_LIBRARY;
|
|
Guestfs.EVENT_WARNING;
|
|
Guestfs.EVENT_APPLIANCE;
|
|
Guestfs.EVENT_TRACE
|
|
]
|
|
|
|
let rec main () =
|
|
let g = new Guestfs.guestfs () in
|
|
|
|
(* By default, debugging information is printed on stderr. To
|
|
* capture it somewhere else you have to set up an event handler
|
|
* which will be called back as debug messages are generated. To do
|
|
* this use the event API.
|
|
*
|
|
* For more information see EVENTS in guestfs(3).
|
|
*)
|
|
ignore (g#set_event_callback message_callback event_bitmask);
|
|
|
|
(* This is how debugging is enabled:
|
|
*
|
|
* Setting the 'trace' flag in the handle means that each libguestfs
|
|
* call is logged (name, parameters, return). This flag is useful
|
|
* to see how libguestfs is being used by a program.
|
|
*
|
|
* Setting the 'verbose' flag enables a great deal of extra
|
|
* debugging throughout the system. This is useful if there is a
|
|
* libguestfs error which you don't understand.
|
|
*
|
|
* Note that you should set the flags early on after creating the
|
|
* handle. In particular if you set the verbose flag after launch
|
|
* then you won't see all messages.
|
|
*
|
|
* For more information see:
|
|
* http://libguestfs.org/guestfs-faq.1.html#debugging-libguestfs
|
|
*
|
|
* Error messages raised by APIs are *not* debugging information,
|
|
* and they are not affected by any of this. You may have to log
|
|
* them separately.
|
|
*)
|
|
g#set_trace true;
|
|
g#set_verbose true;
|
|
|
|
(* Do some operations which will generate plenty of trace and debug
|
|
* messages.
|
|
*)
|
|
g#add_drive "/dev/null";
|
|
g#launch ();
|
|
g#close ()
|
|
|
|
(* This function is called back by libguestfs whenever a trace or
|
|
* debug message is generated.
|
|
*
|
|
* For the classes of events we have registered above, 'array' and
|
|
* 'array_len' will not be meaningful. Only 'buf' and 'buf_len' will
|
|
* be interesting and these will contain the trace or debug message.
|
|
*
|
|
* This example simply redirects these messages to syslog, but
|
|
* obviously you could do something more advanced here.
|
|
*)
|
|
and message_callback event event_handle buf array =
|
|
if String.length buf > 0 then (
|
|
let event_name = Guestfs.event_to_string [event] in
|
|
Printf.printf "[%s] %S\n%!" event_name buf
|
|
)
|
|
|
|
let () = main ()
|