我尝试使用bolt(http://bolt.x9c.fr)来记录我的程序。 我的开发环境包括Mac OS X上的OCaml 4.0.1,Opam和Core。 在Real World Ocaml之后,编译过程由corebuild管理。
使用corebuild进行编译,Bolt不会生成任何日志。 为了进行简单的测试,我使用了Bolt文档中的示例。
这是一个简单的测试来源:
let funct n =
LOG "funct(%d)" n LEVEL DEBUG;
for i = 1 to n do
print_endline "..."
done
let () =
LOG "application start" LEVEL TRACE;
funct 3;
funct 7;
LOG "application end" LEVEL TRACE
这是配置文件(bolt.config):
logger "" {
level = trace;
filter = all;
layout = default;
mode = direct;
output = file;
name = "log";
}
要运行,必须使用配置文件的路径定义环境变量BOLT_CONFIG:
BOLT_CONFIG=./bolt.config
使用编译:
ocamlc -c -I /Users/ivan/.opam/system/lib/bolt bolt.cma -pp 'camlp4o /Users/ivan/.opam/system/lib/bolt/bolt_pp.cmo' test.ml
ocamlc -o test.byte -I /Users/ivan/.opam/system/lib/bolt unix.cma dynlink.cma bolt.cma test.cmo
并运行它没问题
但是使用corebuild进行编译:
corebuild -pkgs Bolt -libs dynlink test.byte
测试运行但没有日志。 我认为corebuild使用的编译参数有一些东西。 真实世界OCaml建议使用corebuild,但现在我认为Core参数和Bolt在某种程度上是不相容的"或者我忘记了什么。
答案 0 :(得分:1)
我已经尝试过你的测试,它适用于我,即使使用corebuild(但是,确定Bolt应该是大写的吗?在linux中,它不被接受)。所以,我想向你保证,问题出在其他地方。
corebuild没有魔力,它只是ocamlbuild的一个薄包装:
cat `which corebuild`
所以不应该有任何问题。
确保您正确指定环境变量。您应该在每次调用时指定它,如下所示:
BOLT_CONFIG=./bolt.config corebuild -pkg bolt -libs dynlink test.byte --
或者您可以只导出一次:
export BOLT_CONFIG=./bolt.config
P.S。我的配置是:
OCaml 4.01.0 installed via opam 1.1
Linux Debian Squeeze
bolt 1.4
core 111.08.00