I’m looking for some inspiration. At work we use Spring Cloud Config and host our logging configuration there. It is shared by something like 150 services, which comes out to hundreds of service instances. We have a standard of including the user’s id and the customer’s account number in the ThreadContext and passing those automatically from one service to another. Operationally, went to normally log at WARN or INFO. But when a customer calls with a problem we want to be able to enable debug logging for that user or account. I know I could use either the DynamicThresholdFilter or the ContextMapFilter to do this.
So here are the issues. 1. We don’t really want operations folks editing the log4j configuration file directly. 2. Our SCC uses a Git repo hosted by a third party. We don’t really want to open access to allow Git to call SCCs endpoint to notify it of changes. 3. Without the Git notification we will have to poll for changes in SCC. This means it could be a few minutes before SCC notices changes and then another few minutes before Log4j notices changes. I’m considering doing something like: <DynamicThresholdFilter key=“accountNumber" defaultThreshold=“ERROR" onMatch="ACCEPT" onMismatch="NEUTRAL"> <KeyValuePair key=“${scc:accountNumber}" value="DEBUG"/> </DynamicThresholdFilter> Where scc represents a new SpringCloudConfigLookup. This would have to represent a file in SCC that contains a mapping for accountNumber to something. There are a number of issues with this. 1. This still requires editing and committing a file. 2. It has the polling delay. 3. Log4j-Spring-Cloud-Config would have to cause the file to be monitored just as the config file is. 4. The syntax of the existing Filters requires that when looking for multiple users each must be specified in its own key. That would mean the filter would have to be preconfigured with the maximum number of accounts it can look for. It would also mean the syntax for specifying the account numbers could get messy. However, it could register a Watcher for the external file and force a reconfiguration when it does. An alternative to reconfiguring could be to specify the variable as $${src:accountNumber) and resolve the lookup for every log event. Presumably it would use a cached value and cause the value to change when the file is changed. These are just the first few things I thought of to do this. Does anyone else have any ideas? Ralph