-
Notifications
You must be signed in to change notification settings - Fork 84
Replace direct stdout printing with logging
#1117
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This is needed to preserve compatibility with version checks, e.g. in BenchExec.
|
|
||
| let rec process_def res = | ||
| print_endline @@ Resource.show res ; | ||
| print_endline @@ Resource.show res ; (* nosemgrep: print-not-logging *) |
Check warning
Code scanning / Semgrep
Semgrep Finding: semgrep.print-not-logging
|
|
||
| let print_options () = | ||
| Format.printf "%a\n" (pp_options ~levels:1) (root schema) | ||
| Format.printf "%a\n" (pp_options ~levels:1) (root schema) (* nosemgrep: print-not-logging *) |
Check warning
Code scanning / Semgrep
Semgrep Finding: semgrep.print-not-logging
|
|
||
| let print_all_options () = | ||
| Format.printf "%a\n" (pp_options ~levels:max_int) (root schema) | ||
| Format.printf "%a\n" (pp_options ~levels:max_int) (root schema) (* nosemgrep: print-not-logging *) |
Check warning
Code scanning / Semgrep
Semgrep Finding: semgrep.print-not-logging
| and complete args = | ||
| Arg_complete.complete_argv args (Lazy.force option_spec_list) Arg_complete.empty | ||
| |> List.iter print_endline; | ||
| |> List.iter print_endline; (* nosemgrep: print-not-logging *) |
Check warning
Code scanning / Semgrep
Semgrep Finding: semgrep.print-not-logging
| Printexc.set_uncaught_exception_handler (fun e bt -> | ||
| (* Copied & modified from Printexc.default_uncaught_exception_handler. *) | ||
| Printf.eprintf "Fatal error: exception %s\n" (Printexc.to_string e); | ||
| Printf.eprintf "Fatal error: exception %s\n" (Printexc.to_string e); (* nosemgrep: print-not-logging *) |
Check warning
Code scanning / Semgrep
Semgrep Finding: semgrep.print-not-logging
Normal logging works just fine.
|
There's now a "result" log level that by default goes to |
michael-schwarz
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good! I have a few remaining questions in some places 😄
|
It seems like there's only two open comments left. I'd suggest to merge as soon as these are addressed to avoid it going out-of-sync and requiring a lot of work again. Wdyt? |
|
Indeed, but I cannot check if GobView still works because of |
|
On top of GobView fixes, I confirmed that it still works. |
CHANGES: * Remove unmaintained analyses: spec, file (goblint/analyzer#1281). * Add linear two-variable equalities analysis (goblint/analyzer#1297, goblint/analyzer#1412, goblint/analyzer#1466). * Add callstring, loopfree callstring and context gas analyses (goblint/analyzer#1038, goblint/analyzer#1340, goblint/analyzer#1379, goblint/analyzer#1427, goblint/analyzer#1439). * Add non-relational thread-modular value analyses with thread IDs (goblint/analyzer#1366, goblint/analyzer#1398, goblint/analyzer#1399). * Add NULL byte array domain (goblint/analyzer#1076). * Fix spurious overflow warnings from internal evaluations (goblint/analyzer#1406, goblint/analyzer#1411, goblint/analyzer#1511). * Refactor non-definite mutex handling to fix unsoundness (goblint/analyzer#1430, goblint/analyzer#1500, goblint/analyzer#1503, goblint/analyzer#1409). * Fix non-relational thread-modular value analysis unsoundness with ambiguous points-to sets (goblint/analyzer#1457, goblint/analyzer#1458). * Fix mutex type analysis unsoundness and enable it by default (goblint/analyzer#1414, goblint/analyzer#1416, goblint/analyzer#1510). * Add points-to set refinement on mutex path splitting (goblint/analyzer#1287, goblint/analyzer#1343, goblint/analyzer#1374, goblint/analyzer#1396, goblint/analyzer#1407). * Improve narrowing operators (goblint/analyzer#1502, goblint/analyzer#1540, goblint/analyzer#1543). * Extract automatic configuration tuning for soundness (goblint/analyzer#1369). * Fix many locations in witnesses (goblint/analyzer#1355, goblint/analyzer#1372, goblint/analyzer#1400, goblint/analyzer#1403). * Improve output readability (goblint/analyzer#1294, goblint/analyzer#1312, goblint/analyzer#1405, goblint/analyzer#1497). * Refactor logging (goblint/analyzer#1117). * Modernize all library function specifications (goblint/analyzer#1029, goblint/analyzer#688, goblint/analyzer#1174, goblint/analyzer#1289, goblint/analyzer#1447, goblint/analyzer#1487). * Remove OCaml 4.10, 4.11, 4.12 and 4.13 support (goblint/analyzer#1448).
CHANGES: * Remove unmaintained analyses: spec, file (goblint/analyzer#1281). * Add linear two-variable equalities analysis (goblint/analyzer#1297, goblint/analyzer#1412, goblint/analyzer#1466). * Add callstring, loopfree callstring and context gas analyses (goblint/analyzer#1038, goblint/analyzer#1340, goblint/analyzer#1379, goblint/analyzer#1427, goblint/analyzer#1439). * Add non-relational thread-modular value analyses with thread IDs (goblint/analyzer#1366, goblint/analyzer#1398, goblint/analyzer#1399). * Add NULL byte array domain (goblint/analyzer#1076). * Fix spurious overflow warnings from internal evaluations (goblint/analyzer#1406, goblint/analyzer#1411, goblint/analyzer#1511). * Refactor non-definite mutex handling to fix unsoundness (goblint/analyzer#1430, goblint/analyzer#1500, goblint/analyzer#1503, goblint/analyzer#1409). * Fix non-relational thread-modular value analysis unsoundness with ambiguous points-to sets (goblint/analyzer#1457, goblint/analyzer#1458). * Fix mutex type analysis unsoundness and enable it by default (goblint/analyzer#1414, goblint/analyzer#1416, goblint/analyzer#1510). * Add points-to set refinement on mutex path splitting (goblint/analyzer#1287, goblint/analyzer#1343, goblint/analyzer#1374, goblint/analyzer#1396, goblint/analyzer#1407). * Improve narrowing operators (goblint/analyzer#1502, goblint/analyzer#1540, goblint/analyzer#1543). * Extract automatic configuration tuning for soundness (goblint/analyzer#1369). * Fix many locations in witnesses (goblint/analyzer#1355, goblint/analyzer#1372, goblint/analyzer#1400, goblint/analyzer#1403). * Improve output readability (goblint/analyzer#1294, goblint/analyzer#1312, goblint/analyzer#1405, goblint/analyzer#1497). * Refactor logging (goblint/analyzer#1117). * Modernize all library function specifications (goblint/analyzer#1029, goblint/analyzer#688, goblint/analyzer#1174, goblint/analyzer#1289, goblint/analyzer#1447, goblint/analyzer#1487). * Remove OCaml 4.10, 4.11, 4.12 and 4.13 support (goblint/analyzer#1448).
Apparently this is something I started but never opened a PR for. The problem is that there's lots of direct printing to
stdoutthroughout Goblint, which makes output uncontrollable and unpredictable. For example, server mode cannot usestdoutbecause some random printing might get mixed in and break the whole JSON stream.The idea is to add a
Logslibrary, which is a bit likeMessages. It has various logging levels that can be toggled globally (unlike direct printing). The difference is thatMessagesis for things related to analysis results and shown in IDE, while logging is about Goblint itself, e.g. those TD3 incremental changes lines.Messagesare unordered and incrementally preserved, whileLogsjust come out in the order they happen and aren't preserved like that.TODO
master. (latest: 2024-02-13)masterwithLogs. (latest: 2024-02-13)Maingoblint.check_arguments.dbg.verbose.Logsin developer guide.Logsmodule in Goblint gobview#40.