Yes, I agree that option 1 sounds better. Every once in a while, I find that option 2 works well with the pattern
foo.rkt: #lang racket (define-logger foo) ; uses `(current-logger)` bar.rkt: #lang racket (define-logger bar) ; uses `(current-logger)` main.rkt: #lang racket (require "foo.rkt" "bar.rkt") (module configure-runtime racket/base (define-logger main) (current-logger main-logger) ; sets `(current-logger)` early ....) (require (submod "." configure-runtime)) The `configure-runtime` submodule name is special: when "main.rkt" is run as a program, then `configure-runtime` is loaded and instantiated first --- before the result of "main.rkt", and before the imported "foo.rkt" and "bar.rkt" modules. This strategy only makes sense for configuration that is especially main-like, though. It doesn't compose for larger things that are built on "main.rkt". At Thu, 03 Jul 2014 13:01:19 +1200, aidal...@amuri.net wrote: > What's a sane way to set up hierarchical loggers among a set of modules > within a program? Say the main program file main.rkt has a logger named > 'main, and it "require"s module foo which has a logger 'foo, whose > parent should be 'main. Module foo also "require"s module bar, which > has its own logger 'bar, whose parent should be 'foo. The only two ways > I can think of achieving this are 1) to have foo and bar provide a > procedure that takes a logger and defines the module's logger with the > passed logger as its parent, and 2) having each module unconditionally > set their loggers parent to the (current-logger) parameter and set that > parameter to the parent logger before loading each module. Option 1 > seems much saner, but I'd like some advice on this. > > Regards, > Aidan Gauland > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users