codeconsole commented on code in PR #15666:
URL: https://github.com/apache/grails-core/pull/15666#discussion_r3611349003
##########
grails-core/src/main/groovy/grails/util/GrailsUtil.java:
##########
@@ -154,7 +167,84 @@ public static Throwable sanitizeRootCause(Throwable t) {
* @return The root cause exception instances, with stack trace modified
to filter out grails runtime classes
*/
public static Throwable deepSanitize(Throwable t) {
- return stackFilterer.filter(t, true);
+ return resolveStackFilterer().filter(t, true);
+ }
+
+ /**
+ * Returns the {@link StackTraceFilterer} used by this class, lazily
initialised from the
+ * Grails application config when one is discoverable. Honours
+ * {@link Settings#SETTING_LOGGING_STACKTRACE_FILTER_CLASS} (the filterer
class — same key
+ * the exception resolver consults) and propagates
+ * {@link Settings#SETTING_LOG_FULL_STACKTRACE_ON_FILTER} to instances of
+ * {@link DefaultStackTraceFilterer}.
+ *
+ * <p>While no {@link GrailsApplication} is available (early-init paths,
plain {@code main}
+ * usage, tests that don't wire one up) a fresh {@link
DefaultStackTraceFilterer} is returned
+ * and <em>not</em> cached — so once the application context boots, the
next call resolves
+ * the configured filterer for real. After that the value is cached for
the lifetime of the
+ * JVM, matching the historical behaviour of the previous {@code static
final} field.
+ */
+ private static StackTraceFilterer resolveStackFilterer() {
+ StackTraceFilterer cached = stackFilterer;
+ if (cached != null) {
+ return cached;
+ }
+ GrailsApplication application = findApplicationQuietly();
+ if (application == null) {
+ // No application discoverable yet — return an uncached default. A
later call,
+ // once the context is up, will run through the
configured-resolution branch
+ // and populate the cache.
+ return new DefaultStackTraceFilterer();
Review Comment:
This is exactly what the rework does now — moved to
`GrailsBootstrapRegistryInitializer`, which resolves the configured filterer
from the environment and calls `GrailsUtil.initializeStackFilterer(...)` once,
before `refresh()`, instead of lazily on each access. See the reply on the
CHANGES_REQUESTED review comment for the full design.
##########
grails-core/src/main/groovy/grails/util/GrailsUtil.java:
##########
@@ -154,7 +167,84 @@ public static Throwable sanitizeRootCause(Throwable t) {
* @return The root cause exception instances, with stack trace modified
to filter out grails runtime classes
*/
public static Throwable deepSanitize(Throwable t) {
- return stackFilterer.filter(t, true);
+ return resolveStackFilterer().filter(t, true);
+ }
+
+ /**
+ * Returns the {@link StackTraceFilterer} used by this class, lazily
initialised from the
+ * Grails application config when one is discoverable. Honours
+ * {@link Settings#SETTING_LOGGING_STACKTRACE_FILTER_CLASS} (the filterer
class — same key
+ * the exception resolver consults) and propagates
+ * {@link Settings#SETTING_LOG_FULL_STACKTRACE_ON_FILTER} to instances of
+ * {@link DefaultStackTraceFilterer}.
+ *
+ * <p>While no {@link GrailsApplication} is available (early-init paths,
plain {@code main}
+ * usage, tests that don't wire one up) a fresh {@link
DefaultStackTraceFilterer} is returned
+ * and <em>not</em> cached — so once the application context boots, the
next call resolves
+ * the configured filterer for real. After that the value is cached for
the lifetime of the
+ * JVM, matching the historical behaviour of the previous {@code static
final} field.
+ */
+ private static StackTraceFilterer resolveStackFilterer() {
+ StackTraceFilterer cached = stackFilterer;
+ if (cached != null) {
+ return cached;
+ }
+ GrailsApplication application = findApplicationQuietly();
Review Comment:
Superseded along with the above -- same lazy-resolution design that is gone
now. With the bootstrap-phase init, there is a single stackFilterer static
field written once (or left at the FALLBACK_FILTERER default), matching the
pre-PR single-instance semantics.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]