...
Use a spring based Aspect library that emits Markers automatically around function calls and retrofit your code to log via Luke's SLF4J for internal log messages.
Logging Library Location and Use
...
- By selection of a logging provider such as Logback or Log4j, typically via the classpath.
- By way of a provider configuration document, typically logback.xml or log4j.xml. See Providers48534506.
SLF4J
SLF4J is a logging facade, and a humble masterpiece. It combines what's common to all major, modern Java logging providers into a single interface. This decouples the caller from the provider, and encourages the use of what's universal, familiar and proven.
...
Logback is the most commonly used provider. It is generally configured by an XML document named logback.xml. See Configuration 48534506.
See HELM template https://git.onap.org/logging-analytics/tree/reference/provider/helm/logback
...
Log4j 2.X is somewhat less common than Logback, but equivalent. It is generally configured by an XML document named log4j.xml. See Configuration 48534506.
Log4j 1.X
Strongly discouraged from Beijing onwards, since 1.X is EOL, and since it does not support escaping, so its output may not be machine-readable. See https://logging.apache.org/log4j/1.2/.
...
- Use a logging facade such as SLF4J or EELF.
- Write log messages in English.
- Write meaningful messages. Consider what will be useful to consumers of logger output.
- Log at the appropriate level. Be aware of the volume of logs that will be produced.
- Safeguard the information in exceptions, and ensure it is never lost.
- Use errorcodes error codes to characterise characterize exceptions.
- Log in a machine-readable format. See Conventions.
- Log for analytics as well as troubleshooting.
...
This is the most important item of information in most log messages. See General 48534506 guidelines.
Internationalization
...
Code Block | ||
---|---|---|
| ||
if (logger.isDebugEnabled()) { logger.debug("But this WILL hurt: " + costlyToSerialize); } |
Parameterized logging is preferable.
Context
MDCs
A Mapped Diagnostic Context (MDC) allows an arbitrary string-valued attribute to be attached to a Java thread via a ThreadLocal variable. The MDC's value is then emitted with each message logged by that thread. The set of MDCs associated with a log message is serialized as unordered name-value pairs (see Text Output 48534506).
A good discussion of MDCs can be found at https://logback.qos.ch/manual/mdc.html.
...
Used as valuable URI - to annnote invoke marker
Review in terms of Marker-INVOKE 48534506 - possiblly add INVOKE-return - to filter reporting
...
This should accompany INVOKE when the invocation is synchronous.
...
SLF4J:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
public static final Marker INVOKE_SYNCHRONOUS; static { INVOKE_SYNCHRONOUS = MarkerFactory.getMarker("INVOKE"); INVOKE_SYNCHRONOUS.add(MarkerFactory.getMarker("SYNCHRONOUS")); } // ... // Generate and report invocation ID. final String invocationID = UUID.randomUUID().toString(); MDC.put(MDC_INVOCATION_ID, invocationID); try { logger.debug(INVOKE_SYNCHRONOUS, "Invoking synchronously ... "); } finally { MDC.remove(MDC_INVOCATION_ID); } // Pass invocationID as HTTP X-InvocationID header. callDownstreamSystem(invocationID, ... ); |
EELF example of SYNCHRONOUS reporting, without changing published APIs.
...
Error Codes
Errorcodes Error codes are reported as MDCs.
TODO: add to table
Exceptions should be accompanied by an errrorcodeerror code. Typically this is achieved by incorporating errorcodes error codes into your exception hierarchy and error handling. ONAP components generally do not share this kind of code, though EELF defines a marker interface (meaning it has no methods) EELFResolvableErrorEnum.
A common convention is for errorcodes error codes to have two components:
- A prefix, which identifies the origin of the error.
- A suffix, which identifies the kind of error.
...
Logs on each filebeat docker container sidecar - /var/log/onap
Excerpt |
---|
New ONAP Component ChecklistAdd this procedure to the Project Proposal Template By following a few simple rules:
Obligations fall into two categories:
You must:
|
...
|
...
|
...
|
...
They are unordered. |
What's New
(Including what WILL be new in v1.2 / R2).
...