All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ch.qos.logback.access.sift.AccessEventDiscriminator Maven / Gradle / Ivy

There is a newer version: 1.5.16
Show newest version
/**
 * Logback: the reliable, generic, fast and flexible logging framework.
 * Copyright (C) 1999-2015, QOS.ch. All rights reserved.
 *
 * This program and the accompanying materials are dual-licensed under
 * either the terms of the Eclipse Public License v1.0 as published by
 * the Eclipse Foundation
 *
 *   or (per the licensee's choosing)
 *
 * under the terms of the GNU Lesser General Public License version 2.1
 * as published by the Free Software Foundation.
 */
package ch.qos.logback.access.sift;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import ch.qos.logback.access.spi.IAccessEvent;
import ch.qos.logback.core.sift.AbstractDiscriminator;

/**
 * 
 * AccessEventDiscriminator's job is to return the value of a designated field
 * in an {@link IAccessEvent} instance.
 * 
 * 

The field is specified via the {@link FieldName} property. * * @author Ceki Gülcü * */ public class AccessEventDiscriminator extends AbstractDiscriminator { /** * At present time the followed fields can be designated: COOKIE, * REQUEST_ATTRIBUTE, SESSION_ATTRIBUTE, REMOTE_ADDRESS, * LOCAL_PORT,REQUEST_URI * *

The first three fields require an additional key. For the * SESSION_ATTRIBUTE field, the additional key named "id" has special meaning * as it is mapped to the session id of the current http request. */ public enum FieldName { COOKIE, REQUEST_ATTRIBUTE, SESSION_ATTRIBUTE, REMOTE_ADDRESS, LOCAL_PORT, REQUEST_URI } String defaultValue; String key; FieldName fieldName; String additionalKey; @Override public String getDiscriminatingValue(IAccessEvent acccessEvent) { String rawValue = getRawDiscriminatingValue(acccessEvent); if (rawValue == null || rawValue.length() == 0) { return defaultValue; } else { return rawValue; } } public String getRawDiscriminatingValue(IAccessEvent acccessEvent) { switch (fieldName) { case COOKIE: // tested return acccessEvent.getCookie(additionalKey); case LOCAL_PORT: return String.valueOf(acccessEvent.getLocalPort()); case REQUEST_ATTRIBUTE: // tested return getRequestAttribute(acccessEvent); case SESSION_ATTRIBUTE: return getSessionAttribute(acccessEvent); case REMOTE_ADDRESS: return acccessEvent.getRemoteAddr(); case REQUEST_URI: // tested return getRequestURI(acccessEvent); default: return null; } } private String getRequestAttribute(IAccessEvent acccessEvent) { String attr = acccessEvent.getAttribute(additionalKey); if (IAccessEvent.NA.equals(attr)) { return null; } else { return attr; } } private String getRequestURI(IAccessEvent acccessEvent) { String uri = acccessEvent.getRequestURI(); if (uri != null && uri.length() >= 1 && uri.charAt(0) == '/') { return uri.substring(1); } else { return uri; } } private String getSessionAttribute(IAccessEvent acccessEvent) { HttpServletRequest req = acccessEvent.getRequest(); if (req != null) { HttpSession session = req.getSession(false); if (session != null) { if ("id".equalsIgnoreCase(additionalKey)) { return session.getId(); } else { Object v = session.getAttribute(additionalKey); if (v != null) { return v.toString(); } } } } return null; } @Override public void start() { int errorCount = 0; if (defaultValue == null) { addError("\"DefaultValue\" property must be set."); } if (fieldName == null) { addError("\"FieldName\" property must be set."); errorCount++; } switch (fieldName) { case SESSION_ATTRIBUTE: case REQUEST_ATTRIBUTE: case COOKIE: if (additionalKey == null) { addError("\"OptionalKey\" property is mandatory for field name " + fieldName.toString()); errorCount++; } } if (errorCount == 0) { started = true; } } public void setFieldName(FieldName fieldName) { this.fieldName = fieldName; } public FieldName getFieldName() { return fieldName; } public String getAdditionalKey() { return additionalKey; } public void setAdditionalKey(String additionalKey) { this.additionalKey = additionalKey; } /** * @see #setDefaultValue(String) * @return */ public String getDefaultValue() { return defaultValue; } /** * The default value returned by this discriminator in case it cannot compute * the discriminating value from the access event. * * @param defaultValue */ public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy