Ich möchte eine API finden, die es mir ermöglicht, einen spezifischen kanonischen Satz von Informationen in allen meinen kritischen Protokollpunkten meiner Anwendung bereitzustellen. Genauer gesagt, es wäre eine mehrzeiligen Nachricht mit den folgenden Informationen (zusätzlich zu den Grundlagen) sein:Java Logging API für detaillierte (und mehrzeilige) Logs
- Logging Kategorie
- Kurzbeschreibung Titel
- Beschreibung
- Antwortaktion (Schadensbegrenzung) meine Anwendung
- -Details (Ausnahme Informationen usw.)
Mit einem einzigen Multi-line-Log suchen, für e nehmen xample, etwa so:
2017-11-10 14:26:59,156 [main] WARN o.s.t.c.s.ExampleClass:
Caption: Unconformable data
Description: The data provided from the X datasource in order to perform Y operation could not be translated
Response Action: Application will discard unusable data into this component's DLQ
Details: The data string "x" was not of expected Integer type
<Some stacktrace>....
Dies ist eine ausführliche Erklärung, die über genau das sehr informativ sein würde, was passiert ist, wo es aufgetreten ist, und das, was die Anwendung in Reaktion auf das Ereignis der Ausnahme machen.
Das nächste, was ich finden konnte, war die JBoss Logging API und ein Beispiel für einen Code, den ich in der ActiveMQ Artemis source gefunden habe. Das Nachrichtenformat Erklärung kann wie so in einer einzigen Datei definiert werden:
@LogMessage(level = Logger.Level.WARN)
@Message(id = 202008, value = "Failed to check Address list {0}.",
format = Message.Format.MESSAGE_FORMAT)
void failedToParseAddressList(@Cause Exception e, String addressList);
Und man würde einen line with this message in ihrem Code durch Schreiben log:
ActiveMQUtilLogger.LOGGER.failedToParseAddressList(e, addressList);
, die am nächsten, das ich zu dem, was finden konnte ich war auf der Suche nach. Sehr cool. Ich benutze JBoss jedoch nicht (und möchte auch nicht in diese API eindringen).
Ich kann LOG4J verwenden, die eine StructuredDataMessage and Structured Data Lookup hat, die in einem Layout verwendet werden kann, und ich werde standardmäßig verwenden; Mein Code könnte an einige StructuredDataMessage
Fabrik delegieren, um dies zu lösen. Es ist jedoch ein bisschen sperriger als mit dieser JBoss-API.
Hat jemand irgendwelche Vorschläge für dieses Problem - ob es eine andere API, ein Codemuster oder ein raffinierter Trick ist?
Laufen Sie in einer Art Container? Sie könnten es wahrscheinlich mit einem Muster tun, aber es würde wahrscheinlich von dem Log-Manager abhängen, den Sie verwenden. –