This will log to a file for web services. You need Grouper WS v2.3.0+ patch 12.
The log will have one entry for a request.
Configure
In the log4j.properties, configure the web services to a file for debug
log4j.appender.grouper_ws = org.apache.log4j.DailyRollingFileAppender log4j.appender.grouper_ws.File = ${grouper.home}logs/grouper_ws.log log4j.appender.grouper_ws.DatePattern = '.'yyyy-MM-dd log4j.appender.grouper_ws.MaxBackupIndex = 30 log4j.appender.grouper_ws.layout = org.apache.log4j.PatternLayout log4j.appender.grouper_ws.layout.ConversionPattern = %d{ISO8601}: %m%n log4j.appender.grouper_ws_longRunning = org.apache.log4j.DailyRollingFileAppender log4j.appender.grouper_ws_longRunning.File = ${grouper.home}logs/grouper_ws_longRunning.log log4j.appender.grouper_ws_longRunning.DatePattern = '.'yyyy-MM-dd log4j.appender.grouper_ws_longRunning.MaxBackupIndex = 30 log4j.appender.grouper_ws_longRunning.layout = org.apache.log4j.PatternLayout log4j.appender.grouper_ws_longRunning.layout.ConversionPattern = %d{ISO8601}: %m%n # ws logs log4j.logger.edu.internet2.middleware.grouper.ws.util.GrouperWsLog = DEBUG, grouper_ws log4j.additivity.edu.internet2.middleware.grouper.ws.util.GrouperWsLog = false log4j.logger.edu.internet2.middleware.grouper.ws.util.GrouperWsLongRunningLog = DEBUG, grouper_ws_longRunning log4j.additivity.edu.internet2.middleware.grouper.ws.util.GrouperWsLongRunningLog = false
Example
2018-05-01 18:57:43,764: start: 18:57:43.638, remoteAddr: 127.0.0.1, requestUrl: http://localhost:8088/grouperWs/servicesRest/v2_3_000/permissionAssignments, method: getPermissionAssignments, clientVersion: 2.3.0, immediateOnly: false, includeAssignmentsOnAssignments: false, includeAttributeAssignments: false, includeAttributeDefNames: false, includeGroupDetail: false, includeLimits: false, includePermissionAssignDetail: false, includeSubjectDetail: false, pointInTimeFrom: 2018-05-01 18:57:43.076, pointInTimeTo: 2018-05-01 18:57:43.076, wsAttributeDefLookups: Array size: 1: [0]: name: aStem:permissionDef, userIdLoggedIn: GrouperSystem, userIdLoggedInSource: g:isa, success: T, resultCode: SUCCESS, serverVersion: 2.3.0, resultsSize: 0, elapsedMillis: 126 2018-05-01 21:50:48,283: start: 21:50:48.272, remoteAddr: 127.0.0.1, requestUrl: http://localhost:8088/grouperWs/servicesRest/v2_3_000/attributeDefNames, method: findAttributeDefNames, clientVersion: 2.3.0, wsAttributeDefNameLookups: Array size: 2: [0]: name: aStem1:newAttributeDefName1, [1]: name: aStem1:newAttributeDefName2, userIdLoggedIn: GrouperSystem, userIdLoggedInSource: g:isa, success: T, resultCode: SUCCESS, serverVersion: 2.3.0, resultsSize: 2, elapsedMillis: 11 2018-05-01 19:09:56,943: start: 19:09:56.901, remoteAddr: 127.0.0.1, requestUrl: http://localhost:8088/grouperWs/servicesRest/v2_3_000/memberships, method: getMemberships, clientVersion: 2.3.0, includeGroupDetail: false, includeSubjectDetail: false, subjectAttributeNames: Array size: 2: [0]: a, [1]: name, wsGroupLookups: Array size: 2: [0]: name: aStem:aGroup, [1]: name: aStem:aGroup2, wsMemberFilter: All, userIdLoggedIn: GrouperSystem, userIdLoggedInSource: g:isa, success: T, resultCode: SUCCESS, serverVersion: 2.3.0, resultsSize: 4, elapsedMillis: 41
Request and correlation id
Set these headers for request and correlation id
X-Correlation-Id: xyz X-Request-Id: abc
The log messages on the server will look like this
2022-12-12T22:36:40,099: [http-nio-8080-exec-7] DEBUG GrouperLogger.debug(62) - [< GrouperSystem - 127.0.0.1 >] - reqId: abc, corrId: xyz, start: 22:36:19.842, remoteAddr: 127.0.0.1, requestUrl: http://localhost:8080/grouper-ws/servicesRest/2.6.0/groups, method: addMember, clientVersion: 2.6.0, includeGroupDetail: false, includeSubjectDetail: false, replaceAllExisting: false, subjectLookups: Array size: 2: [0]: subjectId: test.subject.0, [1]: subjectId: test.subject.1, txType: NONE, wsGroupLookup: name: aStem:aGroup, userIdLoggedIn: GrouperSystem, userIdLoggedInSource: g:isa, successes: 2, failures: 0, success: T, resultCode: SUCCESS, serverVersion: 2.6.0, resultsSize: 2, elapsedMillis: 266