This behavior has always worked like this since the internal implementation of logging changed from GemFire LogWriters to using Log4j. The reason is for performance. Geode is optimized for log level INFO with no filters -- it does this by wrapping all Log4j Loggers in a class called FastLogger which prevents Log4j from performing a bunch of filter checks as well as checking the timestamp of the log4j2.xml file. For some reason, the Log4j devs decided to have the check for changes to the configuration file occur within the thread performing a logging statement -- when this is allowed to happen, it kills the performance of Geode. So FastLogger has a volatile boolean that short circuits all of this extra checking, but it can only do this if the code can be sure that there are no filters and that the log level is INFO (or WARN or ERROR). Geode knows that it can bypass all of that extra Log4j behavior only if it's the default log4j2.xml that is bundled inside of the Geode jar (geode-core in older releases and now moved to geode-log4j).
On Wed, Apr 8, 2020 at 8:40 AM Alberto Bustamante Reyes <alberto.bustamante.re...@est.tech> wrote: > Thanks Kirk. Could I ask what was the reason behind this change? In older > Geode version (1.10 I think) we were using our own log4j files, and the > command was working fine. > > Digging into the code I saw that its possible to start servers with a > system property (--J=-Dgeode.LOG_LEVEL_UPDATE_OCCURS=ALWAYS) that also > allows the "change loglevel" command to work. I think that could be a > better alternative to document, as it is more command specific, instead of > documenting the "geode-default" property. > > For example (in italics the part that could be added to the documentation > of the command): > > "Changes the logging level on specified members. This command only will > take effect if the default Geode logging configuration is used. > > In case of using custom log4j configuration files, this command will not > work unless the member whose logging level you want to change was started > using the '--J=-Dgeode.LOG_LEVEL_UPDATE_OCCURS=ALWAYS' system property." > > BR/ > > Alberto B. > > > > > ________________________________ > De: Kirk Lund <kl...@apache.org> > Enviado: martes, 7 de abril de 2020 0:17 > Para: geode <dev@geode.apache.org> > Asunto: Re: About "change loglevel" command > > Yes, this behavior is correct. If the User provides their own logging > configuration (or a different logging impl such as logback) then none of > the log-* configuration properties in Geode have any effect. > > On Mon, Apr 6, 2020 at 9:26 AM Alberto Bustamante Reyes > <alberto.bustamante.re...@est.tech> wrote: > > > Hi all, > > > > I have observed that "change loglevel" command doesn't work if the > > "log4j2.xml" file used doesn't contain the "geode-default" property set > to > > true. This requirement is not documented [1], so I would like to confirm > if > > this is the correct behavior. > > > > If we add "geode-default=true" in our log4j2 files, the "change loglevel" > > works fine, but Im not sure if its ok to use that property on a custom > log > > config file. > > > > Thanks, > > > > > > Alberto B. > > > > [1] > > > https://geode.apache.org/docs/guide/112/tools_modules/gfsh/command-pages/change.html > > > > >