Skip to content

Quieter defaults for read.output #3996

Description

@infotroph

Initially discussed in #3970, moving here for more planning before implementation: PEcAn.utils::read.output is very chatty by default, issuing lots of messages about routine behavior that get repeated as it handles each file even when reading a directory of thousands.

I propose the default behavior should be:

  • print_summary = FALSE
  • verbose = FALSE, as currently
  • verbose = FALSE should additionally suppress all messages that are reporting documented behavior that it's safe to assume is what the user intended:
    • "missing [start/end] year"
    • "No start or end year provided"
    • "Reading the following files"
    • "Variables not specified. Reading output for all variables"
  • These messages indicate directory contents that might not be what the user expected, so I can see a case for displaying them even when verbose = FALSE:
    • "netCDF files for other years present"
    • "No files found. Returning all NA"

In #3970 I had proposed approximating this by adding

if (!isTRUE(verbose)) {
    loglevel <- PEcAn.logger::logger.setLevel("WARN")
    on.exit(PEcAn.logger::logger.setLevel(loglevel), add = TRUE)
  }

to the top of the function so that all the DEBUG and INFO messages are suppressed by default, but there are at least three reasons that's not by itself a full solution:

  1. The print_summary output is implemented as a logger.info call, so it would make print_summary only work in verbose mode.
  2. Most of the debug messages are already written as if (!verbose) PEcAn.logger::logger.debug(...), so suppressing the other ones via logger levels creates a needless inconsistency.
  3. Many of the read.output unit tests rely on checking for the messages I'm proposing to suppress. @divine7022 pointed out that we could add verbose=TRUE to those tests as a quick workaround, but I submit the tests ought to be rewritten to check the return value (which is what matters most!) instead of the messages.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions