Consignation et fonction de trace
Toutes les ressources HCL Commerce peuvent utiliser la classe d'utilitaires LoggingHelper fournie dans le package com.ibm.commerce.foundation.common.util.logging pour le traçage et la journalisation. Cet utilitaire permet de résoudre l'enregistreur Java ( java.util.logging.Logger) associé au package de la classe d'appel. Une fois l'enregistreur résolu, la bibliothèque utilisée pour enregistrer les messages est java.util.logging.Logger.
L'exemple de code ci-dessous montre comment utiliser l'objet enregistreur pour le traçage. Pour plus d'informations, voir la rubrique Add logging and tracing to your application.
LoggingHelper.isTraceEnabled(logger) avant d'appeler les méthodes de journalisation.
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());
}
Les méthodes qui ne sont pas générées automatiquement doivent avoir des points d'entrée et de sortie de traçage. Toutes les instructions d'entrée de traçage doivent être appariées avec les instructions de sortie. Les instructions d'entrée de traçage incluent généralement des paramètres d'entrée s'il y en a, tandis que les instructions de sortie incluent les valeurs de retour. Les instructions de suivi d'entrée et de sortie doivent être mises à l'intérieur du bloc if-then pour vérifier si votre traçage de composants est activé. Vous trouverez ci-dessous un exemple de code pour tracer les points d'entrée et de sortie de la méthode :
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;
}
}
Masquer les données sensibles en traces
Il existe de nombreux cas où le masquage des données sensibles est nécessaire. HCL Commerce fournit un utilitaire MaskingFactory pour masquer les données sensibles.
String maskedValue = com.ibm.commerce.foundation.internal.common.util.masking.MaskingFactory.getInstance().mask("password", "abc123");
Lorsqu'il est appelé, il détermine si et comment les attributs sont masqués.Dans l'exemple ci-dessus, MaskingFactory voit password comme paramètre répertorié dans le fichier de configuration. Par conséquent, il renvoie une valeur de *********** au lieu de la valeur abc123.
- MaskingPolicy
- Définit une stratégie de masquage à utiliser par MaskingFactory.
- MaskingPolicy.classname
- Définit le nom de la classe d'implémentation de la stratégie de masquage.
- MaskingPolicyAttributes
- Définit une liste d'attributs utilisés pour initialiser la stratégie de masquage. Cette liste est définie dans les éléments d'attribut ci-joints en tant que paires nom-valeur.
- Attribute.name
- Nom d'un attribut.
- Attribute.value
- Valeur d'un attribut.
- MaskingAttributes
- Définit une liste de paramètres à masquer par cette stratégie de masquage.
- MaskingAttribute.name
- Nom du paramètre dont la valeur correspondante doit être masquée.
- MaskingAttribute.compareType
- Indique si le nom exact du paramètre ou le début du nom du paramètre entraîne une correspondance. Les valeurs admises sont
equalsetstarts. La valeur par défaut estequals. - MaskingAttribute.caseInsensitive
- Indique si la correspondance de nom de paramètre est sensible ou non à la casse. Les valeurs admises sont
trueetfalse. La valeur par défaut estfalselorsqu'une correspondance est trouvée si le cas correspond exactement à la configuration.
<!--
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>
Il y a deux stratégies dans l'exemple ci-dessus. La première stratégie remplace les valeurs par 8 caractères *. La deuxième stratégie affiche les 4 premiers et derniers chiffres de la valeur, tandis que le reste de la valeur est remplacé par les caractères *.