Arut created CXF-9189:
-------------------------

             Summary: Exceptions Not Logged When Using SseEventSink in JAX-RS 
SSE Endpoint
                 Key: CXF-9189
                 URL: https://issues.apache.org/jira/browse/CXF-9189
             Project: CXF
          Issue Type: Bug
          Components: JAX-RS, logging
    Affects Versions: 3.4.2
         Environment: {code:java}
➜ mvn --version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: C:\Users\sbnet\Maven\apache-maven-3.9.9
Java version: 11.0.24, vendor: Oracle Corporation, runtime: C:\Program 
Files\Java\jdk-11
Default locale: ru_RU, platform encoding: Cp1251
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"{code}
            Reporter: Arut


When the *@Context SseEventSink sseEventSink* parameter is added to the method, 
logs are no longer displayed in it. For example, there are some exceptions that 
are visible only during debugging, but there are no logs from them. Regular 
logging via the *LoggerFactory.getLogger* doesn't work in this case either.

 
{code:java}
@GET
@Path("/shipMovementSubscribe")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void shipMovementSubscribe(@Context Sse sse, @Context SseEventSink 
sseEventSink) {
    java.util.logging.Logger julLogger = 
java.util.logging.Logger.getLogger("org.apache.tomcat.test");
    julLogger.severe("TEST JUL MESSAGE!");
    String link = request.getHeader("gameLink");
    if (link == null || link.isBlank()) {
        throw new BadRequestException("Empty 'gameLink' request header");
    }
    Game game = ...
    SseBroadcaster broadcaster = playersConnectionsMap.get(game.getId());
    if (broadcaster == null) {
        broadcaster = sse.newBroadcaster();
        playersConnectionsMap.put(game.getId(), broadcaster);
    }
    playersConnectionsMap.get(game.getId()).onError(
            (currentSseEventSink, error) -> {
                LOG.error(error.getMessage(), error);
                throw new BadRequestException("Something went wrong while 
executing shipMovementSubscribe");
            });
    broadcaster.register(sseEventSink);
    LOG.info("SUCCESSFUL LOGGING1!");
    ExecutorService executorService = Executors.newSingleThreadExecutor();
    executorService.execute(() -> {
        try (SseEventSink sink = sseEventSink) {
            LOG.info("SUCCESSFUL LOGGING2!");
        }
    });
    if (true) {
        throw new RuntimeException("BUT THIS IS NOT LOGGING!");
    }
}
{code}
 

The messages "{*}CRITICAL TEST JUL MESSAGE!{*}", "{*}SUCCESSFUL LOGGING1!{*}" 
and "{*}SUCCESSFUL LOGGING2!{*}" are printed, but the exception with the 
message "{*}BUT THIS IS NOT LOGGING!{*}" is *not* printed.

Our *logging dependencies* are as follows:

 
{code:java}
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <!-- JCL 1.2 Implemented Over SLF4J -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j-over-slf4j</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
{code}
 

We use the following {*}CXF dependencies{*}:

 
{code:java}
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>3.4.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-sse</artifactId>
        <version>3.4.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>3.4.2</version>
    </dependency>
{code}
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to