Coder Social home page Coder Social logo

quarkus-logging-logback's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quarkus-logging-logback's Issues

Quarkus - quarkus-logging-logback issues with TimeBasedRollingPolicy

Hello,
as i told you in the google group :
https://groups.google.com/g/quarkus-dev/c/dr0tPawdbhQ

I'm having an issue with a quarkus sample project using quarkus logging logback , JVM mode
when i add this kind of Policy :
< r o l l i n g P o l i c y class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

An error occurs :
Cannot read field "fileNamePattern" because "this.tbrp" is null
(tbrp means TimeBasedRollingPolicy i suppose)

I made a zip quarkus-sample-log.zip of my project (intellij with quarkus configuration)

I explain in the README.md fil how to reproduce the issue, hope it will help ...

quarkus-sample-log.zip

Failed to load class "org.slf4j.impl.StaticLoggerBinder"

I am testing the library and it works just fine in dev, but when I run my jar I get this:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Should slf4j dependencies (below) be added manually in order to work out?

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${version}</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>${version}</version>
</dependency>

Thanks!

Using a different logback file via command line or application properties

Hello,

I wanted to know if it is possible to specify a different logback xml file via command line

something like java jar app.jar -Dlogging.config=some-other-logback.xml

or via application properties (?).

Also, for Docker usage in pom:
<docker.command.suffix>--logging.config=file:./config/logback.xml</docker.command.suffix>

I looked into the lib code and didnt find implementation for this.

Thank you!

How does it work internally? Where are the limits?

Interesting extension, but how does it work?
I suppose it is adapting logback config to jboss-logging instead of making logback the actual logging backend, no?
So things like TurboFilter won't work?

Some docs on this would come in handy.

Use system and environment variables in logback.xml

  1. The quarkus logback extension could mention more clearly that you still need to add the logback jars

  2. I need a different setup depending on the quarkus profile set, something like this exists for Spring boot already:
    https://stackoverflow.com/questions/57596037/how-to-select-logback-appender-based-on-property-file-or-environment-variable

Also, we would need access to the current Quarkus profile system variable from the logback appender.

SECRET
backend
${quarkus.profile}
0.9

  1. It would be nice to even be able to easily retrieve (in the logback.xml) infos from the Maven pom, like the project version.

Native build error fileNamePattern Logback

Hello ,

When i try to build my quarkus application with native mode i have this error ( on jvm mode it's work fine )

java.lang.IllegalStateException: FileNamePattern [/tmp/project-thm/thm-requests.%i.log.zip] does not contain a valid IntegerToken

My logback appender :

   <appender name="RequestLogger" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/thm-requests.log</File>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS"};%X{correlationId};%m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_PATH}/thm-requests.%i.log.zip</fileNamePattern>
            <maxIndex>20</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>
    </appender>

Any idea to solve this problem ?
Thanks

Logback Variable Substitution does not work as expected

Hello @stuartwdouglas ,

I want to use the logback variable substitution feature. Unfortunately it does not work as expected.

I created an example project here

Example Class with logging

package org.acme;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Path("/hello")
public class GreetingResource {

    private final Logger log = LoggerFactory.getLogger(GreetingResource.class);

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
      log.debug("Hello Logback Debug Level");
      log.info("Hello Logback Info Level");
      log.warn("Hello Logback Warn Level");
      return "Hello from RESTEasy";
    }
}

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false">
  <appender name="Appender" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>
        %black(%d{ISO8601}) [%blue(%t)] %highlight(%-5level)[ traceId=%X{traceId} spanId=%X{spanId} ] %yellow(%C{1}): %msg%n%throwable
      </Pattern>
    </layout>
  </appender>


  <if condition='property("QUARKUS_PROFILE").contains("production")'>
    <then>
      <root>
        <level value="WARN"/>
        <appender-ref ref="Appender"/>
      </root>
    </then>
    <else>
      <root>
        <level value="DEBUG"/>
        <appender-ref ref="Appender"/>
      </root>
    </else>
  </if>
</configuration>

log messages

11:42:10,387 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:42:10,389 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender$$delayed]
11:42:10,390 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [Appender]
11:42:10,397 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - This appender no longer admits a layout as a sub-component, set an encoder instead.
11:42:10,397 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
11:42:10,397 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
11:42:10,465 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to DEBUG
11:42:10,465 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [Appender] to Logger[ROOT]
11:42:10,465 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

2022-12-15 11:42:10,824 [Quarkus Main Thread] INFO [ traceId= spanId= ] i.q.b.r.Timing: quarkus-logback-janino 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.14.3.Final) started in 2.411s. Listening on: http://localhost:8080
2022-12-15 11:42:10,827 [Quarkus Main Thread] INFO [ traceId= spanId= ] i.q.b.r.Timing: Profile dev activated. Live Coding activated.
2022-12-15 11:42:10,827 [Quarkus Main Thread] INFO [ traceId= spanId= ] i.q.b.r.Timing: Installed features: [cdi, logging-logback, resteasy, smallrye-context-propagation, vertx]
2022-12-15 11:42:18,623 [executor-thread-0] INFO [ traceId= spanId= ] o.a.GreetingResource: Hello Logback Info Level
2022-12-15 11:42:18,623 [executor-thread-0] WARN [ traceId= spanId= ] o.a.GreetingResource: Hello Logback Warn Level

As you can see, logback sets the root logger to debug, but the loglevel debug is not printed

I don't understand why this happens. Can you explain what I did wrong?

Does not compatible with new quarkus version

Quarkus version is hardcoded inside extension and cause of the problem after migration to new quarkus(2.3.0.Final at the moment).
stacktrace:

Execution failed for task ':quarkusGenerateCode'.
> Could not resolve all dependencies for configuration ':quarkusDeploymentConfiguration'.
   > Could not resolve io.quarkus:quarkus-arc:2.3.0.Final.
     Required by:
         project :
      > Cannot choose between the following variants of io.quarkus:quarkus-arc:2.3.0.Final:
          - io.quarkus:quarkus-arc-deployment:2.1.1.Final
          - io.quarkus:quarkus-arc-deployment:2.3.0.Final
        All of them match the consumer attributes:
          - Variant 'io.quarkus:quarkus-arc-deployment:2.1.1.Final' capability io.quarkus:quarkus-arc-deployment-capability:2.1.1.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
          - Variant 'io.quarkus:quarkus-arc-deployment:2.3.0.Final' capability io.quarkus:quarkus-arc-deployment-capability:2.3.0.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
   > Could not resolve io.quarkus:quarkus-core:2.1.1.Final.
     Required by:
         project :
      > Cannot choose between the following variants of io.quarkus:quarkus-core:2.3.0.Final:
          - io.quarkus:quarkus-core-deployment:2.1.1.Final
          - io.quarkus:quarkus-core-deployment:2.3.0.Final
        All of them match the consumer attributes:
          - Variant 'io.quarkus:quarkus-core-deployment:2.1.1.Final' capability io.quarkus:quarkus-core-deployment-capability:2.1.1.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
          - Variant 'io.quarkus:quarkus-core-deployment:2.3.0.Final' capability io.quarkus:quarkus-core-deployment-capability:2.3.0.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
   > Could not resolve io.quarkus:quarkus-arc:2.1.1.Final.
     Required by:
         project :
      > Cannot choose between the following variants of io.quarkus:quarkus-arc:2.3.0.Final:
          - io.quarkus:quarkus-arc-deployment:2.1.1.Final
          - io.quarkus:quarkus-arc-deployment:2.3.0.Final
        All of them match the consumer attributes:
          - Variant 'io.quarkus:quarkus-arc-deployment:2.1.1.Final' capability io.quarkus:quarkus-arc-deployment-capability:2.1.1.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
          - Variant 'io.quarkus:quarkus-arc-deployment:2.3.0.Final' capability io.quarkus:quarkus-arc-deployment-capability:2.3.0.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
   > Could not resolve io.quarkus:quarkus-core:2.3.0.Final.
     Required by:
         project :
      > Cannot choose between the following variants of io.quarkus:quarkus-core:2.3.0.Final:
          - io.quarkus:quarkus-core-deployment:2.1.1.Final
          - io.quarkus:quarkus-core-deployment:2.3.0.Final
        All of them match the consumer attributes:
          - Variant 'io.quarkus:quarkus-core-deployment:2.1.1.Final' capability io.quarkus:quarkus-core-deployment-capability:2.1.1.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
          - Variant 'io.quarkus:quarkus-core-deployment:2.3.0.Final' capability io.quarkus:quarkus-core-deployment-capability:2.3.0.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
   > Could not resolve io.quarkus:quarkus-arc:2.3.0.Final.
     Required by:
         project : > io.quarkus:quarkus-universe-bom:2.3.0.Final
      > Cannot choose between the following variants of io.quarkus:quarkus-arc:2.3.0.Final:
          - io.quarkus:quarkus-arc-deployment:2.1.1.Final
          - io.quarkus:quarkus-arc-deployment:2.3.0.Final
        All of them match the consumer attributes:
          - Variant 'io.quarkus:quarkus-arc-deployment:2.1.1.Final' capability io.quarkus:quarkus-arc-deployment-capability:2.1.1.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
          - Variant 'io.quarkus:quarkus-arc-deployment:2.3.0.Final' capability io.quarkus:quarkus-arc-deployment-capability:2.3.0.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
   > Could not resolve io.quarkus:quarkus-core:2.1.1.Final.
     Required by:
         project : > io.quarkus:quarkus-universe-bom:2.3.0.Final
      > Cannot choose between the following variants of io.quarkus:quarkus-core:2.3.0.Final:
          - io.quarkus:quarkus-core-deployment:2.1.1.Final
          - io.quarkus:quarkus-core-deployment:2.3.0.Final
        All of them match the consumer attributes:
          - Variant 'io.quarkus:quarkus-core-deployment:2.1.1.Final' capability io.quarkus:quarkus-core-deployment-capability:2.1.1.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it
          - Variant 'io.quarkus:quarkus-core-deployment:2.3.0.Final' capability io.quarkus:quarkus-core-deployment-capability:2.3.0.Final:
              - Unmatched attribute:
                  - Provides org.gradle.status 'release' but the consumer didn't ask for it

I changed quarkus version for logback extension and build it locally, seems all functionality works properly.
Would be good to force this extension to inherit version of quarkus from the project and do not worry about it in the future.

quarkus-logback which requires at least 1.2.10

I've just added quarkus-logback but get this error on startup:

Caused by: java.lang.RuntimeException: ch.qos.logback:logback-core version 1.2.9 is not compatible with quarkus-logback which requires at least 1.2.10 please use the correct logback version

Which comes from:

+--- io.quarkus:quarkus-universe-bom:2.7.5.Final
|    +--- ch.qos.logback:logback-core:1.2.9 (c)

when I try set a strict version:

    // ch.qos.logback:logback-core version 1.2.9 is not compatible with quarkus-logback
    // which requires at least 1.2.10 please use the correct logback version.
    implementation("ch.qos.logback:logback-core") {
        version {
            strictly '1.2.10'
        }
    }

I get a dependency mismatch:

Could not determine the dependencies of task ':compileJava'.
> Could not resolve all dependencies for configuration ':quarkusDependency'.
   > Could not resolve ch.qos.logback:logback-core:{strictly 1.2.10}.
     Required by:
         project :
      > Cannot find a version of 'ch.qos.logback:logback-core' that satisfies the version constraints:
           Dependency path 'com.ono:example:unspecified' --> 'ch.qos.logback:logback-core:{strictly 1.2.10}'
           Constraint path 'com.ono:example:unspecified' --> 'io.quarkus:quarkus-universe-bom:2.7.5.Final' (enforced-platform-runtime) --> 'ch.qos.logback:logback-core:1.2.9'

   > Could not resolve ch.qos.logback:logback-core:1.2.9.
     Required by:
         project : > io.quarkus:quarkus-universe-bom:2.7.5.Final
      > Cannot find a version of 'ch.qos.logback:logback-core' that satisfies the version constraints:
           Dependency path 'com.ono:example:unspecified' --> 'ch.qos.logback:logback-core:{strictly 1.2.10}'
           Constraint path 'com.ono:example:unspecified' --> 'io.quarkus:quarkus-universe-bom:2.7.5.Final' (enforced-platform-runtime) --> 'ch.qos.logback:logback-core:1.2.9'

Use different logging setups / environment

It would be great to be able to dynamically define the target(s) to log to depending on the current environment.
On DEV and TEST I do want to log on the console, on staging and prod I do want to log to a remote logging SaaS (Bugsnag).

At the moment I am doing this like this:

    <root level="ERROR">
        <appender-ref ref="${LOGBACK_APPENDER:-STDOUT}"/>
        <appender-ref ref="FILE-ROLLING"/>
    </root>

--
So I have to set -DLOGBACK_APPENDER=BUGSNAG in the docker file, and "STDOUT" is the default.
This works, but it would be much nicer to define this centrally in the application.properties, which support different environments now also anyway.

so in application-prod.properties I would set:
-DLOGBACK_APPENDER=STDOUT


This way I could toggle between STDOUT logging and "SaaS Logging".
Even nicer(!) would be to define a whole collection of loggers for each environment, but at this point with the default logback configuration I wouldnt really know how to make that work.

Example:
PROD Logging:
File Rolling, Bugsnag
STAGING LOGGING:
Bugsnag
DEV, TEST Logging:
STDOUT

RuntimeException with Quarkus 3.1.0.Final

I'm getting this error while running tests on 3.1.0.Final.
Everything works with previous release.

Caused by: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor#init threw an exception: java.lang.NoSuchMethodError: 'io.quarkus.bootstrap.model.AppModel io.quarkus.deployment.pkg.builditem.CurateOutcomeBuildItem.getEffectiveModel()'
	at io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor.init(LoggingLogbackProcessor.java:190)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:282)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
	at java.base/java.lang.Thread.run(Thread.java:833)
	at org.jboss.threads.JBossThread.run(JBossThread.java:501)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:335)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:252)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:60)
	at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:223)
	at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:607)
	at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:655)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllCallbacks$12(ClassBasedTestDescriptor.java:395)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeBeforeAllCallbacks(ClassBasedTestDescriptor.java:395)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:211)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:84)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:148)
	... 37 more

Quarkus 2.7.3 + quarkus-logging-logback 0.10.0

java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor#init threw an exception: java.lang.NoClassDefFoundError: io/quarkus/bootstrap/resolver/update/DefaultArtifactVersion
at io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor.doVersionCheck(LoggingLogbackProcessor.java:196)
at io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor.init(LoggingLogbackProcessor.java:92)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:882)
at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
at java.base/java.lang.Thread.run(Thread.java:833)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.ClassNotFoundException: io.quarkus.bootstrap.resolver.update.DefaultArtifactVersion
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:464)
at io.quarkus.bootstrap.classl

Dependency upgrade

Hi everyonе, In our project automatically changed <quarkus-logging-logback.version>0.13.0</quarkus-logging-logback.version> to <quarkus-logging-logback.version>1.0.0</quarkus-logging-logback.version> and added

org.slf4j
slf4j-api
${slf4j.version}

dependency version <slf4j.version>2.0.5</slf4j.version>, and after can't seen logs.

I fixed that with upgrading dependency slf4j.jboss.logmanager from 1.x.x version to <slf4j.jboss.logmanager>2.0.1.Final</slf4j.jboss.logmanager>.

org.jboss.slf4j
slf4j-jboss-logmanager
${slf4j.jboss.logmanager}

Maybe this update was previously passed automatically?

java.lang.ClassNotFoundException when using console appender

Hello,

There apparently a class loading issue when using a Logback console appender.
Steps to reproduce:

  1. clone quarkiverse/quarkus-logging-logback
  2. in quarkus-logging-logback/integration-tests/pom.xml change quarkus-logging-logback version to 0.13.0
  3. replace the quarkus-logging-logback/integration-tests/src/main/resources/logback.xml file's contents with the following:
<configuration debug="true">

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>target/tests.log</file>
        <append>false</append>
        <encoder>
            <pattern>LOGBACK- %-5level %msg %n</pattern>
        </encoder>
    </appender>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{HH:mm:ss.SSS} %gray(\(%t\)) %green(%-5level) %highlight([%logger{36}]) %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE" />
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>
  1. run mvn clean verify -Dnative in directory quarkus-logging-logback/integration-tests
  2. observe the output:
...
...
06:36:26,912 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@53307460 - [msg] is not a valid conversion word
06:36:26,912 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@53307460 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.LineSeparatorConverter] for keyword [n] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.LineSeparatorConverter
        at ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.LineSeparatorConverter
        at      at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:68)
        at      at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:44)
        at      at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:33)
        at      at ch.qos.logback.core.pattern.parser.Compiler.createConverter(Compiler.java:104)
        at      at ch.qos.logback.core.pattern.parser.Compiler.compile(Compiler.java:63)
        at      at ch.qos.logback.core.pattern.parser.Parser.compile(Parser.java:87)
        at      at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:84)
        at      at ch.qos.logback.classic.encoder.PatternLayoutEncoder.start(PatternLayoutEncoder.java:28)
        at      at ch.qos.logback.classic.encoder.PatternLayoutEncoder$$delayed.doQuarkusDelayedStart(Unknown Source)
        at      at io.quarkiverse.logback.runtime.LogbackRecorder.createHandler(LogbackRecorder.java:130)
        at      at io.quarkus.deployment.steps.LoggingLogbackProcessor$handler1311068917.deploy_0(Unknown Source)
        at      at io.quarkus.deployment.steps.LoggingLogbackProcessor$handler1311068917.deploy(Unknown Source)
        at      at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
        at      at io.quarkus.runtime.Application.start(Application.java:101)
        at      at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:103)
        at      at io.quarkus.runtime.Quarkus.run(Quarkus.java:67)
        at      at io.quarkus.runtime.Quarkus.run(Quarkus.java:41)
        at      at io.quarkus.runtime.Quarkus.run(Quarkus.java:120)
        at      at io.quarkus.runner.GeneratedMain.main(Unknown Source)
Caused by: java.lang.ClassNotFoundException: ch.qos.logback.classic.pattern.LineSeparatorConverter
        at      at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:52)
        at      at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at      at java.lang.ClassLoader.loadClass(ClassLoader.java:133)
        at      at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:55)
        at      ... 18 common frames omitted
06:36:26,913 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@53307460 - [n] is not a valid conversion word
%PARSER_ERROR[d] %PARSER_ERROR[gray] %PARSER_ERROR[green] %PARSER_ERROR[highlight] %PARSER_ERROR[msg]%PARSER_ERROR[n]%PARSER_ERROR[d] %PARSER_ERROR[gray] %PARSER_ERROR[green] %PARSER_ERROR[highlight] %PARSER_ERROR[msg]%PARSER_ERROR[n]%PARSER_ERROR[d] %PARSER_ERROR[gray] %PARSER_ERROR[green] %PARSER_ERROR[highlight] %PARSER_ERROR[msg]%PARSER_ERROR[n][INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.981 s - in io.quarkiverse.logging.logback.it.NativeLoggingLogbackResourceIT
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-failsafe-plugin:2.22.2:verify (default) @ quarkus-logging-logback-integration-tests ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:57 min
[INFO] Finished at: 2022-08-11T09:36:28+03:00
[INFO] ------------------------------------------------------------------------

Do you have any suggestion what could be done about this?
Thanks!

ConsoleAppender does not work in native mode

Hello @stuartwdouglas ,

When the application is compiled native, the pattern in ConsoleAppender does not work. Everything is fine, when running in JVM mode.

I created an example here, to reproduce it.

Versions

Quarkus=2.14.3.Final
quarkus-logging-logback=0.13.0
GraalVm=22.3.0
Java=17

Logback.Xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false">
  <appender name="Appender" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>
        %black(%d{ISO8601}) [%blue(%t)] %highlight(%-5level)[ traceId=%X{traceId} spanId=%X{spanId} ] %yellow(%C{1}): %msg%n%throwable
      </Pattern>
    </layout>
  </appender>

  <root>
    <level value="INFO"/>
    <appender-ref ref="Appender"/>
  </root>

</configuration>

Example Log from JVM Mode

arl@fedora ~/sources/quarkus/quarkus-logback-native $ ./gradlew quarkusDev

> Task :quarkusDev
Listening for transport dt_socket at address: 5005
Press [h] for more options>
Tests paused
Press [r] to resume testing, [h] for more options>
Press [r] to resume testing, [o] Toggle test output, [h] for more options>
07:46:19,579 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
07:46:19,582 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender$$delayed]
07:46:19,583 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [Appender]
07:46:19,591 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - This appender no longer admits a layout as a sub-component, set an encoder instead.
07:46:19,591 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
07:46:19,591 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
07:46:19,591 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to INFO
07:46:19,591 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [Appender] to Logger[ROOT]
07:46:19,591 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

2022-12-14 07:46:19,884 [Quarkus Main Thread] INFO [ traceId= spanId= ] i.q.b.r.Timing: quarkus-logback-native 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.14.3.Final) started in 1.639s. Listening on: http://localhost:8080
2022-12-14 07:46:19,887 [Quarkus Main Thread] INFO [ traceId= spanId= ] i.q.b.r.Timing: Profile dev activated. Live Coding activated.
2022-12-14 07:46:19,888 [Quarkus Main Thread] INFO [ traceId= spanId= ] i.q.b.r.Timing: Installed features: [cdi, logging-logback, resteasy, smallrye-context-propagation, vertx]
2022-12-14 07:49:04,056 [executor-thread-0] INFO [ traceId= spanId= ] o.a.GreetingResource: Hello Logback

Example Log from Native Mode

arl@fedora ~/sources/quarkus/quarkus-logback-native $ build/quarkus-logback-native-1.0.0-SNAPSHOT-runner 
%PARSER_ERROR[black] [%PARSER_ERROR[blue]] %PARSER_ERROR[highlight][ traceId=%PARSER_ERROR[X] spanId=%PARSER_ERROR[X] ] %PARSER_ERROR[yellow]: %PARSER_ERROR[msg]%PARSER_ERROR[n]%PARSER_ERROR[throwable]%PARSER_ERROR[black] [%PARSER_ERROR[blue]] %PARSER_ERROR[highlight][ traceId=%PARSER_ERROR[X] spanId=%PARSER_ERROR[X] ] %PARSER_ERROR[yellow]: %PARSER_ERROR[msg]%PARSER_ERROR[n]%PARSER_ERROR[throwable]%PARSER_ERROR[black] [%PARSER_ERROR[blue]] %PARSER_ERROR[highlight][ traceId=%PARSER_ERROR[X] spanId=%PARSER_ERROR[X] ] %PARSER_ERROR[yellow]: %PARSER_ERROR[msg]%PARSER_ERROR[n]%PARSER_ERROR[throwable]

%PARSER_ERROR[black] [%PARSER_ERROR[blue]] %PARSER_ERROR[highlight][ traceId=%PARSER_ERROR[X] spanId=%PARSER_ERROR[X] ] %PARSER_ERROR[yellow]: %PARSER_ERROR[msg]%PARSER_ERROR[n]%PARSER_ERROR[throwable]

Log from native Compile Process

arl@fedora ~/sources/quarkus/quarkus-logback-native $ ./gradlew build -Dquarkus.package.type=native
Starting a Gradle Daemon, 1 stopped Daemon could not be reused, use --status for details
========================================================================================================================
GraalVM Native Image: Generating 'quarkus-logback-native-1.0.0-SNAPSHOT-runner' (executable)...
========================================================================================================================
[1/7] Initializing...                                                                                    (5.3s @ 0.16GB)
 Version info: 'GraalVM 22.3.0 Java 17 CE'
 Java version info: '17.0.5+8-jvmci-22.3-b08'
 C compiler: gcc (redhat, x86_64, 12.2.1)
 Garbage collector: Serial GC
 3 user-specific feature(s)
 - io.quarkus.runner.Feature: Auto-generated class by Quarkus from the existing extensions
 - io.quarkus.runtime.graal.DisableLoggingFeature: Disables INFO logging during the analysis phase for the [org.jboss.threads] categories
 - io.quarkus.runtime.graal.ResourcesFeature: Register each line in META-INF/quarkus-native-resources.txt as a resource on Substrate VM
07:52:21,011 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
07:52:21,038 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender$$delayed]
07:52:21,039 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [Appender]
07:52:21,043 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - This appender no longer admits a layout as a sub-component, set an encoder instead.
07:52:21,043 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
07:52:21,043 |-WARN in ch.qos.logback.core.ConsoleAppender$$delayed[Appender] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
07:52:21,043 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to INFO
07:52:21,043 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [Appender] to Logger[ROOT]
07:52:21,043 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

[2/7] Performing analysis...  [*******]                                                                 (25.8s @ 3.28GB)
  10,647 (89.34%) of 11,917 classes reachable
  15,295 (58.22%) of 26,273 fields reachable
  52,427 (55.21%) of 94,959 methods reachable
     468 classes,   122 fields, and 2,128 methods registered for reflection
      63 classes,    68 fields, and    55 methods registered for JNI access
       4 native libraries: dl, pthread, rt, z
[3/7] Building universe...                                                                               (3.9s @ 1.45GB)
[4/7] Parsing methods...      [**]                                                                       (2.7s @ 4.51GB)
[5/7] Inlining methods...     [***]                                                                      (1.7s @ 1.92GB)
[6/7] Compiling methods...    [*****]                                                                   (22.0s @ 3.10GB)
[7/7] Creating image...                                                                                  (3.4s @ 4.50GB)
  19.66MB (48.32%) for code area:    33,584 compilation units
  20.72MB (50.92%) for image heap:  265,698 objects and 10 resources
 320.80KB ( 0.77%) for other data
  40.69MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 packages in code area:                               Top 10 object types in image heap:
   1.62MB sun.security.ssl                                     4.38MB byte[] for code metadata
 968.05KB java.util                                            2.52MB java.lang.Class
 729.28KB java.lang.invoke                                     2.45MB java.lang.String
 718.49KB com.sun.crypto.provider                              2.16MB byte[] for general heap data
 450.56KB sun.security.x509                                    1.92MB byte[] for java.lang.String
 444.83KB java.lang                                          914.98KB com.oracle.svm.core.hub.DynamicHubCompanion
 401.21KB java.util.concurrent                               644.77KB java.util.HashMap$Node
 398.19KB java.io                                            541.26KB byte[] for reflection metadata
 394.59KB io.netty.buffer                                    481.15KB java.lang.String[]
 338.80KB io.netty.handler.codec.http2                       394.54KB byte[] for embedded resources
  13.06MB for 399 more packages                                4.10MB for 2582 more object types
------------------------------------------------------------------------------------------------------------------------
                        2.7s (3.8% of total time) in 28 GCs | Peak RSS: 5.99GB | CPU load: 8.38
------------------------------------------------------------------------------------------------------------------------
Produced artifacts:
 /home/arl/sources/quarkus/quarkus-logback-native/build/quarkus-logback-native-1.0.0-SNAPSHOT-native-image-source-jar/quarkus-logback-native-1.0.0-SNAPSHOT-runner (executable)
 /home/arl/sources/quarkus/quarkus-logback-native/build/quarkus-logback-native-1.0.0-SNAPSHOT-native-image-source-jar/quarkus-logback-native-1.0.0-SNAPSHOT-runner-build-output-stats.json (json)
 /home/arl/sources/quarkus/quarkus-logback-native/build/quarkus-logback-native-1.0.0-SNAPSHOT-native-image-source-jar/quarkus-logback-native-1.0.0-SNAPSHOT-runner-timing-stats.json (raw)
 /home/arl/sources/quarkus/quarkus-logback-native/build/quarkus-logback-native-1.0.0-SNAPSHOT-native-image-source-jar/quarkus-logback-native-1.0.0-SNAPSHOT-runner.build_artifacts.txt (txt)
========================================================================================================================
Finished generating 'quarkus-logback-native-1.0.0-SNAPSHOT-runner' in 1m 9s.

BUILD SUCCESSFUL in 1m 20s
9 actionable tasks: 2 executed, 7 up-to-date

ClassNotFoundException at app start when Logback looks for CompositeConverter

Hello,

When in the logback.xml I use a composite converter, for example:

    <conversionRule conversionWord="sensitiveDataReplace"
                    converterClass="org.acme.getting.started.SensitiveDataReplacingConverter"/>

then when Quarkus starts in dev mode, I get the following stacktrace:

17:41:22,532 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@3baabbe6 - Failed to instantiate converter class [org.acme.getting.started.SensitiveDataReplacingConverter] as a composite converter for keyword [sensitiveDataReplace] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type org.acme.getting.started.SensitiveDataReplacingConverter
	at ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type org.acme.getting.started.SensitiveDataReplacingConverter
	at 	at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:69)
	at 	at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:45)
	at 	at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:34)
	at 	at ch.qos.logback.core.pattern.parser.Compiler.createCompositeConverter(Compiler.java:129)
	at 	at ch.qos.logback.core.pattern.parser.Compiler.compile(Compiler.java:47)
	at 	at ch.qos.logback.core.pattern.parser.Parser.compile(Parser.java:87)
	at 	at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:84)
	at 	at net.logstash.logback.pattern.PatternLayoutAdapter.start(PatternLayoutAdapter.java:100)
	at 	at net.logstash.logback.pattern.AbstractJsonPatternParser.buildLayout(AbstractJsonPatternParser.java:224)
	at 	at net.logstash.logback.pattern.AbstractJsonPatternParser.makeLayoutValueGetter(AbstractJsonPatternParser.java:197)
	at 	at net.logstash.logback.pattern.AbstractJsonPatternParser.makeComputableValueGetter(AbstractJsonPatternParser.java:183)
	at 	at net.logstash.logback.pattern.AbstractJsonPatternParser.parseNode(AbstractJsonPatternParser.java:317)
	at 	at net.logstash.logback.pattern.AbstractJsonPatternParser.parseObject(AbstractJsonPatternParser.java:371)
	at 	at net.logstash.logback.pattern.AbstractJsonPatternParser.parse(AbstractJsonPatternParser.java:300)
	at 	at net.logstash.logback.composite.AbstractPatternJsonProvider.initializeNodeWriter(AbstractPatternJsonProvider.java:104)
	at 	at net.logstash.logback.composite.AbstractPatternJsonProvider.start(AbstractPatternJsonProvider.java:85)
	at 	at net.logstash.logback.composite.JsonProviders.start(JsonProviders.java:48)
	at 	at net.logstash.logback.composite.AbstractCompositeJsonFormatter.start(AbstractCompositeJsonFormatter.java:119)
	at 	at net.logstash.logback.encoder.CompositeJsonEncoder.start(CompositeJsonEncoder.java:129)
	at 	at net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder$$delayed.doQuarkusDelayedStart(Unknown Source)
	at 	at io.quarkiverse.logback.runtime.LogbackRecorder.createHandler(LogbackRecorder.java:130)
	at 	at io.quarkus.deployment.steps.LoggingLogbackProcessor$handler1311068917.deploy_0(Unknown Source)
	at 	at io.quarkus.deployment.steps.LoggingLogbackProcessor$handler1311068917.deploy(Unknown Source)
	at 	at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
	at 	at io.quarkus.runtime.Application.start(Application.java:101)
	at 	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:103)
	at 	at io.quarkus.runtime.Quarkus.run(Quarkus.java:67)
	at 	at io.quarkus.runtime.Quarkus.run(Quarkus.java:41)
	at 	at io.quarkus.runtime.Quarkus.run(Quarkus.java:120)
	at 	at io.quarkus.runner.GeneratedMain.main(Unknown Source)
	at 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at 	at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:103)
	at 	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassNotFoundException: org.acme.getting.started.SensitiveDataReplacingConverter
	at 	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:438)
	at 	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:414)
	at 	at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:56)
	at 	... 35 common frames omitted

The app does work, however the log appender that uses the converter of course does not work as expected.

Interestingly, when I run in prod mode with ./mvnw package -Dquarkus.package.type=uber-jar and java -jar target/*-runner.jar, there's no stacktrace and the appender and the converter work as expected.

Reproduces on linux with the this code https://github.com/peterhuba/quarkus-logback-issues (latest commit on master).
Do you have any clue? Thanks!

CallerData silently dropped in LoggingEventWrapper

Hi,

Background

We are using this extension to use Logback to configure Quarkus logging via logback.xml. We have identical logback.xml configurations across different microservices to have a uniform logging stack and output, including, timestamp, level, logger, line, method and message. We noticed that the method name and line number are displayed as questions marks.

Technical Details

This is the case when logback is not able to find the caller data.

For example in MethodOfCallerConverter

public class MethodOfCallerConverter extends ClassicConverter {
    public String convert(ILoggingEvent le) {
        StackTraceElement[] cda = le.getCallerData();
        if (cda != null && cda.length > 0) {
            return cda[0].getMethodName();
        } else {
            return CallerData.NA;
        }
    }
}

Digging into quarkiverse/quarkus-logging-logback we found that the caller data is silently dropped in LoggingEventWrapper:

    @Override
    public StackTraceElement[] getCallerData() {
        return null;
    }

    @Override
    public boolean hasCallerData() {
        return false;
    }

Proposed fix

Dont drop the caller data but forward it. Simple, but inefficient proposal:

    @Override
    public StackTraceElement[] getCallerData() {
        return new StackTraceElement[] {
                new StackTraceElement(
                        null,
                        logRecord.getSourceModuleName(),
                        logRecord.getSourceModuleVersion(),
                        logRecord.getSourceClassName(),
                        logRecord.getSourceMethodName(),
                        logRecord.getSourceFileName(),
                        logRecord.getSourceLineNumber()
                )
        };
    }

    @Override
    public boolean hasCallerData() {
        return getCallerData() != null;
    }

Used Versions

quarkus: 2.8.1.Final
quarkus-logging-logback: 0.12.0
logback: 1.2.11

Issue while appending the log to appender [quarkus-logging-logback -0.0.3]

Hi ,
After configuring the logback.xml file , my customize kafka appender is starting successfully ,
But while appending any log , appender calls method of LoggingEventWrapper class
public LoggerContextVO getLoggerContextVO() {
return null;
}

which always return null, and kafka appender get fails, i am using the standard lib for kafka appender , so i am not able to change in it.

Thanks for the help!!

NPE if Declaring class is null

When integrate quarkus-logging-logback + loki-logback-appender

Quarkus
It occurs when "quarkus.console.color=true" the caller class name and method name maybe null,
and LoggingEventWrapper.java trigger StackTraceElement.java constrcutor method raise NPE. "Objects.requireNonNull(...)"

Console log

=> format: "%d{HH:mm:ss.SSS} %-5p [${quarkus.profile}] [%t] [%C{0.}.%M():%L] %s%e%n"
=> log e.g. "11:08:46.617 INFO [dev] [Quarkus Main Thread] [null.null():-1] QuarkusMain main method"

11:08:46,815 |-INFO in io.quarkiverse.logback.runtime.LogbackRecorder$1@61cac409 - Registering current configuration as safe fallback point

__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
11:08:46.617 INFO  [dev] [Quarkus Main Thread] [null.null():-1] QuarkusMain main method
11:08:47,139 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender$$delayed[FILE] - Appender [FILE] failed to append. java.lang.NullPointerException: Declaring class is null
	at java.lang.NullPointerException: Declaring class is null
	at 	at java.base/java.util.Objects.requireNonNull(Objects.java:233)
	at 	at java.base/java.lang.StackTraceElement.<init>(StackTraceElement.java:162)
	at 	at io.quarkiverse.logback.runtime.LoggingEventWrapper.getCallerData(LoggingEventWrapper.java:93)
	at 	at ch.qos.logback.classic.pattern.ClassOfCallerConverter.getFullyQualifiedName(ClassOfCallerConverter.java:24)
	at 	at ch.qos.logback.classic.pattern.NamedConverter.convert(NamedConverter.java:106)
	at 	at ch.qos.logback.classic.pattern.NamedConverter.convert(NamedConverter.java:38)
	at 	at ch.qos.logback.core.pattern.FormattingConverter.write(FormattingConverter.java:36)
	at 	at ch.qos.logback.core.pattern.PatternLayoutBase.writeLoopOnConverters(PatternLayoutBase.java:116)
	at 	at ch.qos.logback.classic.PatternLayout.doLayout(PatternLayout.java:176)
	at 	at ch.qos.logback.classic.PatternLayout.doLayout(PatternLayout.java:39)
	at 	at ch.qos.logback.core.encoder.LayoutWrappingEncoder.encode(LayoutWrappingEncoder.java:114)
	at 	at ch.qos.logback.core.OutputStreamAppender.writeOut(OutputStreamAppender.java:192)
	at 	at ch.qos.logback.core.FileAppender.writeOut(FileAppender.java:247)
	at 	at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:237)
	at 	at ch.qos.logback.core.rolling.RollingFileAppender.subAppend(RollingFileAppender.java:253)
	at 	at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:102)
	at 	at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:85)
	at 	at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
	at 	at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:272)
	at 	at ch.qos.logback.classic.Logger.callAppenders(Logger.java:259)
	at 	at io.quarkiverse.logback.runtime.LogbackRecorder$3.doPublish(LogbackRecorder.java:155)
	at 	at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:88)
	at 	at org.jboss.logmanager.ExtHandler.publishToNestedHandlers(ExtHandler.java:122)
	at 	at io.quarkus.bootstrap.logging.QuarkusDelayedHandler.activate(QuarkusDelayedHandler.java:292)
	at 	at io.quarkus.bootstrap.logging.QuarkusDelayedHandler.setHandlers(QuarkusDelayedHandler.java:189)
	at 	at io.quarkus.runtime.logging.LoggingSetupRecorder.initializeLogging(LoggingSetupRecorder.java:271)
	at 	at io.quarkus.deployment.steps.LoggingResourceProcessor$setupLoggingRuntimeInit1899082837.deploy_0(Unknown Source)
	at 	at io.quarkus.deployment.steps.LoggingResourceProcessor$setupLoggingRuntimeInit1899082837.deploy(Unknown Source)
	at 	at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
	at 	at io.quarkus.runtime.Application.start(Application.java:101)
	at 	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:111)
	at 	at io.quarkus.runtime.Quarkus.run(Quarkus.java:71)

java.lang.StackTraceElement.java

https://github.com/openjdk/jdk17/blob/master/src/java.base/share/classes/java/lang/StackTraceElement.java#L162

Exception

 this.declaringClass  = Objects.requireNonNull(declaringClass, "Declaring class is null");
 this.methodName      = Objects.requireNonNull(methodName, "Method name is null");
  /**
     * Creates a stack trace element representing the specified execution
     * point.
     * ...
     *
     * @throws NullPointerException if {@code declaringClass} is {@code null}
     *         or {@code methodName} is {@code null}
     *
     * @since 9
     */
    public StackTraceElement(String classLoaderName,
                             String moduleName, String moduleVersion,
                             String declaringClass, String methodName,
                             String fileName, int lineNumber) {
        this.classLoaderName = classLoaderName;
        this.moduleName      = moduleName;
        this.moduleVersion   = moduleVersion;
        this.declaringClass  = Objects.requireNonNull(declaringClass, "Declaring class is null");
        this.methodName      = Objects.requireNonNull(methodName, "Method name is null");
        this.fileName        = fileName;
        this.lineNumber      = lineNumber;
    }
...

io.quarkiverse.logback.runtime.LoggingEventWrapper.java

https://github.com/quarkiverse/quarkus-logging-logback/blob/main/impl/runtime/src/main/java/io/quarkiverse/logback/runtime/LoggingEventWrapper.java#L90

Return null value

  logRecord.getSourceClassName(),
  logRecord.getSourceMethodName(),
   ...
  @Override
    public StackTraceElement[] getCallerData() {
        if (callerData == null) {
            callerData = new StackTraceElement[] {
                    new StackTraceElement(
                            null,
                            logRecord.getSourceModuleName(),
                            logRecord.getSourceModuleVersion(),
                            logRecord.getSourceClassName(),
                            logRecord.getSourceMethodName(),
                            logRecord.getSourceFileName(),
                            logRecord.getSourceLineNumber())
            };
        }
        return callerData;
    }
 ...

Expect adding judgment

     logRecord.getSourceClassName() == null ? "null" :  logRecord.getSourceClassName(),
     logRecord.getSourceMethodName() == null ? "null" :  logRecord.getSourceMethodName(),
@Override
    public StackTraceElement[] getCallerData() {
        if (callerData == null) {
            callerData = new StackTraceElement[] {
                    new StackTraceElement(
                            null,
                            logRecord.getSourceModuleName(),
                            logRecord.getSourceModuleVersion(),
                            logRecord.getSourceClassName() == null ? "null" : logRecord.getSourceClassName(),
                           logRecord.getSourceMethodName() == null ? "null" :  logRecord.getSourceMethodName(),
                            logRecord.getSourceFileName(),
                            logRecord.getSourceLineNumber())
            };
        }
        return callerData;
    }

Console ScreenShot

ScreenShot

Reproduction Project

logback-with-quarkus.zip

App won't start with quarkus 2.5.1.Final + quarkus-logging-logback, it causes an application startup error

Using quarkus version:

implementation 'io.quarkiverse.logging.logback:quarkus-logging-logback:0.5.0'
quarkusPluginVersion=2.5.1.Final
quarkusPlatformVersion=2.5.1.Final

It causes an application startup error: LoggingLogbackProcessor#removeSlf4jBinding threw an exception: java.lang.NoSuchMethodError: io.quarkus.deployment.builditem.RemovedResourceBuildItem.

STACKTRACE

2021-12-06 10:30:45,561 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor#removeSlf4jBinding threw an exception: java.lang.NoSuchMethodError: io.quarkus.deployment.builditem.RemovedResourceBuildItem.<init>(Lio/quarkus/bootstrap/model/AppArtifactKey;Ljava/util/Set;)V
	at io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor.removeSlf4jBinding(LoggingLogbackProcessor.java:70)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:887)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
	at java.base/java.lang.Thread.run(Thread.java:834)
	at org.jboss.threads.JBossThread.run(JBossThread.java:501)

	at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:330)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:252)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:60)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:93)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:450)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:67)
	at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:149)
	at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:105)
	at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:145)
	at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:63)
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor#removeSlf4jBinding threw an exception: java.lang.NoSuchMethodError: io.quarkus.deployment.builditem.RemovedResourceBuildItem.<init>(Lio/quarkus/bootstrap/model/AppArtifactKey;Ljava/util/Set;)V
	at io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor.removeSlf4jBinding(LoggingLogbackProcessor.java:70)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:887)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
	at java.base/java.lang.Thread.run(Thread.java:834)
	at org.jboss.threads.JBossThread.run(JBossThread.java:501)

	at io.quarkus.builder.Execution.run(Execution.java:116)
	at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
	at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:161)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:328)
	... 9 more
Caused by: java.lang.NoSuchMethodError: io.quarkus.deployment.builditem.RemovedResourceBuildItem.<init>(Lio/quarkus/bootstrap/model/AppArtifactKey;Ljava/util/Set;)V
	at io.quarkiverse.logging.logback.deployment.LoggingLogbackProcessor.removeSlf4jBinding(LoggingLogbackProcessor.java:70)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:887)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
	at java.base/java.lang.Thread.run(Thread.java:834)
	at org.jboss.threads.JBossThread.run(JBossThread.java:501)

IncompatibleClassChangeError while using logback with quarkus

Issue while using custom appender in 0.12.0

<appender name="CONSOLE" class="net.logstash.logback.appender.LoggingEventAsyncDisruptorAppender">
        <appender class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="c.a.ea.elf.logback.ELFLogbackEncoder">
                <includeContext>false</includeContext>
                <shortenedLoggerNameLength>20</shortenedLoggerNameLength>
                <timestampPattern>[ISO_INSTANT]</timestampPattern>
                <fieldNames>
                    <version>[ignore]</version>
                    <levelValue>[ignore]</levelValue>
                    <!--<timestamp>timestamp</timestamp>-->
                    <thread>[ignore]</thread>
                </fieldNames>
            </encoder>
        </appender>
    </appender>

Error

ERROR: Error running Quarkus
java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:103)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ExceptionInInitializerError
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
	at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:347)
	at java.base/java.lang.Class.newInstance(Class.java:645)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:66)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:41)
	at c.t.p.p.Application.main(Application.java:52)
	... 6 more
Caused by: java.lang.RuntimeException: Failed to start quarkus
	at io.quarkus.runner.ApplicationImpl.<clinit>(Unknown Source)
	... 16 more
Caused by: java.lang.IncompatibleClassChangeError: class c.a.ea.elf.logback.ELFLogbackEncoder$$delayed cannot inherit from final class c.a.ea.elf.logback.ELFLogbackEncoder
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:480)
	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:440)
	at ch.qos.logback.core.util.Loader.loadClass(Loader.java:120)
	at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.begin(NestedComplexPropertyIA.java:102)
	at ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:269)
	at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:145)
	at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:128)
	at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
	at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
	at io.quarkiverse.logback.runtime.LogbackRecorder.init(LogbackRecorder.java:91)
	at io.quarkus.deployment.steps.LoggingLogbackProcessor$init519114389.deploy_4(Unknown Source)
	at io.quarkus.deployment.steps.LoggingLogbackProcessor$init519114389.deploy(Unknown Source)
	... 17 more

Logback ignores log level set in logback.xml, warning in Quarkus startup

Hello,

Seems like the log level property set by the addon to Quarkus is incorrect. I receive the following app output:
(Quarkus Main Thread) WARN [io.quarkus.config] Unrecognized configuration key "quarkus.log.categories.\"com.some.package\".level" was provided; it will be ignored; verify that the dependency extension for this configuration is set or that you did not make a typo

This seems fair, since according to the Quarkus guide, property should not be quarkus.log.categories.<category-name>.level, but quarkus.log.category."<category-name>".level: https://quarkus.io/guides/logging

Also, the application doesn't seem to take into account the log levels set for certain specific classes, just takes the root level.

All the above was run in quarkus dev mode. Reproducer: https://github.com/peterhuba/quarkus-logback-issues

LogManager error of type WRITE_FAILURE

I have quarkus 2.1.1 and

    <dependency>
        <groupId>io.quarkiverse.logging.logback</groupId>
        <artifactId>quarkus-logging-logback</artifactId>
        <version>0.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>commons-logging-jboss-logging</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.32</version>
    </dependency>

When I locally start Quarkus with my Application.jar from my IDE, it startups fine,

but when instead I try:
java -jar ./target/quarkus-app/quarkus-run.jar
LogManager error of type WRITE_FAILURE: The delayed handler's queue was overrun and log record(s) were lost. Did you forget to configure logging?

I assumed it could be related also to the environment specific application.properties set up I have -
In application.properties, I have added all config entries that are equal to all environments.
In application-dev.properties, I have added all config centries for the dev profile.

To ensure I am running on the dev profile, I had also added -Dquarkus.profile=dev, also I tried -DQUARKUS_PROFILE=dev, but the above error keeps re-appering. No idea why.

xml inclusion does not work

In a Quarkus test project, I've defined a logback.xml inside src/main/resources with this inclusion

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="logger.xml" />

</configuration>

logger.xml is a file inside an external dependency, that contains the loggers definition

<?xml version="1.0" encoding="UTF-8"?>
<included>

    <conversionRule conversionWord="iso8601nano"
                    converterClass="com.dems98.test.log.converter.Iso8601NanoConverter" />

    <appender name="STDOUT"
              class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%t] %-5level %logger{36} - %.-100000msg%n</pattern>
        </encoder>
    </appender>

    <if condition='"${LOG_DESTINATION:-FILE}".equals("FILE")'>
        <then>
            <appender name="ROLLING_FILE_SPRING_BOOT"
                      class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/var/log/server/${NAME}.log</file>
                <rollingPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                    <fileNamePattern>/var/log/%d{yyyy-MM-dd_HH, UTC}.${NAME}.server-log.%i.zip</fileNamePattern>
                    <maxFileSize>100MB</maxFileSize>
                    <maxHistory>3</maxHistory>
                    <totalSizeCap>300MB</totalSizeCap>
                </rollingPolicy>
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>INFO</level>
                </filter>
                <encoder>
                    <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%t] %-5level %logger{36} - %.-100000msg%n</pattern>
                </encoder>
            </appender>
        </then>
    </if>

    <if condition='"${LOG_DESTINATION:-FILE}".equals("CONSOLE")'>
        <then>
            <appender name="ROLLING_FILE_APP"
                      class="ch.qos.logback.core.ConsoleAppender">
                <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
                    <providers>
                        <pattern>
                            <omitEmptyFields>true</omitEmptyFields>
                            <pattern>
                                {
                                        "timestamp": "%iso8601nano{UTC}",
                                        "correlation-id": "%mdc{correlation-id}",
                                        "message": "%.-100000msg%replace(%n%.-100000ex){'^\\s+$$',''}",
                                        "level": "%level",
                                        "version": "${VERSION}",
                                        "class": "%logger",
                                        "thread": "%t"
                                }
                            </pattern>
                        </pattern>
                    </providers>
                </encoder>
            </appender>
        </then>
        <else>
            <appender name="ROLLING_FILE_APP"
                      class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/var/log/${NAME}.log</file>
                <rollingPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                    <fileNamePattern>/var/log/%d{yyyy-MM-dd_HH, UTC}.${NAME}.log.%i.zip</fileNamePattern>
                    <maxFileSize>100MB</maxFileSize>
                    <maxHistory>3</maxHistory>
                    <totalSizeCap>300MB</totalSizeCap>
                </rollingPolicy>
                <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
                    <providers>
                        <pattern>
                            <omitEmptyFields>true</omitEmptyFields>
                            <pattern>
                                {
                                        "timestamp": "%iso8601nano{UTC}",
                                        "correlation-id": "%mdc{correlation-id}",
                                        "message": "%.-100000msg%replace(%n%.-100000ex){'^\\s+$$',''}",
                                        "level": "%level",
                                        "version": "${VERSION}",
                                        "class": "%logger",
                                        "thread": "%t"
                                }
                            </pattern>
                        </pattern>
                    </providers>
                </encoder>
            </appender>
        </else>
    </if>

    <logger name="com.test" level="${LOG_LEVEL:-INFO}" additivity="false">
        <appender-ref ref="ROLLING_FILE_APP" />
    </logger>

    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <if condition='"${LOG_DESTINATION:-FILE}".equals("FILE")'>
            <then>
                <appender-ref ref="ROLLING_FILE_SPRING_BOOT" />
            </then>
        </if>
    </root>
</included>

This configuration gives me this warning

WARN in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@4b06f969 - Null ConfigurationWatchList. Cannot add jar:file:///C:/Users/dems98/.m2/repository/com/dems98/1.8/test.jar!/logger.xml

and logs are not produced.

But, if I remove the inclusion and move the logger.xml content inside logback.xml, everything works!

So I believe there's a bug with the xml inclusions.

Quarkus startup error logs seem to disapperar

Hello!

Really appreciating this plugin, makes migrating to Quarkus a lot easier for us in regards to log setup. I just noticed one thing however, which I can't see that it is my own fault. When enabling this plugin Quarkus startup errors seem to disapperar. Before adding the extension to our pom.xml, everything from Quarkus is logged as expected but after I just see nothing in the logs. Any idea what might be wrong?

Extension used:

    <dependency>
      <groupId>io.quarkiverse.logging.logback</groupId>
      <artifactId>quarkus-logging-logback</artifactId>
      <version>1.1.0</version>
    </dependency>

Expected error in log:

2023-06-26 11:06:16,080 ERROR io.quarkus.runtime.Application - Failed to start application (with profile [dev]): ...

Example of project with logback.xml

Hi!

Could you please provide some Quarkus app example where logback.xml is handled by application and Slf4j?
I have done all according documentation where I was supposed to include it dependency, but it's not working for me.

quarkus-logging-logback has not been updated for ages

Hi, I am using quarkus-logging-logback 0.13.0.

To my knowledge, this is still the latest available version.

It requires me to add logback-core and logback-classic in verison 1.2.11 not to get errors in the project -
but these dependencies are totally outdated as well and give me warnings in my pom.

  <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.11</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.11</version>
    </dependency>
    <dependency>
        <groupId>io.quarkiverse.logging.logback</groupId>
        <artifactId>quarkus-logging-logback</artifactId>
        <version>0.13.0</version>
    </dependency>

Can you please update to the latest logback versions, @stuartwdouglas?

Thanks!

Cannot set the location of the logback file via system property

Hello,

When:

  • no logback.xml file in repo next to application.properties
  • doing a build with quarkus build
  • running the app with java -jar target/quarkus-app/quarkus-run.jar -Dlogback.configurationFile=/some/dir/logback.xml

Then the logback file is not loaded, as would be expected according to the docs here: https://logback.qos.ch/manual/configuration.html#configFileProperty

Reproducer:
https://github.com/peterhuba/quarkus-logback-issues

Is there something wrong in the way the app is ran as described above, or something else?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.