[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MirageOS-devel] test, quality, tcpip

Le mercredi, 13 mai 2015 Ã 10:58, Thomas Leonard a Ãcrit :
> I'm undecided about this. It is annoying when you want to log
> something and you have to thread a logger all though the code to do
> it. However, there are some useful benefits to passing it:
> - You can run two largely independent applications in a single
> unikernel, with separate logging for each.
> - You could run two IP stacks, and log each interface to its own file.
> - main.ml can choose the top-level names for each logger, and then
> each module can create a child logger for sub-components it creates,
> forming a tree. This makes it easy to see where a message is coming
> from, which isn't always obvious if modules choose their own names.
> Having it on every function might be too much, but perhaps a functor
> argument would do? Or perhaps have both options, Irmin-style.  

Note that this problem is solved by what I mentioned in my response about 
lwt_log without having to thread a function or having functors (and is similar 
to your class example). Basically something like:  

module Log : sig                                                                
  type logging = [ `Public | `Private ]                                         
  type 'a t constraint 'a = [< logging]                                         
  val create : unit -> [`Public] t
  val set_level : 'a t -> level -> unit
  val to_private : [`Public] t -> [`Private] t                                  
  val msg : [`Public] t  -> ('a, Format.formatter, unit, unit) 
Pervasives.format4 -> 'a                  

If you want a tree structure then `Log.create` could take another optional 
parent log in argument. Now in your components:

module My_component : sig
  val log : [`Private] Log.t
end = struct
  let log = Log.create ()
  let log_msg = Log.msg log

  let log = public_log
  (* now simply use log_msg throughout your component code *)

This allows users of component (e.g. the mirage tool) to configure the logging 
of the component.  



MirageOS-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.