Looking at this a bit more, there are a couple of issues:
It looks like the change in behavior is a results of deprecating SolrConfig.severeErrors. Specifically, there is a bit of code in SolrDispatchFilter that prints out the severeErrors if:
if( abortOnConfigurationError && SolrConfig.severeErrors.size() > 0 )
Well, aborgOnConfigurationError is also deprecated with the comment:
@deprecated all cores now abort on configuration error regardless of configuration
But apparently they no longer print out the stack trace that is helpful. And the line in 3x solrconfig.xml that set abortOnConfigurationError=true has been removed so it defaults to false. But even when true, printStackTrace doesn't print out on trunk, I don't quite know why. I hacked some stuff and going into that loop and printing out getMessage() from every Throwable in that collection does print a message. But I'm not going to worry about that now...
I wonder it this is related to this deprecation comment in SolrConfig.xml for severeErrors:
"@deprecated All exceptions encountered during config parsing are now thrown by the respective constructors, preventing initialization."
The other issue is that two SolrException c'tors hard code "logged=true", which puzzles me:
public SolrException(ErrorCode code, Throwable th)
logged=true; <== what?
Would it make more sense to do something like:
if (th instanceof SolrException)
logged = ((SolrExcption)th).logged;
logged = true;
And something similar for the other constructor that hard-codes true that has this signature:
public SolrException(ErrorCode code, String msg, Throwable th)
and let the default value of false stand otherwise? I could easily be persuaded that the else clause should be removed......
Although this code hasn't changed since 3.x days, it still seems questionable to hard-code this to true.
Anyway, the net-net of this is that we've lost some useful information. I'm not entirely comfortable with changing the constructors for SolrException to remove the hard-coded "true" without running it by folks. I would argue that doing what I outlined above makes sense, and if that results in more stack traces than we want people should use the c'tor that sets the logged value. What do you think?