Best-of-breed OpenTracing utilities, instrumentations and extensions

Overview

OpenTracing Toolbox

Stability: Active Build Status Coverage Status Code Quality Release Maven Central OpenTracing License

OpenTracing Toolbox is a collection of libraries that build on top of OpenTracing and provide extensions and plugins to existing instrumentations.

  • Status: Under development and used in production

Features

  • Legacy FlowID compatibility support
  • JDBC support
  • Extensible OpenTracing Proxy (wrapper) w/ support for listeners and interceptors
  • Servlet support
  • Spring Web and Webflux support
  • Sensible defaults

Modules

FlowID

The opentracing-flowid module replaces the former zalando/tracer library by providing support for the X-Flow-ID header propagation on top of OpenTracing.

Go checkout out its README for details.

JDBC

The opentracing-jdbc module is a direct competitor to opentracing-contrib/java-jdbc.

Go checkout out its README for details.

Proxy

The opentracing-proxy module is a direct competitor to opentracing-contrib/java-api-extensions.

Go checkout out its README for details.

Servlet Extension

The opentracing-servlet-extension module is an extension to io.opentracing.contrib:opentracing-web-servlet-filter and only useful if used in conjunction.

Go checkout out its README for details.

Spring Web Extension

The opentracing-spring-web-extension module is an extension to io.opentracing.contrib:opentracing-spring-web and only useful if used in conjunction.

Go checkout out its README for details.

Spring Webflux Extension

The opentracing-spring-webflux-extension module is an extension to io.opentracing.contrib:opentracing-spring-web and only useful if used in conjunction.

Go checkout out its README for details.

Getting Help

If you have questions, concerns, bug reports, etc., please file an issue in this repository's Issue Tracker.

Getting Involved/Contributing

To contribute, simply make a pull request and add a brief description (1-2 sentences) of your addition or change. For more details, check the contribution guidelines.

Alternatives

Tracer, by design, does not provide sampling, metrics or annotations. Neither does it use the semantics of spans as most of the following projects do. If you require any of these, you're highly encouraged to try them.

Comments
  • Stacked traces should not be deactivated

    Stacked traces should not be deactivated

    Hey guys :) More of a question then an actual issue...

    I introduced Tracer in our projects and wanted to introduce transaction Id stacking (flow id stacking in Zalando speech ;) ). Unfortunately Tracer does not support this in the current version.

    My Intention is to have multiple Traces of the same name running at the same time. Basically I get a call through HTTP with an existing trace. To document where things are going from now on I add a new one to the same name (now there are two active) to make tracing of this specific part of the overall transaction easier.

    Is there an easier way of doing this? Or is this a possible feature for Tracer?

    opened by JonasJurczok 10
  • Unable to get Hystrix timeouts working

    Unable to get Hystrix timeouts working

    Using the tracer library I am unable to get Hystrix timeouts working.

    Description

    In case a Command times out it looks like the tracer library is preventing Hystrix from propagating this information. My application gets stuck.

    What is going on here?

    FYI the test is green if we uncomment plugins.registerConcurrencyStrategy(new TracerConcurrencyStrategy(tracer, delegate)); of setup()

    opened by lukasniemeier-zalando 9
  • GH-88 Improves Random128Generator performance

    GH-88 Improves Random128Generator performance

    See #88

    Baseline

    Benchmark                               Mode  Cnt         Score         Error  Units
    FlowIDGeneratorBenchmark.benchmark     thrpt   20    412334.003 ±   24319.492  ops/s
    PhraseGeneratorBenchmark.benchmark     thrpt   20    324407.107 ±   15611.498  ops/s
    Random128GeneratorBenchmark.benchmark  thrpt   20   6768561.581 ±  271955.381  ops/s
    Random64GeneratorBenchmark.benchmark   thrpt   20  19070811.389 ± 1768458.433  ops/s
    UUIDGeneratorBenchmark.benchmark       thrpt   20    466994.520 ±    9541.360  ops/s
    

    Result

    Benchmark                               Mode  Cnt         Score         Error  Units
    FlowIDGeneratorBenchmark.benchmark     thrpt   20    397152.625 ±   36858.046  ops/s
    PhraseGeneratorBenchmark.benchmark     thrpt   20    332155.255 ±   12639.661  ops/s
    Random128GeneratorBenchmark.benchmark  thrpt   20  17251424.583 ± 2940793.297  ops/s
    Random64GeneratorBenchmark.benchmark   thrpt   20  19812257.856 ±  177725.061  ops/s
    UUIDGeneratorBenchmark.benchmark       thrpt   20    457482.726 ±   16308.116  ops/s
    

    Other attempts

    Byte array

    public final class Random128Generator implements Generator {
    
        private static final byte[] DIGITS = {
                '0', '1', '2', '3', '4', '5', '6', '7',
                '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
        };
    
        @Override
        public String generate() {
            ThreadLocalRandom random = ThreadLocalRandom.current();
            byte[] bytes = new byte[128 / 8 * 2];
            for (int i = 0; i < bytes.length; i++) {
                bytes[i] = DIGITS[random.nextInt(DIGITS.length)];
            }
            return new String(bytes, US_ASCII);
        }
    }
    
    Benchmark                               Mode  Cnt         Score        Error  Units
    FlowIDGeneratorBenchmark.benchmark     thrpt   20    397249.420 ±  51845.892  ops/s
    PhraseGeneratorBenchmark.benchmark     thrpt   20    313868.810 ±  30338.359  ops/s
    Random128GeneratorBenchmark.benchmark  thrpt   20   6278747.048 ± 316635.519  ops/s
    Random64GeneratorBenchmark.benchmark   thrpt   20  19193646.981 ± 628193.199  ops/s
    UUIDGeneratorBenchmark.benchmark       thrpt   20    453820.857 ±   7525.596  ops/s
    

    Char array

    public final class Random128Generator implements Generator {
    
        private static final char[] DIGITS = {
                '0', '1', '2', '3', '4', '5', '6', '7',
                '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
        };
    
        @Override
        public String generate() {
            ThreadLocalRandom random = ThreadLocalRandom.current();
            char[] chars = new char[128 / 8 * 2];
            for (int i = 0; i < chars.length; i++) {
                chars[i] = DIGITS[random.nextInt(DIGITS.length)];
            }
            return new String(chars);
        }
    }
    
    Benchmark                               Mode  Cnt         Score        Error  Units
    FlowIDGeneratorBenchmark.benchmark     thrpt   20    424805.014 ±   9988.516  ops/s
    PhraseGeneratorBenchmark.benchmark     thrpt   20    328622.606 ±   8620.456  ops/s
    Random128GeneratorBenchmark.benchmark  thrpt   20   9582288.803 ± 276783.309  ops/s
    Random64GeneratorBenchmark.benchmark   thrpt   20  19215330.543 ± 851336.935  ops/s
    UUIDGeneratorBenchmark.benchmark       thrpt   20    453417.599 ±   5895.046  ops/s
    

    Chars cached length

    public final class Random128Generator implements Generator {
    
        private static final char[] DIGITS = {
                '0', '1', '2', '3', '4', '5', '6', '7',
                '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
        };
    
        @Override
        public String generate() {
            ThreadLocalRandom random = ThreadLocalRandom.current();
    
            int length = 128 / 8 * 2;
            char[] chars = new char[length];
            int digitCount = DIGITS.length;
            for (int i = 0; i < length; i++) {
                chars[i] = DIGITS[random.nextInt(digitCount)];
            }
            return new String(chars);
        }
    }
    
    Benchmark                               Mode  Cnt         Score        Error  Units
    FlowIDGeneratorBenchmark.benchmark     thrpt   20    438744.885 ±  10394.207  ops/s
    PhraseGeneratorBenchmark.benchmark     thrpt   20    340894.677 ±   5124.502  ops/s
    Random128GeneratorBenchmark.benchmark  thrpt   20  10066511.118 ± 269362.716  ops/s
    Random64GeneratorBenchmark.benchmark   thrpt   20  20102507.398 ± 190068.006  ops/s
    UUIDGeneratorBenchmark.benchmark       thrpt   20    461722.559 ±  29203.053  ops/s
    

    Chars remainder extracted

    public final class Random128Generator implements Generator {
    
        private static final char[] DIGITS = {
                '0', '1', '2', '3', '4', '5', '6', '7',
                '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
        };
    
        @Override
        public String generate() {
            final ThreadLocalRandom random = ThreadLocalRandom.current();
            final int length = 128 / 8 * 2;
            final char[] chars = new char[length];
            for (int i = 0; i < length; i++) {
                chars[i] = DIGITS[random.nextInt() & 15];
            }
            return new String(chars);
        }
    }
    
    Benchmark                               Mode  Cnt         Score       Error  Units
    FlowIDGeneratorBenchmark.benchmark     thrpt   20    429027.246 ± 19407.913  ops/s
    PhraseGeneratorBenchmark.benchmark     thrpt   20    347280.213 ±  3043.878  ops/s
    Random128GeneratorBenchmark.benchmark  thrpt   20  10423571.183 ± 64430.837  ops/s
    Random64GeneratorBenchmark.benchmark   thrpt   20  20679680.284 ± 93623.829  ops/s
    UUIDGeneratorBenchmark.benchmark       thrpt   20    474269.450 ±  1999.602  ops/s
    

    Chars single nextInt

    public final class Random128Generator implements Generator {
    
        private static final char[] DIGITS = {
                '0', '1', '2', '3', '4', '5', '6', '7',
                '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
        };
    
        @Override
        public String generate() {
            final ThreadLocalRandom random = ThreadLocalRandom.current();
            final int length = 128 / 8 * 2;
            final char[] chars = new char[length];
            for (int i = 0; i < length / 4; i++) {
                final int r = random.nextInt();
                chars[i * 4 + 0] = DIGITS[(r >> 8 * 0) & 0x0f];
                chars[i * 4 + 1] = DIGITS[(r >> 8 * 1) & 0x0f];
                chars[i * 4 + 2] = DIGITS[(r >> 8 * 2) & 0x0f];
                chars[i * 4 + 3] = DIGITS[(r >> 8 * 3) & 0x0f];
            }
            return new String(chars);
        }
    }
    
    Benchmark                               Mode  Cnt         Score        Error  Units
    FlowIDGeneratorBenchmark.benchmark     thrpt   20    443104.256 ±   3590.557  ops/s
    PhraseGeneratorBenchmark.benchmark     thrpt   20    324898.703 ±  22601.942  ops/s
    Random128GeneratorBenchmark.benchmark  thrpt   20  16255936.502 ± 444812.618  ops/s
    Random64GeneratorBenchmark.benchmark   thrpt   20  19729049.362 ± 455338.707  ops/s
    UUIDGeneratorBenchmark.benchmark       thrpt   20    428339.174 ±  35389.141  ops/s
    

    Chars nextInt unrolled

    public final class Random128Generator implements Generator {
    
        private static final char[] DIGITS = {
                '0', '1', '2', '3', '4', '5', '6', '7',
                '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
        };
    
        @Override
        public String generate() {
            ThreadLocalRandom random = ThreadLocalRandom.current();
            final char[] digits = DIGITS;
            char[] chars = new char[32];
    
            int r = random.nextInt();
    
            chars[0] = digits[(r >> 4 * 0) & 0x0f];
            chars[1] = digits[(r >> 4 * 1) & 0x0f];
            chars[2] = digits[(r >> 4 * 2) & 0x0f];
            chars[3] = digits[(r >> 4 * 3) & 0x0f];
            chars[4] = digits[(r >> 4 * 4) & 0x0f];
            chars[5] = digits[(r >> 4 * 5) & 0x0f];
            chars[6] = digits[(r >> 4 * 6) & 0x0f];
            chars[7] = digits[(r >> 4 * 7) & 0x0f];
    
            r = random.nextInt();
    
            chars[8] = digits[(r >> 4 * 0) & 0x0f];
            chars[9] = digits[(r >> 4 * 1) & 0x0f];
            chars[10] = digits[(r >> 4 * 2) & 0x0f];
            chars[11] = digits[(r >> 4 * 3) & 0x0f];
            chars[12] = digits[(r >> 4 * 4) & 0x0f];
            chars[13] = digits[(r >> 4 * 5) & 0x0f];
            chars[14] = digits[(r >> 4 * 6) & 0x0f];
            chars[15] = digits[(r >> 4 * 7) & 0x0f];
    
            r = random.nextInt();
    
            chars[16] = digits[(r >> 4 * 0) & 0x0f];
            chars[17] = digits[(r >> 4 * 1) & 0x0f];
            chars[18] = digits[(r >> 4 * 2) & 0x0f];
            chars[19] = digits[(r >> 4 * 3) & 0x0f];
            chars[20] = digits[(r >> 4 * 4) & 0x0f];
            chars[21] = digits[(r >> 4 * 5) & 0x0f];
            chars[22] = digits[(r >> 4 * 6) & 0x0f];
            chars[23] = digits[(r >> 4 * 7) & 0x0f];
    
            r = random.nextInt();
    
            chars[24] = digits[(r >> 4 * 0) & 0x0f];
            chars[25] = digits[(r >> 4 * 1) & 0x0f];
            chars[26] = digits[(r >> 4 * 2) & 0x0f];
            chars[27] = digits[(r >> 4 * 3) & 0x0f];
            chars[28] = digits[(r >> 4 * 4) & 0x0f];
            chars[29] = digits[(r >> 4 * 5) & 0x0f];
            chars[30] = digits[(r >> 4 * 6) & 0x0f];
            chars[31] = digits[(r >> 4 * 7) & 0x0f];
    
            return new String(chars);
        }
    }
    
    Benchmark                               Mode  Cnt         Score         Error  Units
    FlowIDGeneratorBenchmark.benchmark     thrpt   20    389890.021 ±   10933.431  ops/s
    PhraseGeneratorBenchmark.benchmark     thrpt   20    310139.927 ±    2835.439  ops/s
    Random128GeneratorBenchmark.benchmark  thrpt   20  18959431.979 ± 1625424.463  ops/s
    Random64GeneratorBenchmark.benchmark   thrpt   20  19755570.048 ±  226995.209  ops/s
    UUIDGeneratorBenchmark.benchmark       thrpt   20    443389.018 ±   18707.907  ops/s
    
    opened by AlexanderYastrebov 8
  • Release script is slightly broken

    Release script is slightly broken

    Version Jump

    1. Version was 3.0.0-RC.3
    2. I ran ./release.sh major - which created 4.0.0 - which was unexpected.

    Push release branch

    the release script aborted with

    fatal: The current branch release/4.0.0 has no upstream branch.
    To push the current branch and set the remote as upstream, use
    
        git push --set-upstream origin release/4.0.0
    

    which I fixed with

    Index: release.sh
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    ===================================================================
    diff --git a/release.sh b/release.sh
    --- a/release.sh	(revision Staged)
    +++ b/release.sh	(date 1613055669405)
    @@ -17,7 +17,7 @@
     ./mvnw versions:set -D newVersion=${next}-SNAPSHOT
     git commit -am "Development ${next}-SNAPSHOT"
     
    -git push
    +git push --set-upstream origin release/${release}
     git push --tags
     
     git checkout main
    

    This worked but raises the question why the release branch should be pushed at all. The was no previous release branch.

    Bug 
    opened by zeitlinger 6
  • Bump kotest.version from 4.3.2 to 4.4.0

    Bump kotest.version from 4.3.2 to 4.4.0

    Bumps kotest.version from 4.3.2 to 4.4.0. Updates kotest-runner-junit5-jvm from 4.3.2 to 4.4.0

    Commits
    • 3b572a5 Updated docs for new json matchers (#1988)
    • 5861bad Added domains to prop test list
    • 272b753 Added Descriptor abstraction; updated scripts to use name of containi… (#2029)
    • 25ae5c7 Updated eventually config (#2027)
    • 8486e12 Fixed script context block
    • 9fa5066 Add missing highlights in documentation (#2025)
    • beb6105 Updated eventually config to have one type parameter; removed result … (#2024)
    • a1c230f Replace until with eventually and make eventually more configurable (#2022)
    • 3ae77ed Allow registration of custom Show typeclasses #2021 (#2023)
    • 7827962 Added test for errored test including seed
    • Additional commits viewable in compare view

    Updates kotest-assertions-core-jvm from 4.3.2 to 4.4.0

    Commits
    • 3b572a5 Updated docs for new json matchers (#1988)
    • 5861bad Added domains to prop test list
    • 272b753 Added Descriptor abstraction; updated scripts to use name of containi… (#2029)
    • 25ae5c7 Updated eventually config (#2027)
    • 8486e12 Fixed script context block
    • 9fa5066 Add missing highlights in documentation (#2025)
    • beb6105 Updated eventually config to have one type parameter; removed result … (#2024)
    • a1c230f Replace until with eventually and make eventually more configurable (#2022)
    • 3ae77ed Allow registration of custom Show typeclasses #2021 (#2023)
    • 7827962 Added test for errored test including seed
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 6
  • add new module for kotlin extensions

    add new module for kotlin extensions

    Description

    This PR adds a new module that adds a few kotlin extension functions for the opentracing Tracer.

    Motivation and Context

    Kotlin developers can now benefit from less boiler plate code while enabling tracing.

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have added tests to cover my changes.
    opened by piyushmor 6
  • @Scheduled doesn't work out of the box

    @Scheduled doesn't work out of the box

    I have a spring-boot project with tracer added (more details below). Configuration is just the default one, just the trace name is configured. I'm trying to get my trace value in a @Scheduled method, but I get IllegalStateException: X-Flow-ID has not been started.

    Question: how is it supposed to work? I think the documentation on this is missing.

    Description

    • I'm running on spring-boot:1.4.6.
    • I have only tracer-spring-boot-starter:0.16.0 in dependencies.
    • I have configured only this single property for tracer: tracer.traces.X-Flow-ID=flow-id
    • I have a @Scheduled method inside of which I'm calling tracer.get("X-Flow-ID").getValue() on an @Autowired Tracer tracer field.
    • Autowiring works, but I get the following exception:
    java.lang.IllegalStateException: X-Flow-ID has not been started
    	at org.zalando.tracer.DefaultTracer.getAndCheckValue(DefaultTracer.java:102) ~[tracer-core-0.16.0.jar:na]
    	at org.zalando.tracer.DefaultTracer.access$000(DefaultTracer.java:15) ~[tracer-core-0.16.0.jar:na]
    	at org.zalando.tracer.DefaultTracer$1.getValue(DefaultTracer.java:68) ~[tracer-core-0.16.0.jar:na]
    

    Question

    I didn't really find any docs of what a "support for scheduling" means. I'm sure I'm doing something wrong, but can you point out what's missing? I was expecting that the trace will be already initialized and I can just get it's value (and send in an outgoing request).

    opened by innokenty 6
  • Trace Provisioning

    Trace Provisioning

    A common use case for stacked traces is to process a batch (outer trace) and start a specific trace per item being processed (inner trace). For event processing we keep a reference to the original trace id, so we use that as a seed. Currently we need to do this like this:

    for (final Event event : batch.getEvents()) {
        tracer.start(withFlowIdOf(event));
        try {
            consumer.consume(event);
        } finally {
            tracer.stop();
        }
    }
    
    private Function<String, String> withFlowIdOf(final Event event) {
        return $ -> event.getMetadata().getFlowId();
    }
    

    I would be nice if Event could annotate a special method like this:

    class Event {
    
        @ProvidesTrace("X-Flow-ID")
        public String getFlowId() {
            return getMetadata().getFlowId();
        }
    
    }
    
    for (final Event event : batch.getEvents()) {
        tracer.start(event);
        try {
            consumer.consume(event);
        } finally {
            tracer.stop();
        }
    }
    

    Alternatively there could be a special interface, but that would require that a) a class can only provide one and b) that every class needs to implement two methods, on for the name and one for the value.

    opened by whiskeysierra 5
  • DefaultTracer#writeTo now tolerates NoopTracer

    DefaultTracer#writeTo now tolerates NoopTracer

    Description

    When used with a NoopTracer (or generally any Span which doesn't allow extracting any useful identifier), DefaultFlow.writeTo now will just not do anything, instead of throwing an IllegalStateException.

    Motivation and Context

    It allows running an application when no proper tracing implementation is available, e.g. when running it locally. This should fix #522.

    Types of changes

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    If any user depended on an exception being thrown by Flow.writeTo(...) in this case, this would break. But as there is no documentation for writeTo, it's unclear whether this is part of the contract or not.

    Checklist:

    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have added tests to cover my changes.

    I didn't find any documentation of writeTo, so I don't think there is any which needs to be updated.

    opened by ePaul 4
  • Ensure correlation via baggage on forwarded spans

    Ensure correlation via baggage on forwarded spans

    Description

    • change active-span-check to assert on span-id only to not fail if spans are wrapped (forwarded) e.g. due to auto-tagging.

    Motivation and Context

    • ensures baggage items are put into MDC as configured for log correlation.

    Types of changes

    • [x] Bug fix (non-breaking change which fixes an issue)

    Checklist:

    • [x] I have added tests to cover my changes.
    opened by lukasniemeier-zalando 4
  • Added servlet extension

    Added servlet extension

    Description

    Motivation and Context

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have added tests to cover my changes.
    opened by whiskeysierra 4
  • build(deps-dev): bump mockito-core from 4.4.0 to 4.11.0

    build(deps-dev): bump mockito-core from 4.4.0 to 4.11.0

    Bumps mockito-core from 4.4.0 to 4.11.0.

    Release notes

    Sourced from mockito-core's releases.

    v4.11.0

    Changelog generated by Shipkit Changelog Gradle Plugin

    4.11.0

    v4.10.0

    Changelog generated by Shipkit Changelog Gradle Plugin

    4.10.0

    v4.9.0

    Changelog generated by Shipkit Changelog Gradle Plugin

    4.9.0

    v4.8.1

    Changelog generated by Shipkit Changelog Gradle Plugin

    4.8.1

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump spring-boot-dependencies from 2.7.0 to 3.0.1

    build(deps): bump spring-boot-dependencies from 2.7.0 to 3.0.1

    Bumps spring-boot-dependencies from 2.7.0 to 3.0.1.

    Release notes

    Sourced from spring-boot-dependencies's releases.

    v3.0.1

    :lady_beetle: Bug Fixes

    • Fix typo in LocalDevToolsAutoConfiguration logging #33615
    • No warning is given when <springProfile> is used in a Logback <root> block #33610
    • Auto-configure PropagationWebGraphQlInterceptor for tracing propagation #33542
    • WebClient instrumentation fails with IllegalArgumentException when adapting to WebClientExchangeTagsProvider #33483
    • Reactive observation auto-configuration does not declare order for WebFilter #33444
    • Web server fails to start due to "Resource location must not be null" when attempting to use a PKCS 11 KeyStore #33433
    • Actuator health endpoint for neo4j throws NoSuchElementException and always returns Status.DOWN #33428
    • Anchors in YAML configuration files throw UnsupportedOperationException #33404
    • ZipkinRestTemplateSender is not customizable #33399
    • AOT doesn't work with Logstash Logback Encoder #33387
    • Maven process-aot goal fails when release version is set in Maven compiler plugin #33382
    • DependsOnDatabaseInitializationPostProcessor re-declares bean dependencies at native image runtime #33374
    • @SpringBootTest now throws a NullPointerException rather than a helpful IllegalStateException when @SpringBootConfiguration is not found #33371
    • bootBuildImage always trys to create a native image due to bootJar always adding a META-INF/native-image/argfile to the jar #33363

    :notebook_with_decorative_cover: Documentation

    • Improve gradle plugin tags documentation #33617
    • Improve maven plugin tags documentation #33616
    • Fix typo in tomcat accesslog checkExists doc #33512
    • Documented Java compiler level is wrong #33505
    • Fix typo in documentation #33453
    • Update instead of replace environment in bootBuildImage documentation #33424
    • Update the reference docs to document the need to declare the native-maven-plugin when using buildpacks to create a native image #33422
    • Document that the shutdown endpoint is not intended for use when deploying a war to a servlet container #33410
    • Reinstate GraphQL testing documentaion #33407
    • Description of NEVER in Sanitize Sensitive Values isn't formatted correctly #33398

    :hammer: Dependency Upgrades

    • Upgrade to AspectJ 1.9.19 #33586
    • Upgrade to Byte Buddy 1.12.20 #33587
    • Upgrade to Couchbase Client 3.4.1 #33588
    • Upgrade to Dropwizard Metrics 4.2.14 #33589
    • Upgrade to Elasticsearch Client 8.5.3 #33590
    • Upgrade to Hibernate 6.1.6.Final #33591
    • Upgrade to HttpClient 4.5.14 #33592
    • Upgrade to HttpCore 4.4.16 #33593
    • Upgrade to Infinispan 14.0.4.Final #33594
    • Upgrade to Jaybird 4.0.8.java11 #33595
    • Upgrade to Jetty 11.0.13 #33596
    • Upgrade to jOOQ 3.17.6 #33597
    • Upgrade to Kotlin 1.7.22 #33598
    • Upgrade to Lettuce 6.2.2.RELEASE #33599
    • Upgrade to MongoDB 4.8.1 #33600
    • Upgrade to MSSQL JDBC 11.2.2.jre17 #33601
    • Upgrade to Native Build Tools Plugin 0.9.19 #33602

    ... (truncated)

    Commits
    • 837947c Release v3.0.1
    • 5929d95 Merge branch '2.7.x'
    • b10b788 Next development version (v2.7.8-SNAPSHOT)
    • f588793 Update copyright year of changed files
    • 0254619 Merge branch '2.7.x'
    • e4772cf Update copyright year of changed files
    • 2e7ca6f Warning if <springProfile> is used in phase 2 model elements
    • 2ed512d Use model.deepMarkAsSkipped in SpringProfileModelHandler
    • 532fed3 Increase couchbase connection timeout for tests
    • 9562a2c Merge branch '2.7.x'
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps-dev): bump rest-assured from 4.4.0 to 5.3.0

    build(deps-dev): bump rest-assured from 4.4.0 to 5.3.0

    Bumps rest-assured from 4.4.0 to 5.3.0.

    Changelog

    Sourced from rest-assured's changelog.

    Changelog 5.3.0 (2022-11-18)

    • Added (much) improved support for CSRF tokens when sent as a header and not in a form
    • Enable the use of relaxedHTTPSValidation with two-way ssl (issue #1631) (thanks to Mathieu Amblard for pull request)
    • Lastest Spring Framework 6 is now supported again (thanks to Marcin Grzejszczak for pull request)
    • Removed content assignment from asPrettyString() (thanks to Bartłomiej Chabowski for pull request)
    • Allow contentType() to accept Spring MediaType in Spring MockMvc module (thanks to Hantsy Bai for pull request)
    • Upgraded kotlin from 1.7.10 to 1.7.20 in the kotlin module
    • Upgraded groovy from 4.0.1 to 4.0.6
    • Updated jackson from version 2.13.2 to 2.13.4

    Changelog 5.2.1 (2022-11-18)

    • Lastest Spring Framework 6 is now supported again (thanks to Marcin Grzejszczak for pull request)

    Changelog 5.2.0 (2022-09-09)

    • Improved FilterContext used in Filters by adding the method FilterContext#hasValue(name, object). This makes it easier to check if a value exists and is equal to the expect object.

    • Introducing a much improved CSRF (cross-site request forgery) support. For example: given(). csrf("/users"). formParm("firstName", "John"). formParm("lastName", "Doe"). when(). post("/users"). then(). statusCode(200);

      This will first make a GET request to /users (due to csrf("/users")) to get an HTML page that contains the CSRF token. Rest Assured will then automatically try to find the input field that contains the CSRF token and include in the POST to /users.

      Here's an example of what Rest Assured expects as a response for the GET request to /users:

    ... (truncated)

    Commits
    • ebbedc7 [maven-release-plugin] prepare release rest-assured-5.3.0
    • 1e1f325 Updated jackson from version 2.13.2 to 2.13.4
    • 83fcc55 Removing @​ignore
    • 7bd9124 [ci skip] Preparing for release
    • fb926ec [ci skip] Updated changelog to reflect the latest changes
    • 00bc18b [ci skip] Updated changelog to reflect the latest changes
    • 481a55a [ci skip] Updated changelog to reflect the latest changes
    • afbf13b chore: add contentType to accept Spring MedieType (#1625)
    • 14ef2c6 Upgraded groovy from 4.0.1 to 4.0.6
    • da69e1b Upgraded kotlin from 1.7.10 to 1.7.20 in the kotlin module
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump ktlint-maven-plugin from 1.13.0 to 1.15.2

    build(deps): bump ktlint-maven-plugin from 1.13.0 to 1.15.2

    Bumps ktlint-maven-plugin from 1.13.0 to 1.15.2.

    Release notes

    Sourced from ktlint-maven-plugin's releases.

    1.15.2

    Enhancement:

    • #512: Upgraded ktlint.version from 0.47.0 to 0.47.1

    Other changes:

    • #514: Upgraded codecov/codecov-action from 3.1.0 to 3.1.1

    1.15.1

    Bug fix:

    1.15.0

    Enhancement:

    • #495: Upgraded ktlint.version from 0.46.1 to 0.47.0

    Other changes:

    • #476: Upgraded jsonassert from 1.5.0 to 1.5.1
    • #477: Upgraded dokka-maven-plugin from 1.7.0 to 1.7.10
    • #478: Refactored to reuse GitHub Actions workflows
    • #479: Changed GPG key import method
    • #480: Extracted maven-periodic-cache-action
    • #481: Changed to deploy on release
    • #482: GitHub Actions caching improvements
    • #483: Inlined CI shell scripts
    • #484: Moved settings.xml into CI workflow
    • #488: Changed to build with Java 11
    • #487: Upgraded kotlin-parent from 3.2.0 to 3.3.0
    • #489: Upgraded animal-sniffer-maven-plugin from 1.20 to 1.21
    • #490: Fixed Kotlin .editorconfig
    • #492: Upgraded Maven from 3.6.1 to 3.8.6
    • #491: Fixed GitHub Actions color output
    • #493: Upgraded doxia-sink-api-ktx from 1.4.0 to 1.5.0
    • #494: Upgraded animal-sniffer-maven-plugin from 1.21 to 1.22
    • #496: Added documentation for Java 17
    • #497: Added documentation for Java 17 to site
    • #498: Removed JCenter config
    • #499: Upgraded kotlin-maven-plugin-tools from 0.9.26 to 1.0.0
    • #500: Removed GitHub plugin repo config
    • #501: Added Sonatype Lift config
    • #502: Updated Maven POM CI details
    • #503: Renamed master branch to main
    • #504: Updated Git config
    • #505: Added kotlinc.xml to .gitignore

    ... (truncated)

    Commits
    • f9c828e [maven-release-plugin] prepare release 1.15.2
    • 6d0511c Upgraded codecov/codecov-action from 3.1.0 to 3.1.1 (#514)
    • d777d51 Upgraded ktlint.version from 0.47.0 to 0.47.1 (#512)
    • bf52acd Merge pull request #510 from gantsign/release-1.15.1
    • 9ec1239 [maven-release-plugin] prepare for next development iteration
    • 6017e23 [maven-release-plugin] prepare release 1.15.1
    • 488a6b3 Fixed .editorconfig loading (#509)
    • a56fb8d Merge pull request #506 from gantsign/release-1.15.0
    • 0ddac87 [maven-release-plugin] prepare for next development iteration
    • 562f4f1 [maven-release-plugin] prepare release 1.15.0
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump kotlin.version from 1.7.0 to 1.7.10

    build(deps): bump kotlin.version from 1.7.0 to 1.7.10

    Bumps kotlin.version from 1.7.0 to 1.7.10. Updates kotlin-bom from 1.7.0 to 1.7.10

    Commits

    Updates kotlin-maven-plugin from 1.7.0 to 1.7.10

    Updates kotlin-stdlib from 1.7.0 to 1.7.10

    Commits

    Updates kotlin-stdlib-common from 1.7.0 to 1.7.10

    Commits

    Updates kotlin-stdlib-jdk8 from 1.7.0 to 1.7.10

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump log4j.version from 2.17.2 to 2.18.0

    build(deps): bump log4j.version from 2.17.2 to 2.18.0

    Bumps log4j.version from 2.17.2 to 2.18.0. Updates log4j-api from 2.17.2 to 2.18.0

    Updates log4j-core from 2.17.2 to 2.18.0

    Updates log4j-slf4j-impl from 2.17.2 to 2.18.0

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(4.2.3)
Owner
Zalando SE
The org page for Zalando, Europe's leading online fashion platform. Visit opensource.zalando.com for project stats.
Zalando SE
Echopraxia - Java Logging API with clean and simple structured logging and conditional & contextual features. Logback implementation based on logstash-logback-encoder.

Echopraxia Echopraxia is a Java logging API that and is designed around structured logging, rich context, and conditional logging. There is a Logback-

Terse Systems 43 Nov 30, 2022
A Java library that facilitates reading, writing and processing of sensor events and raw GNSS measurements encoded according to the Google's GNSS Logger application format.

google-gnss-logger This library facilitates reading, writing and processing of sensor events and raw GNSS measurements encoded according to the Google

Giulio Scattolin 5 Dec 21, 2022
An extensible Java library for HTTP request and response logging

Logbook: HTTP request and response logging Logbook noun, /lɑɡ bʊk/: A book in which measurements from the ship's log are recorded, along with other sa

Zalando SE 1.3k Dec 29, 2022
P6Spy is a framework that enables database data to be seamlessly intercepted and logged with no code changes to the application.

p6spy P6Spy is a framework that enables database data to be seamlessly intercepted and logged with no code changes to existing application. The P6Spy

p6spy 1.8k Dec 27, 2022
Logstash - transport and process your logs, events, or other data

Logstash Logstash is part of the Elastic Stack along with Beats, Elasticsearch and Kibana. Logstash is a server-side data processing pipeline that ing

elastic 13.2k Jan 5, 2023
Free and open source log management

Graylog Welcome! Graylog is an open source log management platform. You can read more about the project on our website and check out the documentation

Graylog 6.4k Jan 6, 2023
The reliable, generic, fast and flexible logging framework for Java.

About logback Thank you for your interest in logback, the reliable, generic, fast and flexible logging library for Java. The Logback documentation can

QOS.CH Sarl 2.6k Jan 7, 2023
The Apache Software Foundation 3k Jan 4, 2023
tinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android

tinylog 2 Example import org.tinylog.Logger; public class Application { public static void main(String[] args) { Logger.info("Hello

tinylog.org 547 Dec 30, 2022
Log sourcing is method of trying to map all the ERROR and WARN logs you have in your system in a cost effective way.

log-sourcing Log sourcing is method of trying to map all the ERROR and WARN logs you have in your system in a cost effective way. The basic idea is th

Shimon Magal 12 Apr 19, 2021
tinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android

tinylog 2 Example import org.tinylog.Logger; public class Application { public static void main(String[] args) { Logger.info("Hello

tinylog.org 551 Jan 4, 2023
Logging filters for Spring WebFlux client and server request/responses

webflux-log Logging filters for Spring WebFlux client and server request/responses. Usage To log WebClient request/response, do the following specify

null 10 Nov 29, 2022
PortalLogger - Logs portals into a text file and in chat

Logs portals into a text file and in chat. Useful if afk flying under bedrock. Feel free to add to your client The logs are stored in .minecraft/ARTEMIS/PortalLogger

null 7 Dec 2, 2022
Best-of-breed OpenTracing utilities, instrumentations and extensions

OpenTracing Toolbox OpenTracing Toolbox is a collection of libraries that build on top of OpenTracing and provide extensions and plugins to existing i

Zalando SE 181 Oct 15, 2022
Best-of-breed OpenTracing utilities, instrumentations and extensions

OpenTracing Toolbox OpenTracing Toolbox is a collection of libraries that build on top of OpenTracing and provide extensions and plugins to existing i

Zalando SE 181 Oct 15, 2022
Netflix, Inc. 809 Dec 28, 2022
Reactive Streams Utilities - Future standard utilities library for Reactive Streams.

Reactive Streams Utilities This is an exploration of what a utilities library for Reactive Streams in the JDK might look like. Glossary: A short gloss

Lightbend 61 May 27, 2021
Jaeger Bindings for Java OpenTracing API

Jaeger's Tracing Instrumentation Library for Java Intended to be used with Jaeger backend, but can also be configured to send traces to Zipkin. Implem

Jaeger - Distributed Tracing Platform 485 Dec 5, 2022
Eclipse Foundation 3k Dec 31, 2022