[log] re-use log file names

Summary:
Instead of opening new log files each time with non-deterministic names, keep
appending to the same log files. This only removes the randomized part of the
names in the files. In particular, it keeps the name prefixes for, eg, clang
source files.

Also changed most "<executable>/<executable>-out.log" to simply "<executable>/out.log".

Reviewed By: jberdine

Differential Revision: D4365983

fbshipit-source-id: 46792dc
master
Jules Villard 8 years ago committed by Facebook Github Bot
parent 1065477765
commit 24e6ae9ade

@ -302,7 +302,7 @@ let () =
remove_results_dir () ; remove_results_dir () ;
create_results_dir () ; create_results_dir () ;
(* re-set log files, as default files were in results_dir removed above *) (* re-set log files, as default files were in results_dir removed above *)
L.set_log_file_identifier Config.current_exe (Some (CLOpt.exe_name Config.current_exe)) ; L.set_log_file_identifier Config.current_exe None ;
if Config.print_builtins then Builtin.print_and_exit () ; if Config.print_builtins then Builtin.print_and_exit () ;
if Config.is_originator then L.do_out "%s@\n" Config.version_string ; if Config.is_originator then L.do_out "%s@\n" Config.version_string ;
(* infer might be called from a Makefile and itself uses `make` to run the analysis in parallel, (* infer might be called from a Makefile and itself uses `make` to run the analysis in parallel,

@ -44,27 +44,29 @@ let set_log_file_identifier (current_exe : CLOpt.exe) string_opt =
if should_setup_log_files then ( if should_setup_log_files then (
let name_prefix = let name_prefix =
(match string_opt with (match string_opt with
| Some name -> name ^ "_" | Some name -> name ^ "-"
| None -> "" | None -> ""
) ^ Pid.to_string (Unix.getpid ()) ^ "_" in ) in
let exe_log_dir = let exe_log_dir =
let log_dir = Config.results_dir ^/ Config.log_dir_name in Config.results_dir ^/ Config.log_dir_name ^/ log_dir_of_current_exe current_exe in
log_dir ^/ (log_dir_of_current_exe current_exe) in
let fmt_chan_file name suffix = lazy ( let fmt_chan_file name suffix = lazy (
let file =
(* the command-line option takes precedence if specified *)
if name <> "" then name
else exe_log_dir ^/ name_prefix^suffix in
try try
Unix.mkdir_p exe_log_dir ; Unix.mkdir_p exe_log_dir ;
let file = let chan = Pervasives.open_out_gen [Open_append; Open_creat] 0o666 file in
(* the command-line option takes precedence if specified *)
if name <> "" then name
else Filename.temp_file ~in_dir:exe_log_dir name_prefix suffix in
let chan = Pervasives.open_out file in
let fmt = F.formatter_of_out_channel chan in let fmt = F.formatter_of_out_channel chan in
Format.fprintf fmt
"---- start logging from %d -------------------------------------------@\n"
(Pid.to_int (Unix.getpid ()));
(fmt, chan, file) (fmt, chan, file)
with Sys_error _ -> with Sys_error _ ->
failwithf "ERROR: cannot open log file %s@\n" name failwithf "ERROR: cannot open log file \"%s\"" file
) in ) in
let out_fmt_chan_file = fmt_chan_file Config.out_file_cmdline "-out.log" in let out_fmt_chan_file = fmt_chan_file Config.out_file_cmdline "out.log" in
let err_fmt_chan_file = fmt_chan_file Config.err_file_cmdline "-err.log" in let err_fmt_chan_file = fmt_chan_file Config.err_file_cmdline "err.log" in
Pervasives.at_exit (fun () -> Pervasives.at_exit (fun () ->
let close fmt_chan_file = let close fmt_chan_file =
if Lazy.is_val fmt_chan_file then ( if Lazy.is_val fmt_chan_file then (
@ -84,7 +86,7 @@ let set_log_file_identifier (current_exe : CLOpt.exe) string_opt =
) )
(* set up log files on startup if needed *) (* set up log files on startup if needed *)
let () = set_log_file_identifier Config.current_exe (Some (CLOpt.exe_name Config.current_exe)) let () = set_log_file_identifier Config.current_exe None
let log_file_names () = (Lazy.force !out_file, Lazy.force !err_file) let log_file_names () = (Lazy.force !out_file, Lazy.force !err_file)

Loading…
Cancel
Save