Open yrodiere opened 1 month ago
/cc @radcortez (config)
Yes, this is probably related to https://github.com/quarkusio/quarkus/issues/27996.
Unfortunately, we need to get a few things out of the way to fix this: https://github.com/quarkusio/quarkus/issues/42986
@yrodiere Does it only apply to logging configuration or any config property in general?
@yrodiere Does it only apply to logging configuration or any config property in general?
It applies to anything having an effect on logging, but only logging, from what I can see.
So quarkus.logging.*
, but also quarkus.hibernate-orm.log.bind-parameters
which actually creates a build item that affects logging behavior.
@yrodiere Does it only apply to logging configuration or any config property in general?
It applies to anything having an effect on logging, but only logging, from what I can see.
So
quarkus.logging.*
, but alsoquarkus.hibernate-orm.log.bind-parameters
which actually creates a build item that affects logging behavior.
I think that in Quarkus the logging config/context is stored in a static variable and so for example if you change the category level per test you would need to reset the level to the previous value after the test. And this "reset" action could be pretty complex. Unless there's a way to capture the "snapshot" of the logging config and apply this snapshot afterwards :shrug:.
CC @dmlloyd
I think that in Quarkus the logging config/context is stored in a static variable and so for example if you change the category level per test you would need to reset the level to the previous value after the test.
FWIW I worked around the issue for my particular use case by working directly with Logger#setLevel
; see uses of setLevel
in https://github.com/quarkusio/quarkus/pull/43077/files .
Of course this doesn't change anything for application developpers setting logging-related configuration properties on a per-test basis :shrug:
And this "reset" action could be pretty complex. Unless there's a way to capture the "snapshot" of the logging config and apply this snapshot afterwards 🤷.
You could alternatively just reset all levels to null
after an application shutdown in test mode, so that you can reapply the whole logging configuration from a clean slate on each application startup.
You could alternatively just reset all levels to
null
after an application shutdown in test mode
This makes me wonder whether dev mode is affected :thinking:
FWIW I worked around the issue for my particular use case by working directly with
Logger#setLevel
; see uses ofsetLevel
in https://github.com/quarkusio/quarkus/pull/43077/files .
This looks pretty useful :+1:
You could alternatively just reset all levels to
null
after an application shutdown in test mode, so that you can reapply the whole logging configuration from a clean slate on each application startup.
There is more to logging than levels. Resetting all of logging is theoretically possible but probably pretty difficult. It might be easier to do/undo logging changes per test, for now.
Describe the bug
While working on #43074 I noticed that when I set system properties related to logging (e.g.
quarkus.logging."org.hibernate".level=TRACE
) before a test usingQuarkusUnitTest
, then these properties still apply in test classes that execute afterwards -- even if I reset them after each test!I thought "fair enough, setting system properties dynamically probably isn't recommended anyway".
But then I started doing something like this:
... which simply sets a Quarkus property related to logging (
bind-parameters
) inapplication.properties
. And again, that setting affected test classes that executed afterwards.So, it seems to me
QuarkusUnitTest
leaks logging configuration from one test to the next... somehow.QuarkusUnitTest
being internal, it's not that bad, but what worries me more is the possibility that this leak could also happen in actual application tests, for example those that use aQuarkusTestProfile
to enable tracing in one particular test only. I did not try that, but that's something we should investigate to decide how critical this leak is.Expected behavior
Customizing log configuration in one test should not affect following test classes in the same run.
Actual behavior
Customizing log configuration in one test affects all following test classes in the same run.
How to Reproduce?
test-logging-config-leak
, notmain
)PublicFieldAccessInheritanceTest
through propertyquarkus.hibernate-orm.log.bind-parameters
.LogBindParametersDefaultValueTest
../mvnw clean test -pl extensions/hibernate-orm/deployment -Dtest='PublicFieldAccessInheritanceTest,LogBindParametersDefaultValueTest'
LogBindParametersDefaultValueTest
shows TRACE logs, even though we don't enable them in this test.LogBindParametersDefaultValueTest
failed because of these unexpected logs.Output of
uname -a
orver
No response
Output of
java -version
No response
Quarkus version or git rev
No response
Build tool (ie. output of
mvnw --version
orgradlew --version
)No response
Additional information
No response