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.
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.
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.
- 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
ystarts
. El valor predeterminado esequals
. - 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
yfalse
. El valor predeterminado esfalse
, donde se encuentra una coincidencia si las mayúsculas y minúsculas coinciden exactamente con la configuración.
<!--
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.