diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..6e53241 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,4 @@ +# https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax +* @sschnabe @rpahli @fabian-schlegel @wistefan +.github/workflows/* @kokuwaio-bot @sschnabe @rpahli @fabian-schlegel @wistefan +pom.xml @kokuwaio-bot @sschnabe @rpahli @fabian-schlegel @wistefan diff --git a/.github/README.md b/.github/README.md deleted file mode 100644 index f74f3b7..0000000 --- a/.github/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Micronaut Logging support - -Enhanced logging for Micronaut using MDC or request header. - -[![Maven Central](https://img.shields.io/maven-central/v/io.kokuwa.micronaut/micronaut-logging.svg?label=Maven%20Central)](https://central.sonatype.com/artifact/io.kokuwa.micronaut/micronaut-logging) -[![license](https://img.shields.io/badge/License-EUPL%201.2-blue)](https://git.kokuwa.io/kokuwaio/micronaut-logging/src/branch/main/LICENSE) -[![prs](https://img.shields.io/gitea/pull-requests/open/kokuwaio/micronaut-logging?gitea_url=https%3A%2F%2Fgit.kokuwa.io)](https://git.kokuwa.io/kokuwaio/micronaut-logging/pulls) -[![issues](https://img.shields.io/gitea/issues/open/kokuwaio/micronaut-logging?gitea_url=https%3A%2F%2Fgit.kokuwa.io)](https://git.kokuwa.io/kokuwaio/micronaut-logging/issues) -[![build](https://ci.kokuwa.io/api/badges/kokuwaio/micronaut-logging/status.svg)](https://ci.kokuwa.io/repos/kokuwaio/micronaut-logging/) - -For more documention see: [git.kokuwa.io/kokuwaio/micronaut-logging](https://git.kokuwa.io/kokuwaio/micronaut-logging) diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..4004022 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,25 @@ +version: 2 +updates: + - package-ecosystem: maven + directory: / + schedule: + interval: daily + - package-ecosystem: github-actions + directory: / + schedule: + interval: monthly + day: monday + - package-ecosystem: maven + directory: / + target-branch: 3.x + schedule: + interval: daily + ignore: + - dependency-name: io.micronaut:* + update-types: [version-update:semver-major] + - package-ecosystem: github-actions + directory: / + target-branch: 3.x + schedule: + interval: monthly + day: monday diff --git a/.github/settings.xml b/.github/settings.xml new file mode 100644 index 0000000..44fd9ea --- /dev/null +++ b/.github/settings.xml @@ -0,0 +1,16 @@ + + + + + + sonatype-nexus + ${env.SERVER_USERNAME} + ${env.SERVER_PASSWORD} + + + github.com + nope + ${env.GIT_ACTION_TOKEN} + + + diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..ed8d009 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,31 @@ +name: Build + +on: + push: + branches: [main, "*.x"] + +jobs: + + build: + runs-on: ubuntu-latest + env: + MAVEN_ARGS: --batch-mode --color=always --no-transfer-progress --settings=.github/settings.xml + steps: + - run: git config --global user.name "${{ vars.KOKUWA_IO_BOT_NAME }}" + - run: git config --global user.email "${{ vars.KOKUWA_IO_BOT_EMAIL }}" + - uses: actions/checkout@v3 + with: + token: ${{ secrets.GIT_ACTION_TOKEN }} + - uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + cache: maven + - run: mvn $MAVEN_ARGS dependency:go-offline + - run: mvn $MAVEN_ARGS deploy + env: + SERVER_USERNAME: ${{ secrets.SONATYPE_NEXUS_USERNAME }} + SERVER_PASSWORD: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} + - run: mvn $MAVEN_ARGS site-deploy + env: + GIT_ACTION_TOKEN: ${{ secrets.GIT_ACTION_TOKEN }} diff --git a/.github/workflows/dependabot.yaml b/.github/workflows/dependabot.yaml new file mode 100644 index 0000000..ed63eca --- /dev/null +++ b/.github/workflows/dependabot.yaml @@ -0,0 +1,17 @@ +name: Dependabot + +on: pull_request_target + +jobs: + auto-merge: + runs-on: ubuntu-latest + if: ${{ github.actor == 'dependabot[bot]' }} + steps: + - run: gh pr review --approve "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GITHUB_TOKEN: ${{ secrets.GIT_ACTION_TOKEN }} + - run: gh pr merge --auto --squash "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GITHUB_TOKEN: ${{ secrets.GIT_ACTION_TOKEN }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml new file mode 100644 index 0000000..f50580b --- /dev/null +++ b/.github/workflows/pr.yaml @@ -0,0 +1,41 @@ +name: PullRequest + +on: pull_request + +jobs: + + yaml: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: ibiqlik/action-yamllint@v3 + with: + format: colored + strict: true + + markdown: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: avto-dev/markdown-lint@v1 + with: + args: /github/workspace + + build: + runs-on: ubuntu-latest + env: + MAVEN_ARGS: --batch-mode --color=always --no-transfer-progress -Dmaven.test.redirectTestOutputToFile=false + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + cache: maven + - run: mvn $MAVEN_ARGS dependency:go-offline + - run: mvn $MAVEN_ARGS verify + - run: mvn $MAVEN_ARGS site + - uses: actions/upload-artifact@v3 + if: always() + with: + path: target/site diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..4c719f1 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,39 @@ +name: Release + +on: workflow_dispatch + +jobs: + build: + runs-on: ubuntu-latest + env: + MAVEN_ARGS: --batch-mode --color=always --no-transfer-progress --settings=.github/settings.xml + steps: + - run: git config --global user.name "${{ vars.KOKUWA_IO_BOT_NAME }}" + - run: git config --global user.email "${{ vars.KOKUWA_IO_BOT_EMAIL }}" + - uses: actions/checkout@v3 + with: + token: ${{ secrets.GIT_ACTION_TOKEN }} + - uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.GPG_PASSPHRASE }} + git_user_signingkey: true + git_commit_gpgsign: true + - uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + cache: maven + server-id: sonatype-nexus + server-username: SERVER_USERNAME + server-password: SERVER_PASSWORD + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: GPG_PASSPHRASE + - run: mvn $MAVEN_ARGS dependency:go-offline + - run: mvn $MAVEN_ARGS release:prepare -Darguments="$MAVEN_ARGS" + - run: mvn $MAVEN_ARGS release:perform -Darguments="$MAVEN_ARGS" + env: + SERVER_USERNAME: ${{ secrets.SONATYPE_NEXUS_USERNAME }} + SERVER_PASSWORD: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} + GIT_ACTION_TOKEN: ${{ secrets.GIT_ACTION_TOKEN }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.justfile b/.justfile deleted file mode 100644 index 81f407b..0000000 --- a/.justfile +++ /dev/null @@ -1,12 +0,0 @@ -# https://just.systems/man/en/ - -[private] -@default: - just --list --unsorted - -# Run linter. -@lint: - docker run --rm --read-only --volume=$(pwd):$(pwd):ro --workdir=$(pwd) kokuwaio/yamllint - docker run --rm --read-only --volume=$(pwd):$(pwd):rw --workdir=$(pwd) kokuwaio/markdownlint --fix - docker run --rm --read-only --volume=$(pwd):$(pwd):ro --workdir=$(pwd) kokuwaio/renovate-config-validator - docker run --rm --read-only --volume=$(pwd):$(pwd):ro --workdir=$(pwd) woodpeckerci/woodpecker-cli lint diff --git a/.woodpecker/deploy.yaml b/.woodpecker/deploy.yaml deleted file mode 100644 index 11f903e..0000000 --- a/.woodpecker/deploy.yaml +++ /dev/null @@ -1,16 +0,0 @@ -when: - instance: ci.kokuwa.io - repo: kokuwaio/micronaut-logging - event: [manual, push] - branch: main - path: [.woodpecker/deploy.yaml, pom.xml, src/main/**] - -steps: - - maven: - image: maven:3.9.10-eclipse-temurin-17 - commands: mvn deploy --settings=.woodpecker/maven/settings.xml - environment: - MAVEN_GPG_KEY: {from_secret: woodpecker_gpg_key} - SONATYPE_ORG_USERNAME: {from_secret: sonatype_org_username} - SONATYPE_ORG_PASSWORD: {from_secret: sonatype_org_password} diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml deleted file mode 100644 index 74bb114..0000000 --- a/.woodpecker/lint.yaml +++ /dev/null @@ -1,21 +0,0 @@ -when: - event: [manual, pull_request, push] - branch: main - path: [.woodpecker/lint.yaml, renovate.json, "**/*.y*ml", "**/*.md"] - -steps: - - renovate: - image: kokuwaio/renovate-config-validator - depends_on: [] - when: [path: [.woodpecker/lint.yaml, renovate.json]] - - yaml: - image: kokuwaio/yamllint - depends_on: [] - when: [path: [.woodpecker/lint.yaml, .yamllint.yaml, "**/*.y*ml"]] - - markdown: - image: kokuwaio/markdownlint - depends_on: [] - when: [path: [.woodpecker/lint.yaml, .markdownlint.yaml, "**/*.md"]] diff --git a/.woodpecker/maven/settings.xml b/.woodpecker/maven/settings.xml deleted file mode 100644 index 57ad1cb..0000000 --- a/.woodpecker/maven/settings.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - false - /woodpecker/.m2 - - - git.kokuwa.io - ${env.FORGEJO_USERNAME} - ${env.FORGEJO_PASSWORD} - - - sonatype.org - ${env.SONATYPE_ORG_USERNAME} - ${env.SONATYPE_ORG_PASSWORD} - - - - - http://mirror.woodpecker.svc.cluster.local/maven2 - central - - - diff --git a/.woodpecker/release.yaml b/.woodpecker/release.yaml deleted file mode 100644 index 21a190e..0000000 --- a/.woodpecker/release.yaml +++ /dev/null @@ -1,29 +0,0 @@ -when: - instance: ci.kokuwa.io - repo: kokuwaio/micronaut-logging - event: deployment - branch: main - -steps: - - maven: - image: maven:3.9.10-eclipse-temurin-17 - commands: - # setup git with ssk key signing - - git config user.email "$GIT_USER_EMAIL" - - git config user.name "$GIT_USER_NAME" - - git config commit.gpgsign true - - git config gpg.format ssh - - git config user.signingkey /run/secrets/sign.pub - - install -m 400 /dev/null /run/secrets/sign && echo "$GIT_SIGN_KEY" > /run/secrets/sign - - install -m 444 /dev/null /run/secrets/sign.pub && echo "$GIT_SIGN_PUB" > /run/secrets/sign.pub - # release - - mvn release:prepare release:perform --settings=.woodpecker/maven/settings.xml - environment: - MAVEN_GPG_KEY: {from_secret: woodpecker_gpg_key} - GIT_SIGN_KEY: {from_secret: woodpecker_sign_key} - GIT_SIGN_PUB: {from_secret: woodpecker_sign_pub} - FORGEJO_USERNAME: {from_secret: woodpecker_username} - FORGEJO_PASSWORD: {from_secret: woodpecker_password} - SONATYPE_ORG_USERNAME: {from_secret: sonatype_org_username} - SONATYPE_ORG_PASSWORD: {from_secret: sonatype_org_password} diff --git a/.woodpecker/verify.yaml b/.woodpecker/verify.yaml deleted file mode 100644 index c947ea8..0000000 --- a/.woodpecker/verify.yaml +++ /dev/null @@ -1,9 +0,0 @@ -when: - event: [manual, pull_request] - path: [.woodpecker/verify.yaml, pom.xml, src/**] - -steps: - - test: - image: maven:3.9.10-eclipse-temurin-17 - commands: mvn verify --settings=.woodpecker/maven/settings.xml diff --git a/.yamllint.yaml b/.yamllint similarity index 83% rename from .yamllint.yaml rename to .yamllint index 21966f2..8011808 100644 --- a/.yamllint.yaml +++ b/.yamllint @@ -13,3 +13,7 @@ rules: quoted-strings: quote-type: double required: only-when-needed + + # allow everything on keys + truthy: + check-keys: false diff --git a/LICENSE b/LICENSE index dacd3ae..261eeb9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,288 +1,201 @@ - - EUROPEAN UNION PUBLIC LICENCE v. 1.2 - EUPL © the European Union 2007, 2016 - -This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined -below) which is provided under the terms of this Licence. Any use of the Work, -other than as authorised under this Licence is prohibited (to the extent such -use is covered by a right of the copyright holder of the Work). - -The Work is provided under the terms of this Licence when the Licensor (as -defined below) has placed the following notice immediately following the -copyright notice for the Work: - - Licensed under the EUPL - -or has expressed by any other means his willingness to license under the EUPL. - -1. Definitions - -In this Licence, the following terms have the following meaning: - -- ‘The Licence’: this Licence. - -- ‘The Original Work’: the work or software distributed or communicated by the - Licensor under this Licence, available as Source Code and also as Executable - Code as the case may be. - -- ‘Derivative Works’: the works or software that could be created by the - Licensee, based upon the Original Work or modifications thereof. This Licence - does not define the extent of modification or dependence on the Original Work - required in order to classify a work as a Derivative Work; this extent is - determined by copyright law applicable in the country mentioned in Article 15. - -- ‘The Work’: the Original Work or its Derivative Works. - -- ‘The Source Code’: the human-readable form of the Work which is the most - convenient for people to study and modify. - -- ‘The Executable Code’: any code which has generally been compiled and which is - meant to be interpreted by a computer as a program. - -- ‘The Licensor’: the natural or legal person that distributes or communicates - the Work under the Licence. - -- ‘Contributor(s)’: any natural or legal person who modifies the Work under the - Licence, or otherwise contributes to the creation of a Derivative Work. - -- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of - the Work under the terms of the Licence. - -- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, - renting, distributing, communicating, transmitting, or otherwise making - available, online or offline, copies of the Work or providing access to its - essential functionalities at the disposal of any other natural or legal - person. - -2. Scope of the rights granted by the Licence - -The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, -sublicensable licence to do the following, for the duration of copyright vested -in the Original Work: - -- use the Work in any circumstance and for all usage, -- reproduce the Work, -- modify the Work, and make Derivative Works based upon the Work, -- communicate to the public, including the right to make available or display - the Work or copies thereof to the public and perform publicly, as the case may - be, the Work, -- distribute the Work or copies thereof, -- lend and rent the Work or copies thereof, -- sublicense rights in the Work or copies thereof. - -Those rights can be exercised on any media, supports and formats, whether now -known or later invented, as far as the applicable law permits so. - -In the countries where moral rights apply, the Licensor waives his right to -exercise his moral right to the extent allowed by law in order to make effective -the licence of the economic rights here above listed. - -The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to -any patents held by the Licensor, to the extent necessary to make use of the -rights granted on the Work under this Licence. - -3. Communication of the Source Code - -The Licensor may provide the Work either in its Source Code form, or as -Executable Code. If the Work is provided as Executable Code, the Licensor -provides in addition a machine-readable copy of the Source Code of the Work -along with each copy of the Work that the Licensor distributes or indicates, in -a notice following the copyright notice attached to the Work, a repository where -the Source Code is easily and freely accessible for as long as the Licensor -continues to distribute or communicate the Work. - -4. Limitations on copyright - -Nothing in this Licence is intended to deprive the Licensee of the benefits from -any exception or limitation to the exclusive rights of the rights owners in the -Work, of the exhaustion of those rights or of other applicable limitations -thereto. - -5. Obligations of the Licensee - -The grant of the rights mentioned above is subject to some restrictions and -obligations imposed on the Licensee. Those obligations are the following: - -Attribution right: The Licensee shall keep intact all copyright, patent or -trademarks notices and all notices that refer to the Licence and to the -disclaimer of warranties. The Licensee must include a copy of such notices and a -copy of the Licence with every copy of the Work he/she distributes or -communicates. The Licensee must cause any Derivative Work to carry prominent -notices stating that the Work has been modified and the date of modification. - -Copyleft clause: If the Licensee distributes or communicates copies of the -Original Works or Derivative Works, this Distribution or Communication will be -done under the terms of this Licence or of a later version of this Licence -unless the Original Work is expressly distributed only under this version of the -Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee -(becoming Licensor) cannot offer or impose any additional terms or conditions on -the Work or Derivative Work that alter or restrict the terms of the Licence. - -Compatibility clause: If the Licensee Distributes or Communicates Derivative -Works or copies thereof based upon both the Work and another work licensed under -a Compatible Licence, this Distribution or Communication can be done under the -terms of this Compatible Licence. For the sake of this clause, ‘Compatible -Licence’ refers to the licences listed in the appendix attached to this Licence. -Should the Licensee's obligations under the Compatible Licence conflict with -his/her obligations under this Licence, the obligations of the Compatible -Licence shall prevail. - -Provision of Source Code: When distributing or communicating copies of the Work, -the Licensee will provide a machine-readable copy of the Source Code or indicate -a repository where this Source will be easily and freely available for as long -as the Licensee continues to distribute or communicate the Work. - -Legal Protection: This Licence does not grant permission to use the trade names, -trademarks, service marks, or names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the copyright notice. - -6. Chain of Authorship - -The original Licensor warrants that the copyright in the Original Work granted -hereunder is owned by him/her or licensed to him/her and that he/she has the -power and authority to grant the Licence. - -Each Contributor warrants that the copyright in the modifications he/she brings -to the Work are owned by him/her or licensed to him/her and that he/she has the -power and authority to grant the Licence. - -Each time You accept the Licence, the original Licensor and subsequent -Contributors grant You a licence to their contributions to the Work, under the -terms of this Licence. - -7. Disclaimer of Warranty - -The Work is a work in progress, which is continuously improved by numerous -Contributors. It is not a finished work and may therefore contain defects or -‘bugs’ inherent to this type of development. - -For the above reason, the Work is provided under the Licence on an ‘as is’ basis -and without warranties of any kind concerning the Work, including without -limitation merchantability, fitness for a particular purpose, absence of defects -or errors, accuracy, non-infringement of intellectual property rights other than -copyright as stated in Article 6 of this Licence. - -This disclaimer of warranty is an essential part of the Licence and a condition -for the grant of any rights to the Work. - -8. Disclaimer of Liability - -Except in the cases of wilful misconduct or damages directly caused to natural -persons, the Licensor will in no event be liable for any direct or indirect, -material or moral, damages of any kind, arising out of the Licence or of the use -of the Work, including without limitation, damages for loss of goodwill, work -stoppage, computer failure or malfunction, loss of data or any commercial -damage, even if the Licensor has been advised of the possibility of such damage. -However, the Licensor will be liable under statutory product liability laws as -far such laws apply to the Work. - -9. Additional agreements - -While distributing the Work, You may choose to conclude an additional agreement, -defining obligations or services consistent with this Licence. However, if -accepting obligations, You may act only on your own behalf and on your sole -responsibility, not on behalf of the original Licensor or any other Contributor, -and only if You agree to indemnify, defend, and hold each Contributor harmless -for any liability incurred by, or claims asserted against such Contributor by -the fact You have accepted any warranty or additional liability. - -10. Acceptance of the Licence - -The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ -placed under the bottom of a window displaying the text of this Licence or by -affirming consent in any other similar way, in accordance with the rules of -applicable law. Clicking on that icon indicates your clear and irrevocable -acceptance of this Licence and all of its terms and conditions. - -Similarly, you irrevocably accept this Licence and all of its terms and -conditions by exercising any rights granted to You by Article 2 of this Licence, -such as the use of the Work, the creation by You of a Derivative Work or the -Distribution or Communication by You of the Work or copies thereof. - -11. Information to the public - -In case of any Distribution or Communication of the Work by means of electronic -communication by You (for example, by offering to download the Work from a -remote location) the distribution channel or media (for example, a website) must -at least provide to the public the information requested by the applicable law -regarding the Licensor, the Licence and the way it may be accessible, concluded, -stored and reproduced by the Licensee. - -12. Termination of the Licence - -The Licence and the rights granted hereunder will terminate automatically upon -any breach by the Licensee of the terms of the Licence. - -Such a termination will not terminate the licences of any person who has -received the Work from the Licensee under the Licence, provided such persons -remain in full compliance with the Licence. - -13. Miscellaneous - -Without prejudice of Article 9 above, the Licence represents the complete -agreement between the Parties as to the Work. - -If any provision of the Licence is invalid or unenforceable under applicable -law, this will not affect the validity or enforceability of the Licence as a -whole. Such provision will be construed or reformed so as necessary to make it -valid and enforceable. - -The European Commission may publish other linguistic versions or new versions of -this Licence or updated versions of the Appendix, so far this is required and -reasonable, without reducing the scope of the rights granted by the Licence. New -versions of the Licence will be published with a unique version number. - -All linguistic versions of this Licence, approved by the European Commission, -have identical value. Parties can take advantage of the linguistic version of -their choice. - -14. Jurisdiction - -Without prejudice to specific agreement between parties, - -- any litigation resulting from the interpretation of this License, arising - between the European Union institutions, bodies, offices or agencies, as a - Licensor, and any Licensee, will be subject to the jurisdiction of the Court - of Justice of the European Union, as laid down in article 272 of the Treaty on - the Functioning of the European Union, - -- any litigation arising between other parties and resulting from the - interpretation of this License, will be subject to the exclusive jurisdiction - of the competent court where the Licensor resides or conducts its primary - business. - -15. Applicable Law - -Without prejudice to specific agreement between parties, - -- this Licence shall be governed by the law of the European Union Member State - where the Licensor has his seat, resides or has his registered office, - -- this licence shall be governed by Belgian law if the Licensor has no seat, - residence or registered office inside a European Union Member State. - -Appendix - -‘Compatible Licences’ according to Article 5 EUPL are: - -- GNU General Public License (GPL) v. 2, v. 3 -- GNU Affero General Public License (AGPL) v. 3 -- Open Software License (OSL) v. 2.1, v. 3.0 -- Eclipse Public License (EPL) v. 1.0 -- CeCILL v. 2.0, v. 2.1 -- Mozilla Public Licence (MPL) v. 2 -- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 -- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for - works other than software -- European Union Public Licence (EUPL) v. 1.1, v. 1.2 -- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong - Reciprocity (LiLiQ-R+). - -The European Commission may update this Appendix to later versions of the above -licences without producing a new version of the EUPL, as long as they provide -the rights granted in Article 2 of this Licence and protect the covered Source -Code from exclusive appropriation. - -All other changes or additions to this Appendix require the production of a new -EUPL version. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 627aea3..919ed66 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,8 @@ # Micronaut Logging support -Enhanced logging for Micronaut using MDC or request header. - -[![Maven Central](https://img.shields.io/maven-central/v/io.kokuwa.micronaut/micronaut-logging.svg?label=Maven%20Central)](https://central.sonatype.com/artifact/io.kokuwa.micronaut/micronaut-logging) -[![license](https://img.shields.io/badge/License-EUPL%201.2-blue)](https://git.kokuwa.io/kokuwaio/micronaut-logging/src/branch/main/LICENSE) -[![prs](https://img.shields.io/gitea/pull-requests/open/kokuwaio/micronaut-logging?gitea_url=https%3A%2F%2Fgit.kokuwa.io)](https://git.kokuwa.io/kokuwaio/micronaut-logging/pulls) -[![issues](https://img.shields.io/gitea/issues/open/kokuwaio/micronaut-logging?gitea_url=https%3A%2F%2Fgit.kokuwa.io)](https://git.kokuwa.io/kokuwaio/micronaut-logging/issues) -[![build](https://ci.kokuwa.io/api/badges/kokuwaio/micronaut-logging/status.svg)](https://ci.kokuwa.io/repos/kokuwaio/micronaut-logging/) +[![Apache License 2.0](https://img.shields.io/github/license/kokuwaio/micronaut-logging)](https://github.com/kokuwaio/micronaut-logging/blob/main/LICENSE) +[![Maven Central](https://img.shields.io/maven-central/v/io.kokuwa.micronaut/micronaut-logging)](https://central.sonatype.com/namespace/io.kokuwa.micronaut) +[![Build](https://img.shields.io/github/actions/workflow/status/kokuwaio/micronaut-logging/build.yaml?branch=main)](https://github.com/kokuwaio/micronaut-logging/actions/workflows/build.yaml?query=branch%3Amain) Include in your `pom.xml`: diff --git a/docs/features/logback_mdc_level.md b/docs/features/logback_mdc_level.md index ee1e853..53887d5 100644 --- a/docs/features/logback_mdc_level.md +++ b/docs/features/logback_mdc_level.md @@ -7,7 +7,7 @@ This can be used to change the log level based on MDC valus. E.g. change log lev Property | Description | Default -------- | ----------- | ------- `logger.mdc.enabled` | MDC enabled? | `true` -`logger.mdc.` | MDC key to use | `` +`logger.mdc.` | MDC key to use | `logger.mdc..key` | MDC key override, see complex example below for usage | `` `logger.mdc..level` | log level to use | `TRACE` `logger.mdc..loggers` | passlist of logger names, matches all loggers if empty | `[]` diff --git a/pom.xml b/pom.xml index b06dc54..2d62c2c 100644 --- a/pom.xml +++ b/pom.xml @@ -2,13 +2,20 @@ 4.0.0 + + io.kokuwa.maven + maven-parent + 0.6.12 + + + io.kokuwa.micronaut micronaut-logging - 5.0.0 + 4.0.1 Logging Support for Micronaut Enhanced logging using MDC or request header. - https://git.kokuwa.io/kokuwaio/micronaut-logging + https://github.com/kokuwaio/micronaut-logging 2020 Kokuwa.io @@ -16,47 +23,55 @@ - EUPL-1.2 - https://eupl.eu/1.2/en + Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt repo - stephan.schnabel + sschnabe Stephan Schnabel - https://schnabel.org - stephan@schnabel.org + stephan@grayc.de + https://github.com/sschnabe + GrayC GmbH + https://grayc.de Europe/Berlin - https://git.kokuwa.io/kokuwaio/micronaut-logging - scm:git:https://git.kokuwa.io/kokuwaio/micronaut-logging.git - scm:git:https://git.kokuwa.io/kokuwaio/micronaut-logging.git - 5.0.0 + https://github.com/kokuwaio/micronaut-logging + scm:git:https://github.com/kokuwaio/micronaut-logging.git + scm:git:https://github.com/kokuwaio/micronaut-logging.git + 4.0.1 - forgejo - https://git.kokuwa.io/kokuwaio/micronaut-logging/issues + github + https://github.com/kokuwaio/micronaut-logging/issues - woodpecker - https://ci.kokuwa.io/repos/kokuwaio/micronaut-logging + github + https://github.com/kokuwaio/micronaut-logging/actions - - - sonatype.org - https://central.sonatype.com/repository/maven-snapshots/ - - - 2025-06-27T18:09:08Z - UTF-8 - 17 + + + + + + 17 + 17 + class + + + + + + 4.1.1 + @@ -64,7 +79,7 @@ io.micronaut.platform micronaut-platform - 4.9.0 + ${version.io.micronaut} pom import @@ -141,120 +156,23 @@ - verify - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.14.0 - - class - true - true - true - -Xlint:all,-processing - - - io.micronaut - micronaut-inject-java - - - - - - org.apache.maven.plugins - maven-deploy-plugin - 3.1.4 - - - org.apache.maven.plugins - maven-gpg-plugin - 3.2.7 - - - org.apache.maven.plugins - maven-install-plugin - 3.1.4 - - - org.apache.maven.plugins - maven-invoker-plugin - 3.9.0 - - - org.apache.maven.plugins - maven-jar-plugin - 3.4.2 - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.11.2 - - - org.apache.maven.plugins - maven-release-plugin - 3.1.1 - - verify - check - deploy - deploy,release - true - @{prefix} prepare release @{releaseLabel} [CI SKIP] - @{project.version} - - - - org.apache.maven.plugins - maven-resources-plugin - 3.3.1 - - ISO-8859-1 - - - - org.apache.maven.plugins - maven-source-plugin - 3.3.1 - - - org.apache.maven.plugins - maven-surefire-plugin - 3.5.3 - - - org.codehaus.mojo - tidy-maven-plugin - 1.4.0 - - - org.sonatype.central - central-publishing-maven-plugin - 0.8.0 - - - net.revelc.code.formatter - formatter-maven-plugin - 2.27.0 - - ${project.basedir}/src/eclipse/formatter.xml - - - - net.revelc.code - impsort-maven-plugin - 1.12.0 - - true - java.,javax.,jakarta.,org. - - - - + + + org.apache.maven.plugins + maven-compiler-plugin + + + + io.micronaut + micronaut-inject-java + ${version.io.micronaut} + + + + + org.apache.maven.plugins @@ -266,201 +184,10 @@ integration-test verify - - ${project.build.directory}/its - true - test - false - true - - - - - - - - org.apache.maven.plugins - maven-install-plugin - - - default-install - - - - - dev - - - !env.CI - - - - true - - - - - org.codehaus.mojo - tidy-maven-plugin - - - validate - - pom - - - - - - net.revelc.code - impsort-maven-plugin - - - validate - - sort - - - - - - net.revelc.code.formatter - formatter-maven-plugin - - - validate - - format - - - - - - - - - check - - - env.CI - - - - - - org.codehaus.mojo - tidy-maven-plugin - - - validate - - check - - - - - - net.revelc.code - impsort-maven-plugin - - - validate - - check - - - - - - net.revelc.code.formatter - formatter-maven-plugin - - - validate - - validate - - - - - - - - - deploy - - - env.CI - - - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - - - jar - - - - - - - - org.apache.maven.plugins - maven-gpg-plugin - - - - sign - - - bc - - - - - - - - - - release - - - - org.sonatype.central - central-publishing-maven-plugin - true - - sonatype.org - true - published - - - - - - diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 47fe869..0000000 --- a/renovate.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["local>infrastructure/renovate-config", ":reviewer(stephan.schnabel)"] -} diff --git a/src/eclipse/formatter.xml b/src/eclipse/formatter.xml deleted file mode 100644 index 61186a2..0000000 --- a/src/eclipse/formatter.xml +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/it/invoker.properties b/src/it/invoker.properties deleted file mode 100644 index 7920ff9..0000000 --- a/src/it/invoker.properties +++ /dev/null @@ -1,3 +0,0 @@ -invoker.environmentVariables.KUBERNETES_SERVICE_HOST= -invoker.environmentVariables.LOGBACK_APPENDER= -invoker.environmentVariables.GOOGLE_CLOUD_PROJECT= diff --git a/src/it/level-from-micronaut/postbuild.bsh b/src/it/level-from-micronaut/postbuild.bsh index 026881f..a280b60 100644 --- a/src/it/level-from-micronaut/postbuild.bsh +++ b/src/it/level-from-micronaut/postbuild.bsh @@ -7,13 +7,12 @@ for (String log : logs) { if (!log.contains("test-output-marker")) { continue; } - if (java.util.regex.Pattern.matches(expected, log.replaceAll("\u001B\\[[;\\d]*m", ""))) { + if (java.util.regex.Pattern.matches(expected, log)) { return true; } else { System.out.println("marker found, but formatting invalid:"); System.out.println("[EXPECTED] " + expected); System.out.println("[ACTUAL] " + log); - System.out.println("[BASE64] " + Base64.getEncoder().encodeToString(log.getBytes())); return false; } } diff --git a/src/it/log-text/postbuild.bsh b/src/it/log-text/postbuild.bsh index 40e2f91..aa337ea 100644 --- a/src/it/log-text/postbuild.bsh +++ b/src/it/log-text/postbuild.bsh @@ -7,13 +7,12 @@ for (String log : logs) { if (!log.contains("test-output-marker")) { continue; } - if (java.util.regex.Pattern.matches(expected, log.replaceAll("\u001B\\[[;\\d]*m", ""))) { + if (java.util.regex.Pattern.matches(expected, log)) { return true; } else { System.out.println("marker found, but formatting invalid:"); System.out.println("[EXPECTED] " + expected); System.out.println("[ACTUAL] " + log); - System.out.println("[BASE64] " + Base64.getEncoder().encodeToString(log.getBytes())); return false; } } diff --git a/src/it/pom.xml b/src/it/pom.xml index 35f3594..07f915c 100644 --- a/src/it/pom.xml +++ b/src/it/pom.xml @@ -18,9 +18,38 @@ - 2025-06-27T00:00:00Z - UTF-8 - 17 + + + + + + @project.build.sourceEncoding@ + + @maven.compiler.source@ + @maven.compiler.target@ + true + true + true + true + false + + + + + + + + @version.org.apache.maven.plugins.compiler@ + @version.org.apache.maven.plugins.install@ + @version.org.apache.maven.plugins.jar@ + @version.org.apache.maven.plugins.resources@ + @version.org.apache.maven.plugins.surefire@ + + + + @project.version@ + @version.io.micronaut@ + @@ -28,12 +57,12 @@ io.kokuwa.micronaut micronaut-logging - @project.version@ + ${version.io.kokuwa.micronaut.logging} io.micronaut.platform micronaut-platform - 4.9.0 + ${version.io.micronaut} pom import @@ -66,30 +95,36 @@ org.apache.maven.plugins maven-compiler-plugin - 3.14.0 + ${version.org.apache.maven.plugins.compiler} - class - true - true - true - -Xlint:all,-processing io.micronaut micronaut-inject-java + ${version.io.micronaut} + + org.apache.maven.plugins + maven-install-plugin + ${version.org.apache.maven.plugins.install} + + + org.apache.maven.plugins + maven-jar-plugin + ${version.org.apache.maven.plugins.jar} + org.apache.maven.plugins maven-resources-plugin - 3.3.1 + ${version.org.apache.maven.plugins.resources} org.apache.maven.plugins maven-surefire-plugin - 3.5.3 + ${version.org.apache.maven.plugins.surefire} @@ -116,6 +151,26 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + default-jar + + + + + + org.apache.maven.plugins + maven-install-plugin + + + default-install + + + + diff --git a/src/main/java/io/kokuwa/micronaut/logging/LogbackUtil.java b/src/main/java/io/kokuwa/micronaut/logging/LogbackUtil.java index bb21701..f02ee78 100644 --- a/src/main/java/io/kokuwa/micronaut/logging/LogbackUtil.java +++ b/src/main/java/io/kokuwa/micronaut/logging/LogbackUtil.java @@ -4,14 +4,13 @@ import java.util.Objects; import java.util.Optional; import java.util.function.Supplier; -import jakarta.inject.Singleton; - import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.turbo.TurboFilter; import io.micronaut.context.annotation.BootstrapContextCompatible; import io.micronaut.context.annotation.Requires; +import jakarta.inject.Singleton; /** * Utility class for Logback operations. diff --git a/src/main/java/io/kokuwa/micronaut/logging/http/level/LogLevelServerFilter.java b/src/main/java/io/kokuwa/micronaut/logging/http/level/LogLevelServerFilter.java index 6626fee..ae8475b 100644 --- a/src/main/java/io/kokuwa/micronaut/logging/http/level/LogLevelServerFilter.java +++ b/src/main/java/io/kokuwa/micronaut/logging/http/level/LogLevelServerFilter.java @@ -3,9 +3,6 @@ package io.kokuwa.micronaut.logging.http.level; import java.util.Map; import java.util.Optional; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.PreDestroy; - import org.reactivestreams.Publisher; import ch.qos.logback.classic.turbo.TurboFilter; @@ -20,6 +17,8 @@ import io.micronaut.http.annotation.Filter; import io.micronaut.http.filter.ServerFilterChain; import io.micronaut.http.filter.ServerFilterPhase; import io.micronaut.runtime.context.scope.Refreshable; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; /** * Http request logging filter. diff --git a/src/main/java/io/kokuwa/micronaut/logging/mdc/MDCTurboFilterConfigurer.java b/src/main/java/io/kokuwa/micronaut/logging/mdc/MDCTurboFilterConfigurer.java index de87997..7f4b176 100644 --- a/src/main/java/io/kokuwa/micronaut/logging/mdc/MDCTurboFilterConfigurer.java +++ b/src/main/java/io/kokuwa/micronaut/logging/mdc/MDCTurboFilterConfigurer.java @@ -46,7 +46,7 @@ public class MDCTurboFilterConfigurer implements LoggingSystem { } @Override - public final void refresh() { + public void refresh() { mdcs = environment.getPropertyEntries(PREFIX); initialized = false; diff --git a/src/test/java/io/kokuwa/micronaut/logging/http/AbstractFilterTest.java b/src/test/java/io/kokuwa/micronaut/logging/http/AbstractFilterTest.java index 4587dcb..b7c89cc 100644 --- a/src/test/java/io/kokuwa/micronaut/logging/http/AbstractFilterTest.java +++ b/src/test/java/io/kokuwa/micronaut/logging/http/AbstractFilterTest.java @@ -7,19 +7,18 @@ import static org.junit.jupiter.api.Assertions.fail; import java.util.Map; import java.util.function.Consumer; -import jakarta.inject.Inject; - import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; -import ch.qos.logback.classic.Level; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.nimbusds.jose.JOSEException; import com.nimbusds.jwt.JWTClaimsSet; + +import ch.qos.logback.classic.Level; import io.kokuwa.micronaut.logging.AbstractTest; import io.micronaut.core.annotation.Nullable; import io.micronaut.core.util.CollectionUtils; @@ -38,6 +37,7 @@ import io.micronaut.security.rules.SecurityRule; import io.micronaut.security.token.jwt.signature.SignatureGeneratorConfiguration; import io.micronaut.serde.annotation.Serdeable; import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; /** * Test for {@link HttpServerFilter}.