Registro cronológico y rastreo

Todos los elementos de HCL Commerce pueden utilizar la clase del programa de utilidad LoggingHelper que se proporciona en el paquete com.ibm.commerce.foundation.common.util.logging para el rastreo y registro. Este programa de utilidad le ayuda a resolver el Java Logger (java.util.logging.Logger) asociado con el paquete de la clase que efectúa la llamada. Cuando el Logger se ha resuelto, la biblioteca utilizada para registrar mensajes es java.util.logging.Logger.

El ejemplo del código siguiente muestra cómo utilizar el objeto del registrador para el rastreo. Para obtener más información, consulte el tema Add logging and tracing to your application.

Nota: Añadir rastreo al código suele dar como resultado la creación de objetos nuevos. Debe comprobar si el registro cronológico está habilitado para la clase llamando al método LoggingHelper.isTraceEnabled(logger) antes de llamar a los métodos de registro cronológico.

Logger logger = LoggingHelper.getLogger(ExceptionData.class);
    if (LoggingHelper.isTraceEnabled(logger)) {
    StringBuffer sb = new StringBuffer(80);
    sb.append("Could not resolve message key '");
    sb.append(_strMessagekey);
    sb.append("' from the properties file ");
    sb.append(logger.getResourceBundleName());
    logger.logp(LoggingHelper.DEFAULT_TRACE_LOG_LEVEL,  CLASSNAME,
METHODNAME, sb.toString());
}

Los métodos que no se generan automáticamente deben tener puntos de entrada y salida de rastreo. Todas las sentencias de entrada de rastreo deben coincidir con las sentencias de salida. Las sentencias de entrada de rastreo suelen incluir parámetros de entrada, en caso de que los haya, mientras que las sentencias de salida incluyen los valores de retorno. Las sentencias de rastreo de entrada y salida deben ir dentro del bloque if-then si está habilitado el rastreo de componentes. A continuación, se muestra un ejemplo de código para los puntos de entrada y salida del método de rastreo:


public class GetOrderExpressionBuilder {

private static final
    String CLASSNAME =  GetOrderExpressionBuilder.class.getName();
private static final
    Logger LOGGER =
LoggingHelper.getLogger(GetOrderExpressionBuilder.class);
/**
 * Forms an expression to query orders by status.
 */
public ExpressionType findByOrderStatus(Map amNVPs) {
    final String METHODNAME = "findByOrderStatus";

     if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
        LOGGER.entering(CLASSNAME, METHODNAME, amNVPs);
    }

    ExpressionType findByOrderStatusExpression = null;
    // business logic...
    if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
        LOGGER.exiting(CLASSNAME, METHODNAME,
findByOrderStatusExpression);
   }
    return findByOrderStatusExpression;
  }
}

Enmascaramiento de datos confidenciales en rastreos

Hay muchos casos en los que es necesario enmascarar datos sensibles. HCL Commerce proporciona un programa de utilidad MaskingFactory para ayudar a enmascarar datos sensibles.

MaskingFactory lee una lista de parámetros y políticas de enmascaramiento del siguiente archivo: workspace_dir/WC/xml/config/wc-attribute-masking.xml Por ejemplo, se llama de la siguiente forma:

String maskedValue = com.ibm.commerce.foundation.internal.common.util.masking.MaskingFactory.getInstance().mask("password", "abc123");
Cuando se invoca, determina si los atributos están ocultos y cómo se ocultan.

En el ejemplo anterior, MaskingFactory ve password como parámetro que se lista en el archivo de configuración. Por ejemplo, devuelve un valor ******* en lugar del valor abc123.

El archivo wc-attribute-masking.xml contiene los siguientes elementos:
MaskingPolicy
Define una política de enmascaramiento que va a utilizar MaskingFactory.
MaskingPolicy.classname
Define el nombre de clase de implementación de política de enmascaramiento.
MaskingPolicyAttributes
Define una lista de atributos utilizados para inicializar la política de enmascaramiento. La lista se define en los elementos Attribute incluidos como pares nombre-valor.
Attribute.name
El nombre de un atributo.
Attribute.value
El valor de un atributo.
MaskingAttributes
Define una lista de parámetros a ocultar por esta política de enmascaramiento.
MaskingAttribute.name
El nombre del parámetro cuyo correspondiente valor debe enmascararse.
MaskingAttribute.compareType
Indica si el nombre de parámetro exacto o el principio del nombre de parámetro resultará en una coincidencia. Los valores válidos son equals y starts. El valor predeterminado es equals.
MaskingAttribute.caseInsensitive
Indica si la coincidencia de nombres de parámetro distingue o no entre mayúsculas y minúsculas. Los valores válidos son true y false. El valor predeterminado es false, donde se encuentra una coincidencia si las mayúsculas y minúsculas coinciden exactamente con la configuración.
Se pueden definir varias políticas de enmascaramiento en el archivo wc-attribute-masking.xml. Por ejemplo:

<!--
		mask value is always 8 *s
	-->
	<wc:MaskingPolicy description="Replace value with 8 *s"
		classname="com.ibm.commerce.masking.impl.ReplaceCharactersMaskingPolicyImpl">
		<wc:MaskingPolicyAttributes>
			<wc:Attribute name="contentLength" value="8" />
			<wc:Attribute name="replaceCharacter" value="*" />
		</wc:MaskingPolicyAttributes>
		<wc:MaskedAttributes>
			<wc:MaskedAttribute name="logonPassword" compareType="starts" />
			<wc:MaskedAttribute name="password" caseInsensitive="true" />
			....
		</wc:MaskedAttributes>
	</wc:MaskingPolicy>

	<!--
		mask value is the first digit, last four digits and the rest
		of the middle of the string is replaced by *s.
	-->
	<wc:MaskingPolicy
		description="Shows the 1st character and the last 4 characters.
				All other characters will be replaced with *s."
		classname="com.ibm.commerce.masking.impl.ShowEndCharactersMaskingPolicyImpl">
		<wc:MaskingPolicyAttributes>
			<wc:Attribute name="showFirst" value="1" />
			<wc:Attribute name="showLast" value="4" />
			<wc:Attribute name="replaceCharacter" value="*" />
		</wc:MaskingPolicyAttributes>
		<wc:MaskedAttributes>
			<wc:MaskedAttribute name="cardNumber" compareType="starts" />
			<wc:MaskedAttribute name="pay_cardNumber"	compareType="starts" />
			....
		</wc:MaskedAttributes>
	</wc:MaskingPolicy>
Hay dos políticas en el ejemplo anterior. La primera política sustituye los valores por 8 caracteres *. La segunda política muestra los primeros y últimos 4 dígitos del valor, mientras que el resto del valor se sustituye por * caracteres.