Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
111 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
# JAX-RS Requests Logging | ||
|
||
![Dependency Check](https://github.com/chavaillaz/jaxrs-logging/actions/workflows/system-tests.yml/badge.svg) | ||
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.chavaillaz/jaxrs-logging/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.chavaillaz/jaxrs-logging) | ||
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) | ||
|
||
This library allows you to easily log (with MDC) requests and responses by annotation of JAX-RS resources. | ||
|
||
## Installation | ||
|
||
The dependency is available in maven central (see badge for version): | ||
|
||
```xml | ||
<dependency> | ||
<groupId>com.chavaillaz</groupId> | ||
<artifactId>jaxrs-logging</artifactId> | ||
</dependency> | ||
``` | ||
|
||
## Usage | ||
|
||
The logging of requests and responses is done through a filter that can be activated on a resource with: | ||
|
||
```java | ||
@Logged(requestBody = true, responseBody = true) | ||
``` | ||
|
||
It will add the following information to MDC for the request processing: | ||
|
||
* Request identifier (random UUID) | ||
* Request HTTP method | ||
* Request URI path relative to the base URI | ||
* Resource class matched by the current request | ||
* Resource method matched by the current request | ||
|
||
Once the response is computed, the request will be logged using the format: | ||
|
||
``` | ||
Processed [method] [URI] with status [status] in [duration]ms | ||
``` | ||
|
||
with the following MDC fields set: | ||
|
||
* Response HTTP status | ||
* Response duration in milliseconds | ||
* Request and response body (if activated in annotation) | ||
|
||
## Example | ||
|
||
Given an endpoint on which users can create new articles, annotated with `@Logged` | ||
(the annotation can also be on methods, for example in case of specific configuration): | ||
|
||
```java | ||
@Path("/article") | ||
@Consumes(MediaType.APPLICATION_JSON) | ||
@Produces(MediaType.APPLICATION_JSON) | ||
@Logged(requestBody = true, responseBody = true) | ||
public class ArticleResource { | ||
|
||
@POST | ||
@Path("/create") | ||
public Article create(Article article) { | ||
// Creation of the article in the database | ||
} | ||
|
||
} | ||
``` | ||
|
||
When the following request is sent: | ||
|
||
``` | ||
POST service.company.com/article | ||
Content-Type: application/json | ||
{ "content": "Something" } | ||
``` | ||
|
||
Then the following log is written: | ||
|
||
``` | ||
Processed POST /article with status 200 in 15ms | ||
``` | ||
|
||
with the following MDC fields: | ||
|
||
* `request-id: 02625ee3-03ae-4e26-a83b-74477c5824d2` | ||
* `request-method: POST` | ||
* `request-uri: /article` | ||
* `request-body: { "content": "Something" }` | ||
* `resource-class: ArticleResource` | ||
* `resource-method: create` | ||
* `response-status: 200` | ||
* `response-body: { "id" : 1, "content": "Something" }` | ||
* `duration: 15` | ||
|
||
## Contributing | ||
|
||
If you have a feature request or found a bug, you can: | ||
|
||
- Write an issue | ||
- Create a pull request | ||
|
||
If you want to contribute then | ||
|
||
- Please write tests covering all your changes | ||
- Ensure you didn't break the build by running `mvn test` | ||
- Fork the repo and create a pull request | ||
|
||
## License | ||
|
||
This project is under Apache 2.0 License. |