{"id":22747502,"url":"https://github.com/resurfaceio/logger-java","last_synced_at":"2025-04-14T11:33:54.744Z","repository":{"id":3596124,"uuid":"50256881","full_name":"resurfaceio/logger-java","owner":"resurfaceio","description":"Log API calls with Java","archived":false,"fork":false,"pushed_at":"2024-01-08T14:32:52.000Z","size":557,"stargazers_count":13,"open_issues_count":6,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-28T00:45:04.986Z","etag":null,"topics":["api-logger","http-logger","java","jersey","logger-java","servlet-filter","spark-framework","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/resurfaceio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-01-23T20:26:27.000Z","updated_at":"2023-04-07T03:48:15.000Z","dependencies_parsed_at":"2024-01-08T15:59:04.177Z","dependency_job_id":null,"html_url":"https://github.com/resurfaceio/logger-java","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurfaceio%2Flogger-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurfaceio%2Flogger-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurfaceio%2Flogger-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurfaceio%2Flogger-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/resurfaceio","download_url":"https://codeload.github.com/resurfaceio/logger-java/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248872208,"owners_count":21175368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-logger","http-logger","java","jersey","logger-java","servlet-filter","spark-framework","spring-boot"],"created_at":"2024-12-11T03:16:08.702Z","updated_at":"2025-04-14T11:33:54.710Z","avatar_url":"https://github.com/resurfaceio.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# resurfaceio-logger-java\nEasily log API requests and responses to your own \u003ca href=\"https://resurface.io\"\u003esecurity data lake\u003c/a\u003e.\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.resurface/resurfaceio-logger)](https://maven-badges.herokuapp.com/maven-central/io.resurface/resurfaceio-logger)\n[![CodeFactor](https://www.codefactor.io/repository/github/resurfaceio/logger-java/badge)](https://www.codefactor.io/repository/github/resurfaceio/logger-java)\n[![License](https://img.shields.io/github/license/resurfaceio/logger-java)](https://github.com/resurfaceio/logger-java/blob/master/LICENSE)\n[![Contributing](https://img.shields.io/badge/contributions-welcome-green.svg)](https://github.com/resurfaceio/logger-java/blob/master/CONTRIBUTING.md)\n\n## Contents\n\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#dependencies\"\u003eDependencies\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#installing_with_maven\"\u003eInstalling With Maven\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#logging_from_servlet_filter\"\u003eLogging From Servlet Filter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#logging_from_spring_boot\"\u003eLogging From Spring Boot\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#logging_from_spark_framework\"\u003eLogging From Spark Framework\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#logging_from_jersey\"\u003eLogging From Jersey\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#logging_with_api\"\u003eLogging With API\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#privacy\"\u003eProtecting User Privacy\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ca name=\"dependencies\"/\u003e\n\n## Dependencies\n\nRequires Java 8+ and Java servlet classes, which are not included. No other dependencies to conflict with your app.\n\n\u003ca name=\"installing_with_maven\"/\u003e\n\n## Installing with Maven\n\nAdd this section to `pom.xml`:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.resurface\u003c/groupId\u003e\n    \u003cartifactId\u003eresurfaceio-logger\u003c/artifactId\u003e\n    \u003cversion\u003e2.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nAdd this section too if servlet classes are not already available.\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ejavax.servlet\u003c/groupId\u003e\n    \u003cartifactId\u003ejavax.servlet-api\u003c/artifactId\u003e\n    \u003cversion\u003eRELEASE\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\u003ca name=\"logging_from_servlet_filter\"/\u003e\n\n## Logging From Servlet Filter\n\nAfter \u003ca href=\"#installing_with_maven\"\u003einstalling the library\u003c/a\u003e, add a logging filter to `web.xml`.\n\n```xml\n\u003cfilter\u003e\n    \u003cfilter-name\u003eHttpLoggerForServlets\u003c/filter-name\u003e\n    \u003cfilter-class\u003eio.resurface.HttpLoggerForServlets\u003c/filter-class\u003e\n    \u003cinit-param\u003e\n        \u003cparam-name\u003eurl\u003c/param-name\u003e\n        \u003cparam-value\u003ehttp://localhost:7701/message\u003c/param-value\u003e\n    \u003c/init-param\u003e\n    \u003cinit-param\u003e\n        \u003cparam-name\u003erules\u003c/param-name\u003e\n        \u003cparam-value\u003einclude debug\u003c/param-value\u003e\n    \u003c/init-param\u003e\n\u003c/filter\u003e\n\u003cfilter-mapping\u003e\n    \u003cfilter-name\u003eHttpLoggerForServlets\u003c/filter-name\u003e\n    \u003curl-pattern\u003e/*\u003c/url-pattern\u003e\n\u003c/filter-mapping\u003e\n```\n\nAdd a CDATA section when specifying multiple rules at once like this:\n\n```xml\n    \u003cinit-param\u003e\n        \u003cparam-name\u003erules\u003c/param-name\u003e\n        \u003cparam-value\u003e\u003c![CDATA[\n            include debug\n            sample 10\n        ]]\u003e\u003c/param-value\u003e\n    \u003c/init-param\u003e\n```\n\n\u003ca name=\"logging_from_spring_boot\"/\u003e\n\n## Logging From Spring Boot\n\nAfter \u003ca href=\"#installing_with_maven\"\u003einstalling the library\u003c/a\u003e, configure a `FilterRegistrationBean`\nto add a logging servlet filter.\n\n```java\n@Bean\npublic FilterRegistrationBean httpLoggerFilter() {\n    FilterRegistrationBean frb = new FilterRegistrationBean();\n    frb.setFilter(new io.resurface.HttpLoggerForServlets());\n    frb.setName(\"HttpLoggerForServlets\");\n    frb.addUrlPatterns(\"/*\");\n    frb.addInitParameter(\"url\", \"http://localhost:7701/message\");\n    frb.addInitParameter(\"rules\", \"include debug\");\n    return frb;\n}\n```\n\n\u003ca name=\"logging_from_spark_framework\"/\u003e\n\n## Logging From Spark Framework\n\nAfter \u003ca href=\"#installing_with_maven\"\u003einstalling the library\u003c/a\u003e, create a logger and call it from the routes of interest.\n\n```java\nimport io.resurface.*;\n\nHttpLogger logger = new HttpLogger(\"http://localhost:7701/message\", \"include debug\");\n\nget(\"/hello\", (request, response) -\u003e {\n    String response_body = \"Hello World\";\n    HttpMessage.send(logger, request.raw(), response.raw(), response_body);\n    return response_body;\n});\n\npost(\"/hello_post\", (request, response) -\u003e {\n    String response_body = \"POSTED: \" + request.body();\n    HttpMessage.send(logger, request.raw(), response.raw(), response_body, request.body());\n    return response_body;\n});\n```\n\nAlternatively configure an `after` filter to log across multiple routes at once.\n\n```java\nafter((request, response) -\u003e {\n    if (response.body() != null) {  // log successful responses only, not 404/500s\n        HttpMessage.send(logger, request.raw(), response.raw(), response.body(), request.body());\n    }\n});\n```\n\n\u003ca name=\"logging_from_jersey\"/\u003e\n\n## Logging From Jersey\n\nAfter \u003ca href=\"#installing_with_maven\"\u003einstalling the library\u003c/a\u003e, register a logger as a Jersey filter/interceptor.\nNote this will only log usage when a response body is returned.\n\n```java\nResourceConfig resourceConfig = new ResourceConfig(...);\nresourceConfig.register(new io.resurface.HttpLoggerForJersey(\"http://localhost:7701/message\", \"include debug\"));\nHttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig, false);\n```\n\n\u003ca name=\"logging_with_api\"/\u003e\n\n## Logging With API\n\nLoggers can be directly integrated into your application using our [API](API.md). This requires the most effort compared with\nthe options described above, but also offers the greatest flexibility and control.\n\n[API documentation](API.md)\n\n\u003ca name=\"privacy\"/\u003e\n\n## Protecting User Privacy\n\nLoggers always have an active set of \u003ca href=\"https://resurface.io/rules.html\"\u003erules\u003c/a\u003e that control what data is logged\nand how sensitive data is masked. All of the examples above apply a predefined set of rules (`include debug`),\nbut logging rules are easily customized to meet the needs of any application.\n\n\u003ca href=\"https://resurface.io/rules.html\"\u003eLogging rules documentation\u003c/a\u003e\n\n---\n\u003csmall\u003e\u0026copy; 2016-2024 \u003ca href=\"https://resurface.io\"\u003eGraylog, Inc.\u003c/a\u003e\u003c/small\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresurfaceio%2Flogger-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fresurfaceio%2Flogger-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresurfaceio%2Flogger-java/lists"}