I got feedback via https://issues.apache.org/jira/browse/LOG4J2-3469 that what I am doing is safe, but not in the spirit of Log4J2 (which is external control focused, preventing a lot of applications from updating).
The offered a slightly prettier way to things, but I still do not like it (my own personal feeling) The majority of the work has gone into cleaning up our LoggingUtils (and supporting LoggingStartupContextListener and LoggingInitializer) so they do not trip on each other, can update the database directory configs in place, etc... I am going to complete the work based on their feedback so we have something; but I am close to trying logback. -- Jody Garnett On Apr 6, 2022 at 2:02:17 PM, Jody Garnett <jody.garn...@gmail.com> wrote: > Andrea: > > I reached out to the log4j community > https://issues.apache.org/jira/browse/LOG4J2-3469 > > This took a long time to write up, but doing so kind of confirmed for me > that I am using the API as they intended. The "Node" data structure is what > their builder infrastructure produces (either parsing or direct use of > builders). And I am indeed correctly hacking the results of parsing before > it is used to create real objects (which do not like to be changed once > created). > > That said they are missing out on an opportunity to be kind to me, their > builders do not provide any ability to update only add. > -- > Jody Garnett > > > On Apr 6, 2022 at 7:59:36 AM, Jody Garnett <jody.garn...@gmail.com> wrote: > >> I can run an experiment, but logback was also very much configuration up >> front and under external control attitude (which is not a bad attitude to >> be honest). >> >> Jody >> >> On Wed, Apr 6, 2022 at 1:08 AM Andrea Aime < >> andrea.a...@geosolutionsgroup.com> wrote: >> >>> Hi Jody, >>> silly question maybe, but did you try to reach out to the Log4J2 >>> community and see if there >>> is a less painful way to do it? >>> Being able to change the log config without restarts is key to the day >>> to day management of GeoServer. >>> >>> Otherwise, maybe we can look into Logback (75% kidding here) >>> >>> Cheers >>> Andrea >>> >>> On Wed, Apr 6, 2022 at 8:05 AM Jody Garnett <jody.garn...@gmail.com> >>> wrote: >>> >>>> Sorry I have been heads down working on this and have not provided an >>>> update for some days. >>>> >>>> The GeoTools and GeoWebCache upgrade has gone smoothly (just a lot of >>>> work). >>>> >>>> The GeoServer upgrade also went well, especially using the log4j 1.2 >>>> api for configuration. >>>> >>>> Where I have run into trouble is switching over to using Log4j 2 api >>>> for configuration; despite the widely publicized vulnerabilities the >>>> configuration is far more locked down and not open to being updated while >>>> the application is running... >>>> >>>> There are three things we wish to post-process: >>>> >>>> - RELINQUISH_LOG4J_CONTROL system/context/env value >>>> - Overriding the log output file location using >>>> GT2_LOGGING_REDIRECTION system/context/env value or from settings >>>> - Surpassing all console loggers from settings >>>> - Surpassing all file loggers, flag used by test cases >>>> >>>> >>>> There are examples of how to safely add appenders to a configuration, >>>> by hijacking the configuration factory. But it has been quite annoying to >>>> provide an alternate log output file location as our technique >>>> (system/context/env or setting) - is more flexible than the out-of-the-box >>>> support log4j has for log file properties. >>>> >>>> <Configuration name="DEFAULT_LOGGING" status="error" dest="out"> >>>> <Properties> >>>> <Property >>>> name="GEOSERVER_LOG_LOCATION">logs/geoserver</Property> >>>> </Properties> >>>> .. >>>> <Appenders> >>>> <RollingFile name="geoserverlogfile"> >>>> <filename>${GEOSERVER_LOG_LOCATION}.log</filename> >>>> <filePattern>${GEOSERVER_LOG_LOCATION}-%i.log</filePattern> >>>> ... >>>> >>>> The above technique is intended to be used to quickly isolate a >>>> property making the configuration easier to maintain, support is available >>>> to reference ${env: GEOSERVER_LOG_LOCATION} or {sys:GEOSERVER_LOG_LOCATION} >>>> or {web: attr. GEOSERVER_LOG_LOCATION} ... but not all three at once. >>>> There is also a thread local, ${ctx:GEOSERVER_LOG_LOCATION} which can >>>> be combined with something called routing. The point being that it is >>>> carefully designed to be declarative and does not take kindly (or provide a >>>> mechanics) for a configuration to be post processed; and only limited >>>> ability to add appenders, and no ability to edit properties. >>>> >>>> Grr... >>>> >>>> So I have made progress by taking one of the suggesting, making a >>>> custom GeoServerXmlConfiguration (registered by a >>>> GeoServerXmlConfigurationFactory), as the only safe way to post-process >>>> content during load. >>>> >>>> And then found a protected method available for just-in-time creativity: >>>> >>>> @Override protected void preConfigure(Node node) { >>>> if( !node.isRoot() && node.getName().equals("Property")){ >>>> if( node.getAttributes().containsKey("name") && >>>> >>>> node.getAttributes().get("name").equals("GEOSERVER_LOG_LOCATION")) { >>>> // override value with current GEOSERVER_LOG_LOCATION >>>> node.setValue("foo.log"); >>>> } >>>> } >>>> super.preConfigure(node); >>>> } >>>> >>>> I think this is the last technical hurdle, next task is figure out how >>>> to pass in current value of GEOSERVER_LOG_LOCATION (or make LoggingUtils >>>> responsible for this), and pulling this together. >>>> -- >>>> Jody Garnett >>>> >>> _______________________________________________ >>>> Geoserver-devel mailing list >>>> Geoserver-devel@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/geoserver-devel >>>> >>> >>> >>> -- >>> >>> Regards, >>> >>> Andrea Aime >>> >>> == >>> GeoServer Professional Services from the experts! >>> >>> Visit http://bit.ly/gs-services-us for more information. >>> == >>> >>> Ing. Andrea Aime >>> @geowolf >>> Technical Lead >>> >>> GeoSolutions Group >>> phone: +39 0584 962313 >>> >>> fax: +39 0584 1660272 >>> >>> mob: +39 333 8128928 >>> >>> https://www.geosolutionsgroup.com/ >>> >>> http://twitter.com/geosolutions_it >>> >>> ------------------------------------------------------- >>> >>> Con riferimento alla normativa sul trattamento dei dati personali (Reg. >>> UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si >>> precisa che ogni circostanza inerente alla presente email (il suo >>> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è >>> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il >>> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra >>> operazione è illecita. Le sarei comunque grato se potesse darmene notizia. >>> >>> This email is intended only for the person or entity to which it is >>> addressed and may contain information that is privileged, confidential or >>> otherwise protected from disclosure. We remind that - as provided by >>> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this >>> e-mail or the information herein by anyone other than the intended >>> recipient is prohibited. If you have received this email by mistake, please >>> notify us immediately by telephone or e-mail >>> >> -- >> -- >> Jody Garnett >> >
_______________________________________________ Geoserver-devel mailing list Geoserver-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geoserver-devel