Skip to content

Commit

Permalink
Update logging data for api/access log #499
Browse files Browse the repository at this point in the history
* add to api log: duration, project
* change authtoken logging, emit only 'token' or 'form' into log
  • Loading branch information
gschueler committed Aug 12, 2013
1 parent 83ccb69 commit 45fd768
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 21 deletions.
4 changes: 2 additions & 2 deletions packaging/debroot/etc/rundeck/log4j.properties
Expand Up @@ -141,7 +141,7 @@ log4j.appender.apirequests=org.apache.log4j.DailyRollingFileAppender
log4j.appender.apirequests.file=/var/log/rundeck/rundeck.api.log
log4j.appender.apirequests.append=true
log4j.appender.apirequests.layout=org.apache.log4j.PatternLayout
log4j.appender.apirequests.layout.ConversionPattern=[%d{ISO8601}] %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} "%X{method} %X{uri}" (%X{userAgent})%n
log4j.appender.apirequests.layout.ConversionPattern=[%d{ISO8601}] %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{duration} %X{project} "%X{method} %X{uri}" (%X{userAgent})%n

#
# Web access log
Expand All @@ -152,4 +152,4 @@ log4j.appender.access=org.apache.log4j.DailyRollingFileAppender
log4j.appender.access.file=/var/log/rundeck/rundeck.access.log
log4j.appender.access.append=true
log4j.appender.access.layout=org.apache.log4j.PatternLayout
log4j.appender.access.layout.ConversionPattern=[%d{ISO8601}] "%X{method} %X{uri}" %X{duration} %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{project} [%X{contentType}] (%X{userAgent})%n
log4j.appender.access.layout.ConversionPattern=[%d{ISO8601}] "%X{method} %X{uri}" %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{duration} %X{project} [%X{contentType}] (%X{userAgent})%n
4 changes: 2 additions & 2 deletions packaging/root/etc/rundeck/log4j.properties
Expand Up @@ -141,7 +141,7 @@ log4j.appender.apirequests=org.apache.log4j.DailyRollingFileAppender
log4j.appender.apirequests.file=/var/log/rundeck/rundeck.api.log
log4j.appender.apirequests.append=true
log4j.appender.apirequests.layout=org.apache.log4j.PatternLayout
log4j.appender.apirequests.layout.ConversionPattern=[%d{ISO8601}] %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} "%X{method} %X{uri}" (%X{userAgent})%n
log4j.appender.apirequests.layout.ConversionPattern=[%d{ISO8601}] %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{duration} %X{project} "%X{method} %X{uri}" (%X{userAgent})%n

#
# Web access log
Expand All @@ -152,4 +152,4 @@ log4j.appender.access=org.apache.log4j.DailyRollingFileAppender
log4j.appender.access.file=/var/log/rundeck/rundeck.access.log
log4j.appender.access.append=true
log4j.appender.access.layout=org.apache.log4j.PatternLayout
log4j.appender.access.layout.ConversionPattern=[%d{ISO8601}] "%X{method} %X{uri}" %X{duration} %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{project} [%X{contentType}] (%X{userAgent})%n
log4j.appender.access.layout.ConversionPattern=[%d{ISO8601}] "%X{method} %X{uri}" %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{duration} %X{project} [%X{contentType}] (%X{userAgent})%n
Expand Up @@ -31,5 +31,5 @@ default.user.name=user
default.user.password=user
logger.options.format=[%d{ISO8601}] %X{httpStatusCode} %X{contentLength}B %X{durationTime}ms %X{lastModifiedDateTime} [%X{jobName}] %X{url} %X{contentSHA1}%n
logger.jobchanges.format=[%d{ISO8601}] %X{user} %X{change} [%X{id}] %X{project} "%X{groupPath}/%X{jobName}" (%X{method})%X{extraInfo}%n
logger.apirequests.format=[%d{ISO8601}] %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} "%X{method} %X{uri}" (%X{userAgent})%n
logger.access.format=[%d{ISO8601}] "%X{method} %X{uri}" %X{duration} %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{project} [%X{contentType}] (%X{userAgent})%n
logger.apirequests.format=[%d{ISO8601}] %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{duration} %X{project} "%X{method} %X{uri}" (%X{userAgent})%n
logger.access.format=[%d{ISO8601}] "%X{method} %X{uri}" %X{remoteHost} %X{secure} %X{remoteUser} %X{authToken} %X{duration} %X{project} [%X{contentType}] (%X{userAgent})%n
Expand Up @@ -72,9 +72,9 @@ class AA_TimerFilters {
remoteUser: request.remoteUser ?: request.authenticatedUser,
remoteHost: request.remoteHost,
userAgent: request.getHeader('User-Agent') ?: '-',
authToken: (request.authenticatedToken ? (request.authenticatedToken?.size() > 5 ? request.authenticatedToken.substring(0, 5) : '') + "****" : '-'),
authToken: (request.authenticatedToken ? 'token' : 'form'),
method: request.method,
secure: Boolean.toString(request.isSecure()),
secure: request.isSecure() ? 'https' : 'http',
contentType: response.getContentType(),
project: session.project
]
Expand Down
28 changes: 15 additions & 13 deletions rundeckapp/grails-app/conf/rundeck/filters/ApiRequestFilters.groovy
Expand Up @@ -55,25 +55,26 @@ public class ApiRequestFilters {
public final static int API_MIN_VERSION = API_EARLIEST_VERSION
public final static int API_MAX_VERSION = API_CURRENT_VERSION

static def logDetail(HttpServletRequest request, params, String action, String controller, String message = null) {
static def logDetail(HttpServletRequest request, project, String action, String controller, String message = null) {
Map context = [
remoteHost: request.remoteHost,
version: request.api_version ?: '?',
remoteUser:request.remoteUser?: request.authenticatedUser,
valid:!(request.invalidApiAuthentication),
authToken:(request.authenticatedToken?(request.authenticatedToken?.size() > 5 ? request.authenticatedToken.substring(0, 5) :'') + "****":'-'),
remoteUser: request.remoteUser ?: request.authenticatedUser,
valid: !(request.invalidApiAuthentication),
authToken: (request.authenticatedToken ? 'token' : 'form'),
controller: controller,
action: action,
params: params,
uri: request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE)?: request.getRequestURI(),
userAgent:request.getHeader('User-Agent')?:'-',
method:request.method,
secure:Boolean.toString(request.isSecure())
uri: request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE) ?: request.getRequestURI(),
userAgent: request.getHeader('User-Agent') ?: '-',
method: request.method,
secure: request.isSecure() ? 'https' : 'http',
duration: System.currentTimeMillis() - request['ApiRequestFilters._TIMER'],
project: project
]
MDC.clear()
context.each {MDC.put(it.key,it.value?:'')}
context.each { MDC.put(it.key, it.value ?: '') }
try {
logger.info(message ?: context.toString())
logger.info(message ? message + context : context.toString())
} finally {
MDC.clear()
}
Expand All @@ -86,6 +87,7 @@ public class ApiRequestFilters {
*/
apiVersion(uri: '/api/**') {
before = {
request['ApiRequestFilters._TIMER']=System.currentTimeMillis()
if (controllerName == 'api' && allowed_actions.contains(actionName) || request.api_version) {
request.is_allowed_api_request = true
return true
Expand All @@ -112,11 +114,11 @@ public class ApiRequestFilters {
return false;
}
request.api_version = VersionMap[params.api_version]
request['ApiRequestFilters.request.parameters']=params.toString()
request['ApiRequestFilters.request.parameters.project']=params.project?:''
return true
}
after = {
logDetail(request, request['ApiRequestFilters.request.parameters'], actionName, controllerName)
logDetail(request, request['ApiRequestFilters.request.parameters.project']?:session.project?:'', actionName, controllerName)
}
}
}
Expand Down

0 comments on commit 45fd768

Please sign in to comment.