It still isn’t clear to me why the existing lookups aren’t sufficient. I thought we already have a lookup that does the same thing.
Ralph > On Jan 20, 2022, at 5:48 AM, Gary Gregory <garydgreg...@gmail.com> wrote: > > Hi Carter, > > I have several needs I am trying to satisfy. I have a lot of customizations > I have to support and implement in Log4j 1 and 2 (the Log4j 1 code is being > migrated to Log4j 2, but we still need to use the bridge to support Log4j 1 > in 3rd party dependencies and transitive dependencies). We have new apps, > we have legacy apps, we have a lot of code. We do a lot of what I would > call in-flight manipulation of Log4j 1 and 2 in these apps, and some plain > old [re]configurations using the Configurator APIs, which are the easy use > cases to implement and support. Users (devs and admins really) can change > the Log4j configuration file and have Log4j monitor the file and that's > fine, but that's the advanced case because people can too easily muck up > these configuration files. Instead of mucking with files, these app servers > come up, stay up, and need to be configured and reconfigured through a set > of (REST) admin APIs. Some of these admin tasks do all sorts of > introspections and reconfigurations and that is where this kind of API > comes in. I want to be able to start from something like an Interpolator > (in all these code bases, we use the Log4j Interpolator, Commons Lang, > Common Text, you name it, it's in some code base somewhere), find this or > that StrLookup and returns pieces of it to client, so a UI can say "You're > got this config setting, would you like to change it?". Depending on the > use case, the app, and the server combo, sometimes changing a setting, > means the UI generates a new config file and sends it over, sometimes to > translates to calling a specific Configurator API like one of the > setLevel() APIs, and some other time we query and/or edit objects directly > in Log4j and elsewhere. Sorry for the long write up! > > Gary > >> On Wed, Jan 19, 2022 at 6:32 PM Carter Kozak <cko...@ckozak.net> wrote: >> >> Any chance you could help me understand the rationale for this feature? I >> opted not to implement a method akin to MapLookup.getMap because that >> wasn't used, avoiding unnecessary API constraints allows us to refactor >> more easily in the future. If the values are required elsewhere, it may be >> reasonable, but I have another change in flight that may impact such >> consumers. >> >> Thanks! >> -ck >> >> On Sat, Jan 15, 2022, at 18:45, ggreg...@apache.org wrote: >> >> This is an automated email from the ASF dual-hosted git repository. >> >> ggregory pushed a commit to branch release-2.x >> in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git >> >> commit d402f360fbad18bc3c0902a65e8e53a1202e57d5 >> Author: Gary Gregory <garydgreg...@gmail.com> >> AuthorDate: Sat Jan 15 18:45:37 2022 -0500 >> >> Add PropertiesLookup#getProperties(). >> >> Commit 1/2 for cherry-picking to master. >> --- >> .../logging/log4j/core/lookup/PropertiesLookup.java | 19 >> ++++++++++++++++--- >> 1 file changed, 16 insertions(+), 3 deletions(-) >> >> diff --git >> a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/PropertiesLookup.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/PropertiesLookup.java >> index 995a71b..3066792 100644 >> --- >> a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/PropertiesLookup.java >> +++ >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/PropertiesLookup.java >> @@ -34,16 +34,28 @@ public final class PropertiesLookup implements >> StrLookup { >> */ >> private final Map<String, String> properties; >> >> + /** >> + * Constructs a new instance for the given map. >> + * >> + * @param properties map these. >> + */ >> public PropertiesLookup(final Map<String, String> properties) { >> this.properties = properties == null >> ? Collections.emptyMap() >> : properties; >> } >> >> + /** >> + * Gets the property map. >> + * >> + * @return the property map. >> + */ >> + public Map<String, String> getProperties() { >> + return properties; >> + } >> + >> @Override >> - public String lookup( >> - @SuppressWarnings("ignored") final LogEvent event, >> - final String key) { >> + public String lookup(@SuppressWarnings("ignored") final LogEvent >> event, final String key) { >> return lookup(key); >> } >> >> @@ -65,4 +77,5 @@ public final class PropertiesLookup implements StrLookup >> { >> public String toString() { >> return "PropertiesLookup{properties=" + properties + '}'; >> } >> + >> } >> >> >>