File: debug_logging.ml

package info (click to toggle)
libguestfs 1%3A1.54.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 98,892 kB
  • sloc: ansic: 379,443; ml: 38,771; sh: 10,329; java: 9,631; cs: 6,377; haskell: 5,729; makefile: 5,178; python: 3,821; perl: 2,467; erlang: 2,461; ruby: 349; xml: 275; pascal: 257; javascript: 157; cpp: 10
file content (74 lines) | stat: -rw-r--r-- 2,437 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
(* 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 ()