Sto lavorando su api di riposo con avvio a molla. Ho bisogno di registrare tutte le richieste con parametri di input (con metodi, ad esempio GET, POST, ecc.), Percorso di richiesta, stringa di query, metodo di classe corrispondente di questa richiesta, anche la risposta di questa azione, sia il successo che gli errori.Spring Boot - Come registrare tutte le richieste e le risposte con eccezioni in un unico posto?
Per un esempio:
richiesta riuscita:
http://example.com/api/users/1
registro dovrebbe essere guardato qualcosa di simile:
{
HttpStatus: 200,
path: "api/users/1",
method: "GET",
clientIp: "0.0.0.0",
accessToken: "XHGu6as5dajshdgau6i6asdjhgjhg",
method: "UsersController.getUser",
arguments: {
id: 1
},
response: {
user: {
id: 1,
username: "user123",
email: "[email protected]"
}
},
exceptions: []
}
o richiesta con l'errore:
http://example.com/api/users/9999
Log dovrebbe b E qualcosa del genere:
{
HttpStatus: 404,
errorCode: 101,
path: "api/users/9999",
method: "GET",
clientIp: "0.0.0.0",
accessToken: "XHGu6as5dajshdgau6i6asdjhgjhg",
method: "UsersController.getUser",
arguments: {
id: 9999
},
returns: {
},
exceptions: [
{
exception: "UserNotFoundException",
message: "User with id 9999 not found",
exceptionId: "adhaskldjaso98d7324kjh989",
stacktrace: ...................
]
}
Desidero che Richiesta/Risposta sia una singola entità, con informazioni personalizzate relative a questa entità, sia in casi riusciti che in casi di errore.
Qual è la migliore pratica in primavera per ottenere ciò, potrebbe essere con i filtri? se sì, puoi fornire un esempio concreto?
(Ho giocato con @ControllerAdvice e @ExceptionHandler, ma come ho già detto, devo gestire tutte le richieste di errore e di successo in un unico posto (e un singolo registro)).
Probabilmente tramite un ServletFilter di registrazione (ad esempio http://stackoverflow.com/a/2171633/995891), in alternativa "HandlerInterceptor", ma potrebbe non funzionare correttamente con la registrazione della risposta, come indicato nella risposta: http: // www .concretepage.com/spring/spring-mvc/spring-handlerinterceptor-annotation-example-webmvcconfigureradapter - HandlerInterceptor ha comunque accesso al metodo (metodo: "UsersController.getUser"). Questo non è noto in un filtro servlet. – zapl
ancora, anche se si aggiunge un filtro o qualsiasi altra soluzione a livello di applicazione, non si registrerà tutta la richiesta, ad es. l'Errore HTTP 500 Server non verrà registrato, poiché nel momento in cui un'eccezione non gestita verrà lanciata al livello Applicazione, verrà visualizzata la pagina di errore incorporata del tomcat predefinito dopo l'ingerenza dell'eccezione e naturalmente non verrà conservato il registro. Inoltre, se si verifica la risposta dell'utente 1817243, in caso di qualsiasi eccezione egli non registrerà nuovamente la richiesta ma registrerà l'eccezione (!!). – AntJavaDev
Questo formato di log deve essere coerente con ogni carattere che hai scritto? Sembra che una traduzione JSON sia ottimale nel tuo caso: 'LogClass {getRequestAndSaveIt()} Gson.toJson (LogClass)' come pseudocode – Vale