<br><br>On Wednesday, November 7, 2012 6:57:04 PM UTC+9, David House wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">You need to start the scheduler. You should do this in all async
<br>programs, or else nothing will get run. Creating a log creates an
<br>async Pipe.t, and doing Log.foo puts things onto that Pipe.t. There is
<br>an async job to read things off of the pipe and to write them out. But
<br>if you don't start the scheduler, this job won't get run. So add the
<br>following at bottom of your code:
<br>
<br>let () =
<br>  main ();
<br>  never_returns (Scheduler.go ())
<br></blockquote><div><br>I don't know where to find never_returns.<br><br>But the following did work (and never stop):<br>---<br>module Log   = Async_extra.Log<br>module Sched = Async.Std.Scheduler<br><br>let main () =<br><br>  let logger = Log.create (Log.Level.of_string "Debug") [Log.Output.screen] in<br><br>  Log.raw   logger "%s\n" "raw log";<br>  Log.info  logger "%s\n" "info log";<br>  Log.error logger "%s\n" "error log";<br>  Log.debug logger "%s\n" "debug log";<br><br>  Log.close logger<br>;;<br><br>main();<br>Sched.go ()<br>---<br> <br></div><blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">
<br>The reason this is done, rather than just writing immediately, is in
<br>case the write blocks,</blockquote><div><br>I see.<br></div><div><br> </div><blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"> which would halt the whole process. If you
<br>decide you don't care about this risk (e.g. if you're writing to a
<br>terminal then it's not very likely), you can use Log.Blocking.
<br></blockquote><div><br>I'll try to use that. <br><br></div><blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">
<br>Also, a smaller point, it's more idiomatic to write "open Async.Std"
<br>rather than referring directly to one of the three async
<br>sub-libraries.
<br></blockquote><div><br>I'm affraid of open directives, I try to keep my code _very_ explicit<br>about what it is doing and which function from which module is used<br>(maybe because of past overexposure to some C++ code).<br><br>For the moment, I use the stdlib + batteries<br>+ (async and async_extra for just the logger).<br><br>In some other future thread, I might ask for some help on the<br>best way to remove batteries, then remove the stdlib,<br>hopefully to just depend on core and async in the future.<br><br>Thanks for all the help,<br>Francois.<br> <br></div><blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">
<br>On Wed, Nov 7, 2012 at 8:34 AM, Francois Berenger
<br><<a href="javascript:" target="_blank" gdf-obfuscated-mailto="eGY03Hnb7JIJ">francois.ber...@<wbr>gmail.com</a>> wrote:
<br>> I could create a test program.
<br>>
<br>> It compiles, at least, but has the funny property of not logging anything out.
<br>>
<br>> ---
<br>> module Log  = Async_extra.Log
<br>>
<br>> let main () =
<br>>
<br>>   let logger = Log.create (Log.Level.of_string "Debug") [Log.Output.screen] in
<br>>
<br>>   Log.raw   logger "%s\n" "raw log";
<br>>   Log.info  logger "%s\n" "info log";
<br>>   Log.error logger "%s\n" "error log";
<br>>   Log.debug logger "%s\n" "debug log";
<br>>
<br>>   Log.close logger
<br>> ;;
<br>>
<br>> main()
<br>> ---
<br>>
<br>> Here is the oasis file for it:
<br>> ---
<br>> OASISFormat: 0.3
<br>> Name:        Toto
<br>> Version:     0.1
<br>> Synopsis:    Titi
<br>> Authors:     Me
<br>> License:     LGPL-3
<br>> Plugins:     META (0.3), DevFiles (0.3)
<br>>
<br>> Executable logger_test
<br>>   Path:           .
<br>>   BuildDepends:   async_extra
<br>>   BuildTools:     ocamlbuild
<br>>   CompiledObject: native
<br>>   MainIs:         <a href="http://logger_test.ml" target="_blank">logger_test.ml</a>
<br>> ---
<br>>
<br>> I was thinking all logs would print right away.
<br>>
<br>> Regards,
<br>> F.
<br>>
<br>> On Wed, Nov 7, 2012 at 4:18 PM, Francois Berenger
<br>> <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="eGY03Hnb7JIJ">francois.ber...@<wbr>gmail.com</a>> wrote:
<br>>> Hello,
<br>>>
<br>>> How can I construct a value of type Async_extra.Log.Level
<br>>> and an Async_extra.Log.Output?
<br>>>
<br>>> Sorry for the stupid question but I have never used
<br>>> polymorphic variants.
<br>>>
<br>>> If you can point me to some simple explanation
<br>>> on them, I will go and read it too
<br>>> (I looked at <a href="http://caml.inria.fr/pub/docs/manual-ocaml/manual006.html" target="_blank">http://caml.inria.fr/pub/docs/<wbr>manual-ocaml/manual006.html</a>
<br>>> but it does not tell me why I should use them, just how).
<br>>>
<br>>> Thanks a lot,
<br>>> F.
<br>>>
<br>>>
<br>>> On Wednesday, November 7, 2012 10:59:54 AM UTC+9, Francois Berenger wrote:
<br>>>>
<br>>>> Yes I saw it, thanks.
<br>>>>
<br>>>> I'll also take a look at the .mli file, as I was advised to do so by
<br>>>> David House.
<br>>>> I'll try to make an example program to check I can use it correctly.
<br>>>>
<br>>>> On Tue, Nov 6, 2012 at 12:12 PM, Yaron Minsky <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="eGY03Hnb7JIJ">ymi...@janestreet.com</a>>
<br>>>> wrote:
<br>>>> > No, did you see my link?  You can read the ocamldocs:
<br>>>> >
<br>>>> >
<br>>>> > <a href="https://ocaml.janestreet.com/ocaml-core/108.07.01/doc/async_extra/Log.html" target="_blank">https://ocaml.janestreet.com/<wbr>ocaml-core/108.07.01/doc/<wbr>async_extra/Log.html</a>
<br>>>> >
<br>>>> > On Mon, Nov 5, 2012 at 9:51 PM, Francois Berenger
<br>>>> > <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="eGY03Hnb7JIJ">francois.ber...@<wbr>gmail.com</a>> wrote:
<br>>>> >> Argh! I'm forced to read an mli file. ;)
<br>>>> >>
<br>>>> >> On Mon, Nov 5, 2012 at 8:15 PM, David House <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="eGY03Hnb7JIJ">dho...@janestreet.com</a>>
<br>>>> >> wrote:
<br>>>> >>> Judging from the mli, there should be some ocamldocs, yes.
<br>>>> >>>
<br>>>> >>> However, I recommend just looking at the mli.
<br>>>> >>>
<br>>>> >>> On Mon, Nov 5, 2012 at 6:08 AM, Francois Berenger
<br>>>> >>> <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="eGY03Hnb7JIJ">francois.ber...@<wbr>gmail.com</a>> wrote:
<br>>>> >>>>
<br>>>> >>>> Is there some ocamldoc for it?
<br>>>> >>>>
<br>>>> >>>> I think I managed to compile the ocamldoc for core and async, but did
<br>>>> >>>> not find anything about a Log module into it.
<br>>>> >>>>
<br>>>> >>>>
<br>>>> >>>> On Sunday, November 4, 2012 9:15:45 PM UTC+9, Yaron Minsky wrote:
<br>>>> >>>>>
<br>>>> >>>>> Don't feel too bad about knowing about it.  It's quite new.
<br>>>> >>>>>
<br>>>> >>>>> But yeah, moving to it eventually sounds right.
<br>>>> >>>>>
<br>>>> >>>>> On Sat, Nov 3, 2012 at 6:43 PM, Sean McLaughlin <<a>sea...@gmail.com</a>>
<br>>>> >>>>> wrote:
<br>>>> >>>>>>
<br>>>> >>>>>> No, sorry.  I didn't know about Async.Log, and I wrote my own
<br>>>> >>>>>> logger.
<br>>>> >>>>>> Switching to this one is probably a good idea in the long run for
<br>>>> >>>>>> omake-server.
<br>>>> >>>>>>
<br>>>> >>>>>> On Thu, Nov 1, 2012 at 10:14 PM, Yaron Minsky
<br>>>> >>>>>> <<a>ymi...@janestreet.com</a>>
<br>>>> >>>>>> wrote:
<br>>>> >>>>>> > Sean, does your omake-server use Async.Log?  That might be a good
<br>>>> >>>>>> > example.
<br>>>> >>>>>> >
<br>>>> >>>>>> > y
<br>>>> >>>>>> >
<br>>>> >>>>>> > On Thu, Nov 1, 2012 at 9:59 PM, Francois Berenger
<br>>>> >>>>>> > <<a>francois.ber...@gmail.com</a>> wrote:
<br>>>> >>>>>> >> Is there some example program using this logger?
<br>>>> >>>>>> >>
<br>>>> >>>>>> >>
<br>>>> >>>>>> >> On Friday, November 2, 2012 10:40:40 AM UTC+9, Francois Berenger
<br>>>> >>>>>> >> wrote:
<br>>>> >>>>>> >>>
<br>>>> >>>>>> >>> OK, I'm hooked now.
<br>>>> >>>>>> >>>
<br>>>> >>>>>> >>> I plus core in my new project.
<br>>>> >>>>>> >>>
<br>>>> >>>>>> >>> Thanks!
<br>>>> >>>>>> >>> F.
<br>>>> >>>>>> >>>
<br>>>> >>>>>> >>
<br>>>> >>>>>
<br>>>> >>>>>
<br>>>> >>>>
<br></blockquote>