In Grouper v2.6.8+ you can dynamically configure logging in Grouper.

Ideally you could use the built-in log4j2.xml, configure if you want to log to file or logpipe, and override log levels in the grouper.properties or in the database.

If you change the configuration in the DB (via the UI), then all Grouper instances pointing to the DB will dynamically reconfigure to the new levels.  Note, anything in grouperClient (look at the package) will not work with this.  You need to make changes to the log4j config file for those.

By default the configuration will be checked for updates every minute

grouper.properties

# if should check for dynamic updates
# {valueType: "boolean", defaultValue: "true" }
# grouper.logging.dynamicUpdates.run =

# sleep for this amount of seconds after each run
# {valueType: "boolean", defaultValue: "60" }
# grouper.logging.dynamicUpdates.checkAfterSeconds =


 If there is a change from the current logging settings, those will be applied based on these settings

# this is the package or class to log, required
# {valueType: "string", regex: "^grouper\\.logger\\.[^.]+\\.name$"}
# grouper.logger.<myLoggerSettingConfigId>.name = 

# required log level, should be one of: off, fatal, error, warn, info, debug, trace, all
# {valueType: "string", regex: "^grouper\\.logger\\.[^.]+\\.level$", formElement: "dropdown", optionValues: ["off", "fatal", "error", "warn", "info", "debug", "trace", "all"] }
# grouper.logger.<myLoggerSettingConfigId>.level = 

# which appender to send logs to (optional), default to the appender for the class logs to, or default to: grouper_error
# e.g. CATALINA, stderr, grouper_error, grouper_daemon, grouper_pspng, grouper_provisioning, grouper_ws, grouper_ws_longRunning
# {valueType: "string", regex: "^grouper\\.logger\\.[^.]+\\.appender$"}
# grouper.logger.<myLoggerSettingConfigId>.appender = 

e.g.

grouper.logger.WsGrouperLdapAuthentication.name = edu.internet2.middleware.grouper.ws.security.WsGrouperLdapAuthentication
grouper.logger.WsGrouperLdapAuthentication.level = DEBUG

e.g. WS logs

grouper.logger.grouper_ws.name = edu.internet2.middleware.grouper.ws.util.GrouperWsLog
grouper.logger.grouper_ws.level = debug


Troubleshooting

You can log this process to troubleshoot:

In: /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.additionalLoggers.xml.txt

        <Logger name="edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfig" level="debug" additivity="false">
            <AppenderRef ref="stderr"/>
        </Logger>

Or dynamically in grouper.properties

grouper.logger.GrouperLoggingDynamicConfig.name = edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfig
grouper.logger.GrouperLoggingDynamicConfig.level = debug

Log entry:

2022-02-26T15:12:34,871: [Thread-8] WARN  GrouperLoggingDynamicConfig.checkForUpdates(232) - [] - Dynamically adding logger config 'edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfigTest'

2022-02-26T15:12:34,871: [Thread-8] DEBUG GrouperLoggingDynamicConfig.checkForUpdates(329) - [] - configIdsSize: 2, appendersToAdd: 1, appendersToDelete: 0, addingLogger_edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfigTest: true, level_edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfigTest: DEBUG, needsToAddLogger_edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfigTest: false, needsToChangeLogger_edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfigTest: true, appender_edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfigTest: stderr, currentLevel_edu.internet2.middleware.grouper.log.GrouperLoggingDynamicConfigTest: DEBUG




  • No labels