SlideShare une entreprise Scribd logo
Comment
analyser une log
comme un pro
Version Director's cut et non censurée !!!
Speaker
Fabrice CHALLIER
Architecte Salesforce
Special guests :
(En tout cas c’est ce qu’il prétend)
Déclarations Conditionnelles
Déclaration conforme à la directive « Safe Harbor » contenue dans la loi américaine intitulée « Private Securities Litigation Reform Act » de 1995 :
Cette présentation est susceptible de comporter des déclarations conditionnelles, qui impliquent nécessairement une certaine prise de risque, des incertitudes et des
hypothèses. Si l'une de ces incertitudes se concrétise ou si certaines hypothèses se révèlent incorrectes, les résultats de Salesforce, Inc. pourraient être sensiblement
différents de ceux explicitement ou implicitement avancés par nos déclarations conditionnelles. Toutes les déclarations ne portant pas sur des faits historiques peuvent
être considérées comme conditionnelles, y compris les projections de disponibilité des produits ou des services, d'augmentation du nombre d'abonnés, de bénéfices, de
chiffre d'affaires ou autre valeur financière, toute déclaration concernant les stratégies ou les plans de gestion des opérations à venir, toute opinion personnelle, toute
déclaration concernant les services ou les développements technologiques nouveaux, planifiés ou mis à niveau, ainsi que les contrats clients et l'utilisation de nos
services.
Les incertitudes et les risques susmentionnés concernent, sans s'y limiter, les risques associés au développement et à la fourniture de nouvelles fonctionnalités pour
notre service, aux nouveaux produits et services, à notre nouveau modèle commercial, nos pertes d'exploitation antérieures, les éventuelles fluctuations de nos résultats
d'exploitation et de notre taux de croissance, les interruptions ou les retards de notre système d'hébergement, les failles des mesures de sécurité, l'issue des litiges, les
risques associés aux fusions et acquisitions réelles et éventuelles, la jeunesse du marché dans lequel nous évoluons, notre historique relativement limité, notre capacité
à développer, fidéliser et motiver notre personnel et à gérer notre croissance, les nouvelles éditions de notre service, ainsi que le déploiement réussi chez les clients,
notre expérience limitée en matière de revente de produits tiers, et l'utilisation et les ventes à de grands comptes. Vous trouverez plus d'informations sur les facteurs
pouvant influencer les résultats financiers de Salesforce, Inc. dans notre rapport annuel (formulaire 10-K) pour l'exercice fiscal le plus récent et dans notre rapport
trimestriel (formulaire 10-Q) pour le trimestre fiscal le plus récent. Ce rapport et d'autres documents contenant d'importantes informations sont accessibles sur notre site
web dans la partie Informations Investisseurs, section Documents pour la Commission des opérations de bourse (SEC).
Certains services ou fonctions qui ne sont pas encore commercialisés et sont mentionnés ici ou dans d'autres présentations, communiqués de presse ou déclarations
publiques, ne sont pas encore disponibles et ne seront peut-être pas livrés à temps, voire pas livrés du tout. Les clients qui achètent nos services doivent prendre leur
décision sur la base des fonctions actuellement disponibles. Salesforce, Inc. n'est pas tenu et n'a pas l'intention de mettre à jour ces déclarations conditionnelles.
Sommaire
Hmmm, j’ai choisi un beau sujet mais que vais-je pouvoir dire …
Ahh mais je sais, si je demandais à mon amis Chatgpt ce qu’il sait là-dessus.
Tadaa …
Réponse de chatGpt : quand qq aura traité le sujet, je pourrais te répéter ce
qu’il a dit ….
Questions pour un champion
Question 1/2
Si je mets ERROR pour la category Apex Code , quelles informations sont
visibles ?
Un requestId est il unique dans un apexLog ? Citez un use case ?
Quelle est la taille limite que Salesforce peut stocker pour les logs
avant d'arrêter de logger?
Quelle différence y’a t-il entre FINE et FINEST pour la category Apex Code ?
Question 2/2
A quoi sert Debug dans la category System ?
La doc Salesforce dit : Système (Comprend des informations relatives aux appels à toutes les méthodes du
système, telles que la méthode System.debug)
56.0 SYSTEM,FINE;
Execute Anonymous: System.debug('test');
12:29:53.13|EXECUTION_STARTED
12:29:53.13|CODE_UNIT_STARTED|execute_anonymous_apex
12:29:53.13|CODE_UNIT_FINISHED|execute_anonymous_apex
12:29:53.13|EXECUTION_FINISHED
56.0 APEX_CODE,FINE;
Execute Anonymous: System.debug('test');
12:34:13.17|EXECUTION_STARTED
12:34:13.17|CODE_UNIT_STARTED||execute_anonymous_apex
12:34:13.17|USER_DEBUG|[1]|DEBUG|test
12:34:13.17|CODE_UNIT_FINISHED|execute_anonymous_apex
12:34:13.17|EXECUTION_FINISHED
Comment générer des logs intelligemment
Les trace flag (journaux de débogage)
● Trier par défaut sur le nom !!!
● Peut-être “recréer” si l’utilisateur n’est pas actuellement tracé
● Unique pour un “Nom” donné (sauf pour la dev console)
● Ils peuvent être créés via la Tooling Api
● Si la dev console est ouverte, elle surcharge le niveau
de log (soyez vigilant)
Accessible via : Menu > Debug logs
Anatomie d’un Trace flag
Qui : Traced Entity Type + Traced Entity Name
Combien de temps :Start Date +Expiration Date
Quoi : Debug Level
Les Traced Entity type ( ce qui peut-etre audité)
User ( presque tous les utilisateurs de l’org)
Platform Integration
Automated Process (PlatformEvent , update Automatique ,etc …)
Apex Class (Ne crée pas de log. Modifie le log level pour la classe indiquée )
Apex Trigger (Ne crée pas de log. Modifie le log level pour le trigger indiquée )
Attention : le champs Traced Entity Name depends
dépend de l’entité sélectionnée
Les Debug Levels
Database :
Information relative à la base de donnée (DML, SOQL,SOSL)
Workflow :
Informations relatives aux Process Builder et au Flow ( Nom, règles ou actions exécutées)
Validation :
Information sur les validation rules
Apex Code :
Les operations apex donc les requetes SOQL executées et les systemes debug
Apex Profiling
Informations structurées sur les limites y compris le nb de mail envoyés
Visualforce
Informations sur les visualforce page
System
Comprend des informations relatives aux appels à toutes les méthodes du système, telles que la méthode System.debug ???
L’élément Code_Unit
CODE_UNIT_STARTED|[EXTERNAL]|Flow:01I0900000243tx
CODE_UNIT_STARTED|[EXTERNAL]|01q09000000ZbhH|ApexLog2Trigger on ApexLog2 trigger
event BeforeInsert|__sfdc_trigger/ApexLog2Trigger
CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex
CODE_UNIT_STARTED|[EXTERNAL]|01pAa000006N5oL|BatchTest
CODE_UNIT_STARTED|[EXTERNAL]|Validation:Deal:a001x00000EQrm7
CODE_UNIT_STARTED|[EXTERNAL]|DuplicateDetector
CODE_UNIT_FINISHED|Workflow:01I24000001S9yj
Les évenements auditable 1/2
Apex :
Error : Execution/Code Unit + Fatal Error
Warn : USER_DEBUG_WARN ????
Info : Toutes les Exception vu par le code apex (y compris celle intercepté proprement)
Debug : USER_DEBUG
Fine : Method/Constructor
Finer : Heap Allocation
Finest : Variable scoping
Workflow :
Error : All element Error + Code Unit (pas dans la doc !!!!)
Warning : All Element Fault
Info : Flow name
Fine : Flow Trigger reason (decision, assignment etc …)
Finer : Flow Element detail (gestion des variables entre autres)
Les évenements auditable 2/2
Database : (
Info: Presque tout ( SOQL/SOSL/DML) + Code Unit (pas dans la doc !!!!)
Fine: Indique si vous utilisez le mode permission set
Fine : Exécute un query plan analysis pour chaque requête
Apex Profiling :
Info : cumul des limites + Code Unit (pas dans la doc !!!!)
Fine : Cumul profiling (aggregation des requetes / methodes apex)
Finest : Namespace limites
System : (utile selon la doc pour les batch et les schedule class)
info : SYSTEM_MODE_ENTER/SYSTEM_MODE_EXIT
Fine : trace les méthodes systèmes et
la spécialisation des logs Apex/Trigger si activés
Voir et comprendre les logs
L’objet ApexLog
SELECT Id,Operation ,LogUser.Name,Status,DurationMilliseconds ,LogLength ,StartTime
,LastModifiedDate,RequestIdentifier FROM ApexLog
Les logs ont-elles des limites !!!
- Une log ne peut contenir que 20MB de données. Au dela, Salesforce va automatiquement
tronquer la log et commencer par enlever les USER_DEBUG !!!!!
- Les logs sont conservés 7 jours dans l’org. Les logs générés par la developer console ne sont
conservées que 24h
- Au dela de 1G de log , il n’est plus possible de créer/modifier de nouveaux traceFlag
- Si un traceFlag génère plus que 1G de log en moins de 15 mn, il est automatiquement désactivé
L’impact des log levels sur la taille des logs 1/2
L’impact des log levels sur la taille des logs 2/2
Level Size lignes
best max best max diff best max diff
Database INFO FINE 2k 2k 0 29 30 1
Workflow INFO FINER 3k 24k 21k 39 149 110
Apex FINE FINEST 12k 24k 12k 159 268 109
Apex
Profiling
FINE FINEST 4k 10k 6k 97 260 163
System NONE FINE 0 2k 2k 0 30 30
Total 25k 56k 31k 304 624 320
Anatomie d’une log
Les infos génériques
Ligne 1
59.0
APEX_CODE,FINEST;APEX_PROFILING,FINEST;CALLOUT,INFO;DB,FINEST;NBA,NONE;SYS
TEM,DEBUG;VALIDATION,INFO;VISUALFORCE,FINER;WAVE,NONE;WORKFLOW,FINER
ligne 2 ou 3
09:46:16.1
(1391284)|USER_INFO|[EXTERNAL]|0050800000GYRKz|fabrice@littlechaman.com.demo|(GMT+
01:00) Central European Standard Time (Europe/Paris)|GMT+01:00
Anatomie d’une log ( point de vue Apex)
|CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex
|CODE_UNIT_STARTED|[EXTERNAL]|01q09000000ZbhH|ApexLog2Trigger on ApexLog2 trigger event
BeforeInsert|__sfdc_trigger/ApexLog2Trigger
|METHOD_ENTRY|[1]|01p0900000TMsiv|ApexLog2Handler.ApexLog2Handler()
|METHOD_EXIT|[1]|ApexLog2Handler
|METHOD_ENTRY|[4]|01p0900000TMsiv|ApexLog2Handler.insertApexLog3()
|USER_DEBUG|[4]|DEBUG|a020900000kIlNSAA0
|METHOD_ENTRY|[12]|01p0900000TMsiv|ApexLog2Handler.jenefaisrien()
|USER_DEBUG|[21]|DEBUG|Coucou, je suis passé par la ligne 19 , tout va bien
|METHOD_EXIT|[12]|01p0900000TMsiv|ApexLog2Handler.jenefaisrien()
|METHOD_EXIT|[4]|01p0900000TMsiv|ApexLog2Handler.insertApexLog3()
|CODE_UNIT_FINISHED|ApexLog2Trigger on ApexLog2 trigger event BeforeInsert|__sfdc_trigger/ApexLog2Trigger
Anatomie d’une log (flow )
60.0 WORKFLOW,INFO
FLOW_CREATE_INTERVIEW_BEGIN|00DG50000013N7Z||301G500000I9kqs
FLOW_CREATE_INTERVIEW_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|New Account Creation
EXECUTION_STARTED
CODE_UNIT_STARTED|[EXTERNAL]|Flow: New Account Creation
CODE_UNIT_FINISHED|Flow: New Account Creation
EXECUTION_FINISHED
FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowAssignment|doSomething1
FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowAssignment|doSomething1
FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowRecordCreate|doSomething2
FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowRecordCreate|doSomething2
CODE_UNIT_STARTED|[EXTERNAL]|01q09000000ZbhH|ApexLog2Trigger on ApexLog2 trigger event BeforeInsert|__sfdc_trigger/ApexLog2Trigger
CODE_UNIT_FINISHED|ApexLog2Trigger on ApexLog2 trigger event BeforeInsert|__sfdc_trigger/ApexLog2Trigger
FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowSubflow|Subflow1 (Conserve l’id du flow parent)
FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowSubflow|Subflow1
FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowDecision|doSomethingInsubFlow1
FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowDecision|doSomethingInsubFlow1
FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowDecision|doSomething3
FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowDecision|doSomething3
Anatomie d’une log (screen flow part 2)
60.0 WORKFLOW,INFO
FLOW_VALUE_ASSIGNMENT|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|assigneMe ....
FLOW_VALUE_ASSIGNMENT|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|assigneMe|true
FLOW_ELEMENT_BEGIN|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowAssignment|doSomething1
FLOW_ELEMENT_END|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowAssignment|doSomething1
FLOW_ELEMENT_BEGIN|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowDecision|doSomething2
FLOW_ELEMENT_END|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowDecision|doSomething2
FLOW_ELEMENT_BEGIN|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowSubflow|Subflow1
FLOW_ELEMENT_END|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowSubflow|Subflow2
FLOW_ELEMENT_BEGIN|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowDecision|doSomething3
FLOW_ELEMENT_END|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowDecision|doSomething3
La log commence là !!!!
Comment trouver le nom flow en question ??
SELECT FlowLabel ,FlowDeveloperName FROM FlowInterviewLog
WHERE FlowInterviewGuid =’1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530’
Les logs c’est bien mais j’en fait quoi ?
Que peut-on analyser dans une log ?
● Analyser le comportement et fixer des erreurs dans le code ou un flow
etc …
● Analyser pourquoi on atteint les governor limit ou vérifier si on en est
proche
● Monitorer et optimiser les performances
● Auditer et monitorer l’activité et les interactions des utilisateurs
Lire les informations fournies via des system.debug
System.debug (en prod oui ou non ??)
1 : No debug
2 : system.debug(‘message’);
3 : system.debug(‘message long’);
4 : system.debug(aContactObjet);
5 : afficher x system.debug
6 : loop system.debug([select … from Contact)
Execution du code 5000 fois
scenario 1 : traceFlag activé
scenario 2 : Pas de traceFlag
Conclusion :
on évitera surtout les system.debug sur les objets / tableau en PROD
https://bobbuzzard.blogspot.com/2021/05/the-impact-of-systemdebug.html
Comment afficher plus d’info via un system.debug
System.debug([SELECT FIELDS(STANDARD) FROM Account limit 200 ]);
|USER_DEBUG|[1]|DEBUG|(Account:{AccountSource=Platform isPortfolio__c=false}, ...)
Mais que faire si on souhaite afficher toutes les lignes ou un objet contenant trop
d’information ?
System.debug(JSON.serializePretty([SELECT FIELDS(STANDARD) FROM Account limit 200]));
Warning : Le résultat sera affiché sur plusieurs lignes
Comment filtrer les system.debug à afficher
1 :system.debug(logginglevel.ERROR,'test ERROR');
2 : system.debug('test Normal');
Les system.debug ne s’affichent dès que le Level est atteint dans le traceflag.
Le message 1 s'affiche si le level est sur “Error” alors que le le message 2 ne
sera pas affiché.
Monitorer les performances de nos customisations
Step 1 : auditer tous les utilisateurs cibles
● Créer un DebugLevel au niveau avec Apex ou Workflow au niveau
ERROR
On cherche à limiter la tailles des logs générés pour rester sous les limites
● Créer un TraceFlag pour tous les utilisateurs ciblés avec ce debugLevel
On essaiera de faire cela via un script utilisant la tooling api
● Attendre que les utilisateurs utilisent Salesforce durant qq heures
On peut arrêter dès qu’on commence à repérer des traitement trop longs
Step 2 : chercher les temps de traitement longs
SELECT Id,Operation ,DurationMilliseconds ,StartTime ,LastModifiedDate,LogUser.Name FROM ApexLog order by DurationMilliseconds
12h 2 sec
Step 3 : Analyser les problèmes
Chercher les code unit dans les logs pour identifier la source des problèmes
Créer des trace flags avec un niveau de detail plus fin :
Apex : Fine (ou plus)
Workflow : Fine (ou plus)
Database : Fine (ou plus)
Apex Profiling : Finer
Passer en revue les logs avec les outils (vscode / developer console etc …)
Retrouver “facilement une log”
RequestIdentifier
RequestIdentifier , un champs de l’objet ApexLog
Represente l’Id de la transaction apex
Pas toujours unique(Batch, Async operation)
peut-être obtenu en apex via :
Request.getCurrent().getRequestId();
Cas d’usage :
Framework de log
Audit des appels externes à Salesforce
Retracer plus facilement les problèmes des utilisateurs via les logs
Le too Many SOQL 101 (l’erreur préférée des dev)
Comment gérer un too many soql 101(les pièges)
Suite à l'exécution d’un code apex : une erreur Too many SOQL queries: 101 apparait
vscode :
dev console :
Vers la fin de la log :
LIMIT_USAGE_FOR_NS|(default)| : Number of SOQL queries: 101 out of 100 ******* CLOSE TO LIMIT
LIMIT_USAGE_FOR_NS|slackv2| Number of SOQL queries: 29 out of 100
LA RAISON :
- Les manage package
- les requetes dans les flow (non visibles dans les logs)
Le match
(enfin !!!)
Excel !!!!
Dev Console !!!
VsCode plugin
Calumet
Conclusion
config Plutot bon Plutot mauvais
vscode Tout Save order
Performance
HeapSize
SOQL 101
DevConsole Apex Fine/Finer
Profiling : Finest
Save order
Apex
HeapSize
Perf
Grosse log
Excel Workflow :Fine Flow Le reste
Calumet Tout Save order
SOQL 101
Debug
Tout ce qui ne marche
pas !encore dedans !! :)
I’ll be back : une nouvelle session arrive
● Marre de toujours nous voir parler
● Envie d’aborder un sujet qui vous tient à coeur
● Envie d'être le speaker d’un soir
N’hésitez pas à en parler à nos dev group leader
sinon y aura une suite (faites par ChatGpt cette fois) !!!!
Liens
Doc Salesforce pour les logs :
https://help.salesforce.com/s/articleView?id=sf.code_setting_debug_log_levels.htm&type=5
Apex replay debugger :
https://texei.com/conseils/jour-24-apex-replay-debugger/
Calumet (si vous êtes pas refroidi) :
https://littlechaman.com/
Merci!

Contenu connexe

Similaire à Comment Challenger les ApexDebugLog et comment améliorer leur analyse

Be87 g formation-administration-efficace-de-racf
Be87 g formation-administration-efficace-de-racfBe87 g formation-administration-efficace-de-racf
Be87 g formation-administration-efficace-de-racf
CERTyou Formation
 
[Important] Cycle de vie des logiciels.ppt
[Important] Cycle de vie des logiciels.ppt[Important] Cycle de vie des logiciels.ppt
[Important] Cycle de vie des logiciels.ppt
testuser715939
 
Esb0 g formation-system-z-complex-system-and-availability-recovery-concepts
Esb0 g formation-system-z-complex-system-and-availability-recovery-conceptsEsb0 g formation-system-z-complex-system-and-availability-recovery-concepts
Esb0 g formation-system-z-complex-system-and-availability-recovery-concepts
CERTyou Formation
 

Similaire à Comment Challenger les ApexDebugLog et comment améliorer leur analyse (20)

*French* Salesforce1: Data Model and Relationships
*French* Salesforce1: Data Model and Relationships*French* Salesforce1: Data Model and Relationships
*French* Salesforce1: Data Model and Relationships
 
Documentation - SQL Shot (MS SQL Server)
Documentation - SQL Shot (MS SQL Server)Documentation - SQL Shot (MS SQL Server)
Documentation - SQL Shot (MS SQL Server)
 
Be87 g formation-administration-efficace-de-racf
Be87 g formation-administration-efficace-de-racfBe87 g formation-administration-efficace-de-racf
Be87 g formation-administration-efficace-de-racf
 
Mesure & Analyse: Mesurer les Exigences
Mesure & Analyse: Mesurer les ExigencesMesure & Analyse: Mesurer les Exigences
Mesure & Analyse: Mesurer les Exigences
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
2009-03-13 SQL Server une plateforme crédible
2009-03-13 SQL Server une plateforme crédible2009-03-13 SQL Server une plateforme crédible
2009-03-13 SQL Server une plateforme crédible
 
Biz talk summit devops - monitoring
Biz talk summit   devops - monitoringBiz talk summit   devops - monitoring
Biz talk summit devops - monitoring
 
Green System University - Development JDEdwards (French Version) - Tome2
Green System University - Development JDEdwards (French Version) - Tome2Green System University - Development JDEdwards (French Version) - Tome2
Green System University - Development JDEdwards (French Version) - Tome2
 
Prerequisites In ERP Projects Paris Mines 2002
Prerequisites In ERP Projects Paris Mines 2002Prerequisites In ERP Projects Paris Mines 2002
Prerequisites In ERP Projects Paris Mines 2002
 
2009-02-11 COL318 - Quoi de neuf dans l'administration SharePoint
2009-02-11 COL318 - Quoi de neuf dans l'administration SharePoint 2009-02-11 COL318 - Quoi de neuf dans l'administration SharePoint
2009-02-11 COL318 - Quoi de neuf dans l'administration SharePoint
 
Cycle de vie des logiciels.ppt
Cycle de vie des logiciels.pptCycle de vie des logiciels.ppt
Cycle de vie des logiciels.ppt
 
[Important] Cycle de vie des logiciels.ppt
[Important] Cycle de vie des logiciels.ppt[Important] Cycle de vie des logiciels.ppt
[Important] Cycle de vie des logiciels.ppt
 
FlexNet Manager Suite On-Demand
FlexNet Manager Suite On-DemandFlexNet Manager Suite On-Demand
FlexNet Manager Suite On-Demand
 
Salesforce1 Platform : créez vos applications en un clin d’œil
Salesforce1 Platform : créez vos applications en un clin d’œilSalesforce1 Platform : créez vos applications en un clin d’œil
Salesforce1 Platform : créez vos applications en un clin d’œil
 
Cas d'étude - Zabbix Toulouse #1 - ZUG
Cas d'étude - Zabbix Toulouse #1 - ZUGCas d'étude - Zabbix Toulouse #1 - ZUG
Cas d'étude - Zabbix Toulouse #1 - ZUG
 
2009-02-12 DAT211 Prendre ou reprendre le contrôle de vos instances SQL Serve...
2009-02-12 DAT211 Prendre ou reprendre le contrôle de vos instances SQL Serve...2009-02-12 DAT211 Prendre ou reprendre le contrôle de vos instances SQL Serve...
2009-02-12 DAT211 Prendre ou reprendre le contrôle de vos instances SQL Serve...
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Esb0 g formation-system-z-complex-system-and-availability-recovery-concepts
Esb0 g formation-system-z-complex-system-and-availability-recovery-conceptsEsb0 g formation-system-z-complex-system-and-availability-recovery-concepts
Esb0 g formation-system-z-complex-system-and-availability-recovery-concepts
 
Comment l'automatisation dans Salesforce peut vous faciliter la vie
Comment l'automatisation dans Salesforce peut vous faciliter la vieComment l'automatisation dans Salesforce peut vous faciliter la vie
Comment l'automatisation dans Salesforce peut vous faciliter la vie
 
Webinar erp : 7 points clés pour un cahier des charges réussi
Webinar erp : 7 points clés pour un cahier des charges réussiWebinar erp : 7 points clés pour un cahier des charges réussi
Webinar erp : 7 points clés pour un cahier des charges réussi
 

Plus de Thierry TROUIN ☁

Summer-22-FG-Mai-2022
Summer-22-FG-Mai-2022Summer-22-FG-Mai-2022
Summer-22-FG-Mai-2022
Thierry TROUIN ☁
 
Data Quality : Presentation de ISV Ellisphere
Data Quality : Presentation de ISV EllisphereData Quality : Presentation de ISV Ellisphere
Data Quality : Presentation de ISV Ellisphere
Thierry TROUIN ☁
 
Release Winter 22 FR
Release Winter 22 FRRelease Winter 22 FR
Release Winter 22 FR
Thierry TROUIN ☁
 

Plus de Thierry TROUIN ☁ (20)

AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with Flows
 
Comment exploiter facilement une API avec les Flows
Comment exploiter facilement une API avec les FlowsComment exploiter facilement une API avec les Flows
Comment exploiter facilement une API avec les Flows
 
TunisUserGroup - Ecosysteme salesforce.pptx
TunisUserGroup -  Ecosysteme salesforce.pptxTunisUserGroup -  Ecosysteme salesforce.pptx
TunisUserGroup - Ecosysteme salesforce.pptx
 
Controle de configuration ou fuite de donnees, comment mieux securiser SFDC
Controle de configuration ou fuite de donnees, comment mieux securiser SFDCControle de configuration ou fuite de donnees, comment mieux securiser SFDC
Controle de configuration ou fuite de donnees, comment mieux securiser SFDC
 
Monia, l’IAssistante qui aide vos equipes a closer leurs Opportunites
Monia, l’IAssistante qui aide vos equipes a closer leurs OpportunitesMonia, l’IAssistante qui aide vos equipes a closer leurs Opportunites
Monia, l’IAssistante qui aide vos equipes a closer leurs Opportunites
 
Sales enablement, e-signature, closing & automations dans Salesforce
Sales enablement, e-signature, closing & automations dans SalesforceSales enablement, e-signature, closing & automations dans Salesforce
Sales enablement, e-signature, closing & automations dans Salesforce
 
Les formulaires web dans salesforce
Les formulaires web dans salesforceLes formulaires web dans salesforce
Les formulaires web dans salesforce
 
Découvrez les enquêtes de satisfaction dans Salesforce
Découvrez les enquêtes de satisfaction dans SalesforceDécouvrez les enquêtes de satisfaction dans Salesforce
Découvrez les enquêtes de satisfaction dans Salesforce
 
Winter-23-French-Gathering+Dreamforce
Winter-23-French-Gathering+DreamforceWinter-23-French-Gathering+Dreamforce
Winter-23-French-Gathering+Dreamforce
 
Meetup Cameroun - Presentation SFDC
Meetup Cameroun - Presentation SFDCMeetup Cameroun - Presentation SFDC
Meetup Cameroun - Presentation SFDC
 
Construire sa strategie de gestion des donnees Salesforce avec Odaseva
Construire sa strategie de gestion des donnees Salesforce avec OdasevaConstruire sa strategie de gestion des donnees Salesforce avec Odaseva
Construire sa strategie de gestion des donnees Salesforce avec Odaseva
 
Summer-22-FG-Mai-2022
Summer-22-FG-Mai-2022Summer-22-FG-Mai-2022
Summer-22-FG-Mai-2022
 
Data Quality : Presentation de ISV Ellisphere
Data Quality : Presentation de ISV EllisphereData Quality : Presentation de ISV Ellisphere
Data Quality : Presentation de ISV Ellisphere
 
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-source
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-sourceSimplifiez vos journées avec sfdx-hardis et l’écosystème open-source
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-source
 
Ameliorez vos parcours omnicanaux avec Marketing Cloud
Ameliorez vos parcours omnicanaux avec Marketing CloudAmeliorez vos parcours omnicanaux avec Marketing Cloud
Ameliorez vos parcours omnicanaux avec Marketing Cloud
 
Bien Démarrer avec Pardot: Comment délivrer un engagement client connecté
Bien Démarrer avec Pardot: Comment délivrer un engagement client connectéBien Démarrer avec Pardot: Comment délivrer un engagement client connecté
Bien Démarrer avec Pardot: Comment délivrer un engagement client connecté
 
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et Pardot
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et PardotAmeliorez votre Marketing : Introduction aux solutions Marketing Cloud et Pardot
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et Pardot
 
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheck
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheckDebarrassez-vous de la dette technique dans votre organisation avec OrgCheck
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheck
 
Release Winter 22 FR
Release Winter 22 FRRelease Winter 22 FR
Release Winter 22 FR
 
How to build a Salesforce DevOps process with Gearset
How to build a Salesforce DevOps process with GearsetHow to build a Salesforce DevOps process with Gearset
How to build a Salesforce DevOps process with Gearset
 

Comment Challenger les ApexDebugLog et comment améliorer leur analyse

  • 1. Comment analyser une log comme un pro Version Director's cut et non censurée !!!
  • 2. Speaker Fabrice CHALLIER Architecte Salesforce Special guests : (En tout cas c’est ce qu’il prétend)
  • 3. Déclarations Conditionnelles Déclaration conforme à la directive « Safe Harbor » contenue dans la loi américaine intitulée « Private Securities Litigation Reform Act » de 1995 : Cette présentation est susceptible de comporter des déclarations conditionnelles, qui impliquent nécessairement une certaine prise de risque, des incertitudes et des hypothèses. Si l'une de ces incertitudes se concrétise ou si certaines hypothèses se révèlent incorrectes, les résultats de Salesforce, Inc. pourraient être sensiblement différents de ceux explicitement ou implicitement avancés par nos déclarations conditionnelles. Toutes les déclarations ne portant pas sur des faits historiques peuvent être considérées comme conditionnelles, y compris les projections de disponibilité des produits ou des services, d'augmentation du nombre d'abonnés, de bénéfices, de chiffre d'affaires ou autre valeur financière, toute déclaration concernant les stratégies ou les plans de gestion des opérations à venir, toute opinion personnelle, toute déclaration concernant les services ou les développements technologiques nouveaux, planifiés ou mis à niveau, ainsi que les contrats clients et l'utilisation de nos services. Les incertitudes et les risques susmentionnés concernent, sans s'y limiter, les risques associés au développement et à la fourniture de nouvelles fonctionnalités pour notre service, aux nouveaux produits et services, à notre nouveau modèle commercial, nos pertes d'exploitation antérieures, les éventuelles fluctuations de nos résultats d'exploitation et de notre taux de croissance, les interruptions ou les retards de notre système d'hébergement, les failles des mesures de sécurité, l'issue des litiges, les risques associés aux fusions et acquisitions réelles et éventuelles, la jeunesse du marché dans lequel nous évoluons, notre historique relativement limité, notre capacité à développer, fidéliser et motiver notre personnel et à gérer notre croissance, les nouvelles éditions de notre service, ainsi que le déploiement réussi chez les clients, notre expérience limitée en matière de revente de produits tiers, et l'utilisation et les ventes à de grands comptes. Vous trouverez plus d'informations sur les facteurs pouvant influencer les résultats financiers de Salesforce, Inc. dans notre rapport annuel (formulaire 10-K) pour l'exercice fiscal le plus récent et dans notre rapport trimestriel (formulaire 10-Q) pour le trimestre fiscal le plus récent. Ce rapport et d'autres documents contenant d'importantes informations sont accessibles sur notre site web dans la partie Informations Investisseurs, section Documents pour la Commission des opérations de bourse (SEC). Certains services ou fonctions qui ne sont pas encore commercialisés et sont mentionnés ici ou dans d'autres présentations, communiqués de presse ou déclarations publiques, ne sont pas encore disponibles et ne seront peut-être pas livrés à temps, voire pas livrés du tout. Les clients qui achètent nos services doivent prendre leur décision sur la base des fonctions actuellement disponibles. Salesforce, Inc. n'est pas tenu et n'a pas l'intention de mettre à jour ces déclarations conditionnelles.
  • 4. Sommaire Hmmm, j’ai choisi un beau sujet mais que vais-je pouvoir dire … Ahh mais je sais, si je demandais à mon amis Chatgpt ce qu’il sait là-dessus. Tadaa … Réponse de chatGpt : quand qq aura traité le sujet, je pourrais te répéter ce qu’il a dit ….
  • 5. Questions pour un champion
  • 6. Question 1/2 Si je mets ERROR pour la category Apex Code , quelles informations sont visibles ? Un requestId est il unique dans un apexLog ? Citez un use case ? Quelle est la taille limite que Salesforce peut stocker pour les logs avant d'arrêter de logger? Quelle différence y’a t-il entre FINE et FINEST pour la category Apex Code ?
  • 7. Question 2/2 A quoi sert Debug dans la category System ? La doc Salesforce dit : Système (Comprend des informations relatives aux appels à toutes les méthodes du système, telles que la méthode System.debug) 56.0 SYSTEM,FINE; Execute Anonymous: System.debug('test'); 12:29:53.13|EXECUTION_STARTED 12:29:53.13|CODE_UNIT_STARTED|execute_anonymous_apex 12:29:53.13|CODE_UNIT_FINISHED|execute_anonymous_apex 12:29:53.13|EXECUTION_FINISHED 56.0 APEX_CODE,FINE; Execute Anonymous: System.debug('test'); 12:34:13.17|EXECUTION_STARTED 12:34:13.17|CODE_UNIT_STARTED||execute_anonymous_apex 12:34:13.17|USER_DEBUG|[1]|DEBUG|test 12:34:13.17|CODE_UNIT_FINISHED|execute_anonymous_apex 12:34:13.17|EXECUTION_FINISHED
  • 8. Comment générer des logs intelligemment
  • 9. Les trace flag (journaux de débogage) ● Trier par défaut sur le nom !!! ● Peut-être “recréer” si l’utilisateur n’est pas actuellement tracé ● Unique pour un “Nom” donné (sauf pour la dev console) ● Ils peuvent être créés via la Tooling Api ● Si la dev console est ouverte, elle surcharge le niveau de log (soyez vigilant) Accessible via : Menu > Debug logs
  • 10. Anatomie d’un Trace flag Qui : Traced Entity Type + Traced Entity Name Combien de temps :Start Date +Expiration Date Quoi : Debug Level
  • 11. Les Traced Entity type ( ce qui peut-etre audité) User ( presque tous les utilisateurs de l’org) Platform Integration Automated Process (PlatformEvent , update Automatique ,etc …) Apex Class (Ne crée pas de log. Modifie le log level pour la classe indiquée ) Apex Trigger (Ne crée pas de log. Modifie le log level pour le trigger indiquée ) Attention : le champs Traced Entity Name depends dépend de l’entité sélectionnée
  • 12. Les Debug Levels Database : Information relative à la base de donnée (DML, SOQL,SOSL) Workflow : Informations relatives aux Process Builder et au Flow ( Nom, règles ou actions exécutées) Validation : Information sur les validation rules Apex Code : Les operations apex donc les requetes SOQL executées et les systemes debug Apex Profiling Informations structurées sur les limites y compris le nb de mail envoyés Visualforce Informations sur les visualforce page System Comprend des informations relatives aux appels à toutes les méthodes du système, telles que la méthode System.debug ???
  • 13. L’élément Code_Unit CODE_UNIT_STARTED|[EXTERNAL]|Flow:01I0900000243tx CODE_UNIT_STARTED|[EXTERNAL]|01q09000000ZbhH|ApexLog2Trigger on ApexLog2 trigger event BeforeInsert|__sfdc_trigger/ApexLog2Trigger CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex CODE_UNIT_STARTED|[EXTERNAL]|01pAa000006N5oL|BatchTest CODE_UNIT_STARTED|[EXTERNAL]|Validation:Deal:a001x00000EQrm7 CODE_UNIT_STARTED|[EXTERNAL]|DuplicateDetector CODE_UNIT_FINISHED|Workflow:01I24000001S9yj
  • 14. Les évenements auditable 1/2 Apex : Error : Execution/Code Unit + Fatal Error Warn : USER_DEBUG_WARN ???? Info : Toutes les Exception vu par le code apex (y compris celle intercepté proprement) Debug : USER_DEBUG Fine : Method/Constructor Finer : Heap Allocation Finest : Variable scoping Workflow : Error : All element Error + Code Unit (pas dans la doc !!!!) Warning : All Element Fault Info : Flow name Fine : Flow Trigger reason (decision, assignment etc …) Finer : Flow Element detail (gestion des variables entre autres)
  • 15. Les évenements auditable 2/2 Database : ( Info: Presque tout ( SOQL/SOSL/DML) + Code Unit (pas dans la doc !!!!) Fine: Indique si vous utilisez le mode permission set Fine : Exécute un query plan analysis pour chaque requête Apex Profiling : Info : cumul des limites + Code Unit (pas dans la doc !!!!) Fine : Cumul profiling (aggregation des requetes / methodes apex) Finest : Namespace limites System : (utile selon la doc pour les batch et les schedule class) info : SYSTEM_MODE_ENTER/SYSTEM_MODE_EXIT Fine : trace les méthodes systèmes et la spécialisation des logs Apex/Trigger si activés
  • 16. Voir et comprendre les logs
  • 17. L’objet ApexLog SELECT Id,Operation ,LogUser.Name,Status,DurationMilliseconds ,LogLength ,StartTime ,LastModifiedDate,RequestIdentifier FROM ApexLog
  • 18. Les logs ont-elles des limites !!! - Une log ne peut contenir que 20MB de données. Au dela, Salesforce va automatiquement tronquer la log et commencer par enlever les USER_DEBUG !!!!! - Les logs sont conservés 7 jours dans l’org. Les logs générés par la developer console ne sont conservées que 24h - Au dela de 1G de log , il n’est plus possible de créer/modifier de nouveaux traceFlag - Si un traceFlag génère plus que 1G de log en moins de 15 mn, il est automatiquement désactivé
  • 19. L’impact des log levels sur la taille des logs 1/2
  • 20. L’impact des log levels sur la taille des logs 2/2 Level Size lignes best max best max diff best max diff Database INFO FINE 2k 2k 0 29 30 1 Workflow INFO FINER 3k 24k 21k 39 149 110 Apex FINE FINEST 12k 24k 12k 159 268 109 Apex Profiling FINE FINEST 4k 10k 6k 97 260 163 System NONE FINE 0 2k 2k 0 30 30 Total 25k 56k 31k 304 624 320
  • 22. Les infos génériques Ligne 1 59.0 APEX_CODE,FINEST;APEX_PROFILING,FINEST;CALLOUT,INFO;DB,FINEST;NBA,NONE;SYS TEM,DEBUG;VALIDATION,INFO;VISUALFORCE,FINER;WAVE,NONE;WORKFLOW,FINER ligne 2 ou 3 09:46:16.1 (1391284)|USER_INFO|[EXTERNAL]|0050800000GYRKz|fabrice@littlechaman.com.demo|(GMT+ 01:00) Central European Standard Time (Europe/Paris)|GMT+01:00
  • 23. Anatomie d’une log ( point de vue Apex) |CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex |CODE_UNIT_STARTED|[EXTERNAL]|01q09000000ZbhH|ApexLog2Trigger on ApexLog2 trigger event BeforeInsert|__sfdc_trigger/ApexLog2Trigger |METHOD_ENTRY|[1]|01p0900000TMsiv|ApexLog2Handler.ApexLog2Handler() |METHOD_EXIT|[1]|ApexLog2Handler |METHOD_ENTRY|[4]|01p0900000TMsiv|ApexLog2Handler.insertApexLog3() |USER_DEBUG|[4]|DEBUG|a020900000kIlNSAA0 |METHOD_ENTRY|[12]|01p0900000TMsiv|ApexLog2Handler.jenefaisrien() |USER_DEBUG|[21]|DEBUG|Coucou, je suis passé par la ligne 19 , tout va bien |METHOD_EXIT|[12]|01p0900000TMsiv|ApexLog2Handler.jenefaisrien() |METHOD_EXIT|[4]|01p0900000TMsiv|ApexLog2Handler.insertApexLog3() |CODE_UNIT_FINISHED|ApexLog2Trigger on ApexLog2 trigger event BeforeInsert|__sfdc_trigger/ApexLog2Trigger
  • 24. Anatomie d’une log (flow ) 60.0 WORKFLOW,INFO FLOW_CREATE_INTERVIEW_BEGIN|00DG50000013N7Z||301G500000I9kqs FLOW_CREATE_INTERVIEW_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|New Account Creation EXECUTION_STARTED CODE_UNIT_STARTED|[EXTERNAL]|Flow: New Account Creation CODE_UNIT_FINISHED|Flow: New Account Creation EXECUTION_FINISHED FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowAssignment|doSomething1 FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowAssignment|doSomething1 FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowRecordCreate|doSomething2 FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowRecordCreate|doSomething2 CODE_UNIT_STARTED|[EXTERNAL]|01q09000000ZbhH|ApexLog2Trigger on ApexLog2 trigger event BeforeInsert|__sfdc_trigger/ApexLog2Trigger CODE_UNIT_FINISHED|ApexLog2Trigger on ApexLog2 trigger event BeforeInsert|__sfdc_trigger/ApexLog2Trigger FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowSubflow|Subflow1 (Conserve l’id du flow parent) FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowSubflow|Subflow1 FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowDecision|doSomethingInsubFlow1 FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowDecision|doSomethingInsubFlow1 FLOW_ELEMENT_BEGIN|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowDecision|doSomething3 FLOW_ELEMENT_END|651459a69f58b32a5b6f1e3bc9a418dbbac42df-7918|FlowDecision|doSomething3
  • 25. Anatomie d’une log (screen flow part 2) 60.0 WORKFLOW,INFO FLOW_VALUE_ASSIGNMENT|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|assigneMe .... FLOW_VALUE_ASSIGNMENT|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|assigneMe|true FLOW_ELEMENT_BEGIN|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowAssignment|doSomething1 FLOW_ELEMENT_END|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowAssignment|doSomething1 FLOW_ELEMENT_BEGIN|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowDecision|doSomething2 FLOW_ELEMENT_END|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowDecision|doSomething2 FLOW_ELEMENT_BEGIN|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowSubflow|Subflow1 FLOW_ELEMENT_END|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowSubflow|Subflow2 FLOW_ELEMENT_BEGIN|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowDecision|doSomething3 FLOW_ELEMENT_END|1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530|FlowDecision|doSomething3 La log commence là !!!! Comment trouver le nom flow en question ?? SELECT FlowLabel ,FlowDeveloperName FROM FlowInterviewLog WHERE FlowInterviewGuid =’1687e2674bd1913bfd651fc81a7d18dbb7a1e61-7530’
  • 26. Les logs c’est bien mais j’en fait quoi ?
  • 27. Que peut-on analyser dans une log ? ● Analyser le comportement et fixer des erreurs dans le code ou un flow etc … ● Analyser pourquoi on atteint les governor limit ou vérifier si on en est proche ● Monitorer et optimiser les performances ● Auditer et monitorer l’activité et les interactions des utilisateurs
  • 28. Lire les informations fournies via des system.debug
  • 29. System.debug (en prod oui ou non ??) 1 : No debug 2 : system.debug(‘message’); 3 : system.debug(‘message long’); 4 : system.debug(aContactObjet); 5 : afficher x system.debug 6 : loop system.debug([select … from Contact) Execution du code 5000 fois scenario 1 : traceFlag activé scenario 2 : Pas de traceFlag Conclusion : on évitera surtout les system.debug sur les objets / tableau en PROD https://bobbuzzard.blogspot.com/2021/05/the-impact-of-systemdebug.html
  • 30. Comment afficher plus d’info via un system.debug System.debug([SELECT FIELDS(STANDARD) FROM Account limit 200 ]); |USER_DEBUG|[1]|DEBUG|(Account:{AccountSource=Platform isPortfolio__c=false}, ...) Mais que faire si on souhaite afficher toutes les lignes ou un objet contenant trop d’information ? System.debug(JSON.serializePretty([SELECT FIELDS(STANDARD) FROM Account limit 200])); Warning : Le résultat sera affiché sur plusieurs lignes
  • 31. Comment filtrer les system.debug à afficher 1 :system.debug(logginglevel.ERROR,'test ERROR'); 2 : system.debug('test Normal'); Les system.debug ne s’affichent dès que le Level est atteint dans le traceflag. Le message 1 s'affiche si le level est sur “Error” alors que le le message 2 ne sera pas affiché.
  • 32. Monitorer les performances de nos customisations
  • 33. Step 1 : auditer tous les utilisateurs cibles ● Créer un DebugLevel au niveau avec Apex ou Workflow au niveau ERROR On cherche à limiter la tailles des logs générés pour rester sous les limites ● Créer un TraceFlag pour tous les utilisateurs ciblés avec ce debugLevel On essaiera de faire cela via un script utilisant la tooling api ● Attendre que les utilisateurs utilisent Salesforce durant qq heures On peut arrêter dès qu’on commence à repérer des traitement trop longs
  • 34. Step 2 : chercher les temps de traitement longs SELECT Id,Operation ,DurationMilliseconds ,StartTime ,LastModifiedDate,LogUser.Name FROM ApexLog order by DurationMilliseconds 12h 2 sec
  • 35. Step 3 : Analyser les problèmes Chercher les code unit dans les logs pour identifier la source des problèmes Créer des trace flags avec un niveau de detail plus fin : Apex : Fine (ou plus) Workflow : Fine (ou plus) Database : Fine (ou plus) Apex Profiling : Finer Passer en revue les logs avec les outils (vscode / developer console etc …)
  • 37. RequestIdentifier RequestIdentifier , un champs de l’objet ApexLog Represente l’Id de la transaction apex Pas toujours unique(Batch, Async operation) peut-être obtenu en apex via : Request.getCurrent().getRequestId(); Cas d’usage : Framework de log Audit des appels externes à Salesforce Retracer plus facilement les problèmes des utilisateurs via les logs
  • 38. Le too Many SOQL 101 (l’erreur préférée des dev)
  • 39. Comment gérer un too many soql 101(les pièges) Suite à l'exécution d’un code apex : une erreur Too many SOQL queries: 101 apparait vscode : dev console : Vers la fin de la log : LIMIT_USAGE_FOR_NS|(default)| : Number of SOQL queries: 101 out of 100 ******* CLOSE TO LIMIT LIMIT_USAGE_FOR_NS|slackv2| Number of SOQL queries: 29 out of 100 LA RAISON : - Les manage package - les requetes dans les flow (non visibles dans les logs)
  • 41. Excel !!!! Dev Console !!! VsCode plugin Calumet
  • 42. Conclusion config Plutot bon Plutot mauvais vscode Tout Save order Performance HeapSize SOQL 101 DevConsole Apex Fine/Finer Profiling : Finest Save order Apex HeapSize Perf Grosse log Excel Workflow :Fine Flow Le reste Calumet Tout Save order SOQL 101 Debug Tout ce qui ne marche pas !encore dedans !! :)
  • 43. I’ll be back : une nouvelle session arrive ● Marre de toujours nous voir parler ● Envie d’aborder un sujet qui vous tient à coeur ● Envie d'être le speaker d’un soir N’hésitez pas à en parler à nos dev group leader sinon y aura une suite (faites par ChatGpt cette fois) !!!!
  • 44. Liens Doc Salesforce pour les logs : https://help.salesforce.com/s/articleView?id=sf.code_setting_debug_log_levels.htm&type=5 Apex replay debugger : https://texei.com/conseils/jour-24-apex-replay-debugger/ Calumet (si vous êtes pas refroidi) : https://littlechaman.com/