Additional logging workflows

Use assembly overrides for logging

In some cases, you may want to use assembly overrides to capture the logs of a component during startup.

For example, if you want to capture the logs for the component my-component-logging:

  1. In your Fuchsia checkout, make a //local/BUILD.gn file:

    assembly_developer_overrides("netstack-overrides") {
        platform = {
            diagnostics = {
                component_log_initial_interests = [
                    {
                        component = "core/network/netstack"
                        log_severity = "debug"
                    },
                ]
            }
        }
    }
    

    This is what this BUILD.gn file indicates:

    1. The assembly developer override is named netstack-overrides. You can use any meaningful identifier for this field.
    2. The keys platform, diagnostics, and component_log_initial_interests are all based on values from valid product configuration values. For more information, see platform.
    3. In this example, you used the component moniker, core/network/netstack, but you can also use the component URL, fuchsia-pkg://fuchsia.com/netstack3#meta/netstack3.cm. For more information on monikers, see component moniker.
    4. For the log_severity value, specify the minimum log severity to log. For example, debug severity. Alternatively, you could also use trace which is a lower severity than debug. However, you can use any level of log severity. For more information about log severity, see Choosing severity for log records.
  2. Once you have made a //local/BUILD.gn file that meets your requirements, you can set your fx set command to use this assembly platform configuration. For example:

    fx set --assembly-override=//local:my-component-logging
  3. Build Fuchsia:

    fx build

    You should now be able to run or OTA Fuchsia as you normally would.

Restrict log severity

By default, a test will fail if it logs a message with a severity of ERROR or higher. This often indicates that an unexpected condition had occurred during the test, so even if the test passes it's often useful to bring this to the developer's attention.

This default behavior can be changed, for each test package, to allow logs at higher severities, or to fail a test that logs at lower severities. For example, a test might expect to log an ERROR, in order to cover a failure condition and recovery steps.

A test might expect to log at ERROR severity. For example, the test might be covering a failure condition & recovery steps. Other tests might expect not to log anything more severe than INFO.

For instance, to allow a test to produce ERROR logs:

fuchsia_component("my-package") {
  testonly = true
  manifest = "meta/my-test.cml"
  deps = [ ":my_test" ]
}

fuchsia_test_package("my-package") {
  test_specs = {
      log_settings = {
        max_severity = "ERROR"
      }
  }
  test_components = [ ":my-test" ]
}

To make the test fail on any message more severe than INFO, set max_severity to "INFO".

Valid values for max_severity: TRACE, DEBUG, INFO, WARN, ERROR, FATAL.

See also: choosing severity for log records.