ai-playbook 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -0
- package/agents/README.md +168 -0
- package/agents/SKILL.md +633 -0
- package/agents/architect/AGENT.md +44 -0
- package/agents/architect/README.md +5 -0
- package/agents/coder/AGENT.md +43 -0
- package/agents/coder/README.md +5 -0
- package/agents/debugger/AGENT.md +42 -0
- package/agents/debugger/README.md +6 -0
- package/agents/devops/AGENT.md +43 -0
- package/agents/devops/README.md +5 -0
- package/agents/documentation/AGENT.md +45 -0
- package/agents/documentation/README.md +5 -0
- package/agents/examples.md +550 -0
- package/agents/performance/AGENT.md +45 -0
- package/agents/performance/README.md +6 -0
- package/agents/planner/AGENT.md +44 -0
- package/agents/planner/README.md +6 -0
- package/agents/product-owner/AGENT.md +46 -0
- package/agents/product-owner/README.md +6 -0
- package/agents/refactorer/AGENT.md +44 -0
- package/agents/refactorer/README.md +6 -0
- package/agents/release-manager/AGENT.md +45 -0
- package/agents/release-manager/README.md +6 -0
- package/agents/researcher/AGENT.md +44 -0
- package/agents/researcher/README.md +6 -0
- package/agents/reviewer/AGENT.md +43 -0
- package/agents/reviewer/README.md +6 -0
- package/agents/security/AGENT.md +46 -0
- package/agents/security/README.md +6 -0
- package/agents/support/AGENT.md +45 -0
- package/agents/support/README.md +6 -0
- package/agents/tester/AGENT.md +46 -0
- package/agents/tester/README.md +5 -0
- package/bin/cli.js +186 -0
- package/commands/README.md +266 -0
- package/commands/build.md +135 -0
- package/commands/clean.md +126 -0
- package/commands/deploy-prod.md +171 -0
- package/commands/deploy-staging.md +147 -0
- package/commands/deps.md +169 -0
- package/commands/dev.md +132 -0
- package/commands/format.md +142 -0
- package/commands/lint.md +125 -0
- package/commands/migrate.md +159 -0
- package/commands/release.md +183 -0
- package/commands/rollback.md +152 -0
- package/commands/seed.md +178 -0
- package/commands/setup.md +109 -0
- package/commands/test.md +134 -0
- package/commands/validate.md +147 -0
- package/context/README.md +7 -0
- package/context/aem.md +47 -0
- package/context/architecture.md +51 -0
- package/context/bullminder.md +57 -0
- package/context/coding-style.md +42 -0
- package/context/communication.md +53 -0
- package/context/company.md +46 -0
- package/context/engineering.md +63 -0
- package/context/project-template.md +71 -0
- package/context/trading.md +52 -0
- package/hooks/README.md +326 -0
- package/hooks/code-review/README.md +6 -0
- package/hooks/code-review/check-coverage.md +101 -0
- package/hooks/custom/README.md +6 -0
- package/hooks/custom/project-specific-hooks.md +273 -0
- package/hooks/deployment/README.md +6 -0
- package/hooks/deployment/health-check.md +102 -0
- package/hooks/deployment/pre-deploy-check.md +84 -0
- package/hooks/documentation/README.md +6 -0
- package/hooks/documentation/update-changelog.md +146 -0
- package/hooks/post-task/README.md +5 -0
- package/hooks/post-task/run-tests.md +61 -0
- package/hooks/pre-commit/README.md +6 -0
- package/hooks/pre-commit/format.md +63 -0
- package/hooks/pre-commit/lint.md +62 -0
- package/hooks/pre-commit/type-check.md +78 -0
- package/hooks/pre-task/README.md +6 -0
- package/hooks/pre-task/check-branch.md +48 -0
- package/hooks/pre-task/validate-environment.md +48 -0
- package/hooks/security-check/README.md +6 -0
- package/hooks/security-check/dependency-audit.md +85 -0
- package/hooks/security-check/secrets-scan.md +77 -0
- package/hooks/test-before-finish/README.md +6 -0
- package/hooks/test-before-finish/run-all-tests.md +128 -0
- package/index.js +69 -0
- package/knowledge/README.md +33 -0
- package/knowledge/ai-agents.md +74 -0
- package/knowledge/decision-making.md +73 -0
- package/knowledge/documentation.md +67 -0
- package/knowledge/engineering-principles.md +65 -0
- package/knowledge/product-discovery.md +68 -0
- package/knowledge/security-privacy.md +54 -0
- package/knowledge/testing-quality.md +63 -0
- package/package.json +63 -0
- package/patterns/README.md +7 -0
- package/prompts/README.md +208 -0
- package/prompts/architect/README.md +96 -0
- package/prompts/architect/design-system.md +140 -0
- package/prompts/debugger/README.md +96 -0
- package/prompts/debugger/diagnose-issue.md +141 -0
- package/prompts/developer/README.md +129 -0
- package/prompts/developer/fix-bug.md +136 -0
- package/prompts/developer/implement-feature.md +133 -0
- package/prompts/product-owner/README.md +116 -0
- package/prompts/product-owner/define-feature.md +145 -0
- package/prompts/reviewer/README.md +91 -0
- package/prompts/reviewer/code-review.md +129 -0
- package/prompts/support/README.md +154 -0
- package/prompts/support/resolve-issue.md +124 -0
- package/roles/README.md +6 -0
- package/roles/design-architect/README.md +98 -0
- package/roles/design-architect/accessibility/README.md +33 -0
- package/roles/design-architect/accessibility/checklists.md +29 -0
- package/roles/design-architect/accessibility/examples.md +35 -0
- package/roles/design-architect/checklists.md +76 -0
- package/roles/design-architect/component-library/README.md +35 -0
- package/roles/design-architect/component-library/checklists.md +29 -0
- package/roles/design-architect/component-library/examples.md +35 -0
- package/roles/design-architect/design-system/README.md +35 -0
- package/roles/design-architect/design-system/checklists.md +27 -0
- package/roles/design-architect/design-system/examples.md +41 -0
- package/roles/design-architect/examples/README.md +31 -0
- package/roles/design-architect/examples/checklists.md +26 -0
- package/roles/design-architect/examples/examples.md +46 -0
- package/roles/design-architect/examples.md +90 -0
- package/roles/design-architect/figma/README.md +33 -0
- package/roles/design-architect/figma/checklists.md +27 -0
- package/roles/design-architect/figma/examples.md +38 -0
- package/roles/design-architect/responsibilities.md +73 -0
- package/roles/design-architect/responsive/README.md +34 -0
- package/roles/design-architect/responsive/checklists.md +26 -0
- package/roles/design-architect/responsive/examples.md +39 -0
- package/roles/design-architect/role.md +129 -0
- package/roles/design-architect/skill-map.md +42 -0
- package/roles/design-architect/triggers.md +110 -0
- package/roles/design-architect/ui/README.md +36 -0
- package/roles/design-architect/ui/checklists.md +29 -0
- package/roles/design-architect/ui/examples.md +28 -0
- package/roles/design-architect/usability/README.md +34 -0
- package/roles/design-architect/usability/checklists.md +28 -0
- package/roles/design-architect/usability/examples.md +31 -0
- package/roles/design-architect/ux/README.md +36 -0
- package/roles/design-architect/ux/checklists.md +28 -0
- package/roles/design-architect/ux/examples.md +37 -0
- package/roles/design-architect/wireframes/README.md +34 -0
- package/roles/design-architect/wireframes/checklists.md +25 -0
- package/roles/design-architect/wireframes/examples.md +32 -0
- package/roles/design-architect/workflow.md +80 -0
- package/roles/devops/README.md +101 -0
- package/roles/devops/ansible/README.md +6 -0
- package/roles/devops/checklists.md +413 -0
- package/roles/devops/ci-cd/README.md +169 -0
- package/roles/devops/ci-cd/checklists.md +289 -0
- package/roles/devops/ci-cd/examples.md +429 -0
- package/roles/devops/cloud-platforms/README.md +109 -0
- package/roles/devops/cost-optimization/README.md +131 -0
- package/roles/devops/disaster-recovery/README.md +118 -0
- package/roles/devops/docker/README.md +6 -0
- package/roles/devops/examples/README.md +6 -0
- package/roles/devops/examples.md +775 -0
- package/roles/devops/github-actions/README.md +6 -0
- package/roles/devops/helm/README.md +6 -0
- package/roles/devops/infrastructure-as-code/README.md +160 -0
- package/roles/devops/infrastructure-as-code/checklists.md +124 -0
- package/roles/devops/jenkins/README.md +6 -0
- package/roles/devops/kubernetes/README.md +150 -0
- package/roles/devops/kubernetes/checklists.md +192 -0
- package/roles/devops/kubernetes/examples.md +189 -0
- package/roles/devops/monitoring/README.md +93 -0
- package/roles/devops/networking/README.md +83 -0
- package/roles/devops/performance/README.md +104 -0
- package/roles/devops/responsibilities.md +95 -0
- package/roles/devops/role.md +130 -0
- package/roles/devops/security/README.md +126 -0
- package/roles/devops/skill-map.md +162 -0
- package/roles/devops/terraform/README.md +6 -0
- package/roles/devops/triggers.md +241 -0
- package/roles/devops/workflow.md +197 -0
- package/roles/qa/README.md +16 -0
- package/roles/qa/api-testing/README.md +6 -0
- package/roles/qa/automation/README.md +6 -0
- package/roles/qa/checklists.md +24 -0
- package/roles/qa/examples/README.md +6 -0
- package/roles/qa/examples.md +27 -0
- package/roles/qa/performance/README.md +6 -0
- package/roles/qa/playwright/README.md +6 -0
- package/roles/qa/responsibilities.md +16 -0
- package/roles/qa/role.md +47 -0
- package/roles/qa/selenium/README.md +6 -0
- package/roles/qa/skill-map.md +14 -0
- package/roles/qa/triggers.md +10 -0
- package/roles/qa/workflow.md +9 -0
- package/roles/software-architect/README.md +16 -0
- package/roles/software-architect/agents/README.md +6 -0
- package/roles/software-architect/ai-architecture/README.md +6 -0
- package/roles/software-architect/aws/README.md +6 -0
- package/roles/software-architect/azure/README.md +6 -0
- package/roles/software-architect/caching/README.md +6 -0
- package/roles/software-architect/checklists.md +25 -0
- package/roles/software-architect/cloud/README.md +6 -0
- package/roles/software-architect/database-design/README.md +6 -0
- package/roles/software-architect/diagrams/README.md +6 -0
- package/roles/software-architect/distributed-systems/README.md +7 -0
- package/roles/software-architect/docker/README.md +6 -0
- package/roles/software-architect/event-driven/README.md +7 -0
- package/roles/software-architect/examples/README.md +6 -0
- package/roles/software-architect/examples.md +22 -0
- package/roles/software-architect/gcp/README.md +6 -0
- package/roles/software-architect/kubernetes/README.md +6 -0
- package/roles/software-architect/messaging/README.md +6 -0
- package/roles/software-architect/rag/README.md +7 -0
- package/roles/software-architect/responsibilities.md +17 -0
- package/roles/software-architect/role.md +46 -0
- package/roles/software-architect/scalability/README.md +6 -0
- package/roles/software-architect/security/README.md +6 -0
- package/roles/software-architect/skill-map.md +15 -0
- package/roles/software-architect/system-design/README.md +6 -0
- package/roles/software-architect/triggers.md +10 -0
- package/roles/software-architect/vector-db/README.md +6 -0
- package/roles/software-architect/workflow.md +9 -0
- package/roles/software-developer/README.md +116 -0
- package/roles/software-developer/api/README.md +365 -0
- package/roles/software-developer/api/checklist.md +131 -0
- package/roles/software-developer/api/examples.md +459 -0
- package/roles/software-developer/authentication/README.md +26 -0
- package/roles/software-developer/authentication/checklists.md +22 -0
- package/roles/software-developer/authentication/examples.md +32 -0
- package/roles/software-developer/authorization/README.md +26 -0
- package/roles/software-developer/authorization/checklists.md +21 -0
- package/roles/software-developer/authorization/examples.md +27 -0
- package/roles/software-developer/backend/README.md +26 -0
- package/roles/software-developer/backend/checklists.md +21 -0
- package/roles/software-developer/backend/examples.md +21 -0
- package/roles/software-developer/cache/README.md +25 -0
- package/roles/software-developer/cache/checklists.md +21 -0
- package/roles/software-developer/cache/examples.md +22 -0
- package/roles/software-developer/checklists.md +122 -0
- package/roles/software-developer/code-review/README.md +23 -0
- package/roles/software-developer/code-review/checklists.md +22 -0
- package/roles/software-developer/code-review/examples.md +20 -0
- package/roles/software-developer/database/README.md +27 -0
- package/roles/software-developer/database/checklists.md +21 -0
- package/roles/software-developer/database/examples.md +27 -0
- package/roles/software-developer/debugging/README.md +24 -0
- package/roles/software-developer/debugging/checklists.md +20 -0
- package/roles/software-developer/debugging/examples.md +28 -0
- package/roles/software-developer/examples/README.md +22 -0
- package/roles/software-developer/examples/checklists.md +8 -0
- package/roles/software-developer/examples/examples.md +25 -0
- package/roles/software-developer/examples.md +378 -0
- package/roles/software-developer/frontend/README.md +76 -0
- package/roles/software-developer/frontend/accessibility/README.md +136 -0
- package/roles/software-developer/frontend/accessibility/best-practices.md +368 -0
- package/roles/software-developer/frontend/code-quality/README.md +136 -0
- package/roles/software-developer/frontend/code-quality/best-practices.md +309 -0
- package/roles/software-developer/frontend/components/README.md +65 -0
- package/roles/software-developer/frontend/components/best-practices.md +273 -0
- package/roles/software-developer/frontend/debugging/README.md +149 -0
- package/roles/software-developer/frontend/debugging/best-practices.md +329 -0
- package/roles/software-developer/frontend/examples/README.md +19 -0
- package/roles/software-developer/frontend/examples/checklists.md +8 -0
- package/roles/software-developer/frontend/examples/examples.md +17 -0
- package/roles/software-developer/frontend/logging-observability/README.md +196 -0
- package/roles/software-developer/frontend/logging-observability/best-practices.md +430 -0
- package/roles/software-developer/frontend/performance/README.md +99 -0
- package/roles/software-developer/frontend/performance/best-practices.md +350 -0
- package/roles/software-developer/frontend/state-management/README.md +85 -0
- package/roles/software-developer/frontend/state-management/best-practices.md +344 -0
- package/roles/software-developer/frontend/testing/README.md +114 -0
- package/roles/software-developer/frontend/testing/best-practices.md +272 -0
- package/roles/software-developer/fullstack/README.md +25 -0
- package/roles/software-developer/fullstack/checklists.md +19 -0
- package/roles/software-developer/fullstack/examples.md +14 -0
- package/roles/software-developer/graphql/README.md +24 -0
- package/roles/software-developer/graphql/checklists.md +20 -0
- package/roles/software-developer/graphql/examples.md +24 -0
- package/roles/software-developer/integration-tests/README.md +25 -0
- package/roles/software-developer/integration-tests/checklists.md +20 -0
- package/roles/software-developer/integration-tests/examples.md +18 -0
- package/roles/software-developer/java/README.md +24 -0
- package/roles/software-developer/java/checklists.md +16 -0
- package/roles/software-developer/java/examples.md +22 -0
- package/roles/software-developer/javascript/README.md +24 -0
- package/roles/software-developer/javascript/checklists.md +15 -0
- package/roles/software-developer/javascript/examples.md +18 -0
- package/roles/software-developer/logging/README.md +105 -0
- package/roles/software-developer/logging/checklists.md +48 -0
- package/roles/software-developer/logging/examples.md +135 -0
- package/roles/software-developer/messaging/README.md +24 -0
- package/roles/software-developer/messaging/checklists.md +21 -0
- package/roles/software-developer/messaging/examples.md +26 -0
- package/roles/software-developer/microservices/README.md +25 -0
- package/roles/software-developer/microservices/checklists.md +21 -0
- package/roles/software-developer/microservices/examples.md +21 -0
- package/roles/software-developer/node/README.md +25 -0
- package/roles/software-developer/node/checklists.md +15 -0
- package/roles/software-developer/node/examples.md +15 -0
- package/roles/software-developer/nosql/README.md +24 -0
- package/roles/software-developer/nosql/checklists.md +21 -0
- package/roles/software-developer/nosql/examples.md +20 -0
- package/roles/software-developer/observability/README.md +25 -0
- package/roles/software-developer/observability/checklists.md +21 -0
- package/roles/software-developer/observability/examples.md +22 -0
- package/roles/software-developer/performance/README.md +26 -0
- package/roles/software-developer/performance/checklists.md +20 -0
- package/roles/software-developer/performance/examples.md +20 -0
- package/roles/software-developer/python/README.md +25 -0
- package/roles/software-developer/python/checklists.md +15 -0
- package/roles/software-developer/python/examples.md +17 -0
- package/roles/software-developer/react/README.md +24 -0
- package/roles/software-developer/react/checklists.md +15 -0
- package/roles/software-developer/react/examples.md +22 -0
- package/roles/software-developer/refactoring/README.md +23 -0
- package/roles/software-developer/refactoring/checklists.md +21 -0
- package/roles/software-developer/refactoring/examples.md +11 -0
- package/roles/software-developer/responsibilities.md +58 -0
- package/roles/software-developer/role.md +127 -0
- package/roles/software-developer/skill-map.md +88 -0
- package/roles/software-developer/springboot/README.md +25 -0
- package/roles/software-developer/springboot/checklists.md +15 -0
- package/roles/software-developer/springboot/examples.md +21 -0
- package/roles/software-developer/sql/README.md +24 -0
- package/roles/software-developer/sql/checklists.md +22 -0
- package/roles/software-developer/sql/examples.md +20 -0
- package/roles/software-developer/testing/README.md +25 -0
- package/roles/software-developer/testing/checklists.md +21 -0
- package/roles/software-developer/testing/examples.md +19 -0
- package/roles/software-developer/triggers.md +550 -0
- package/roles/software-developer/typescript/README.md +25 -0
- package/roles/software-developer/typescript/checklists.md +15 -0
- package/roles/software-developer/typescript/examples.md +18 -0
- package/roles/software-developer/unit-tests/README.md +24 -0
- package/roles/software-developer/unit-tests/checklists.md +19 -0
- package/roles/software-developer/unit-tests/examples.md +22 -0
- package/roles/software-developer/workflow.md +196 -0
- package/roles/sre/README.md +16 -0
- package/roles/sre/alerts/README.md +6 -0
- package/roles/sre/availability/README.md +6 -0
- package/roles/sre/chaos/README.md +6 -0
- package/roles/sre/checklists.md +24 -0
- package/roles/sre/examples/README.md +6 -0
- package/roles/sre/examples.md +19 -0
- package/roles/sre/observability/README.md +6 -0
- package/roles/sre/reliability/README.md +6 -0
- package/roles/sre/responsibilities.md +16 -0
- package/roles/sre/role.md +46 -0
- package/roles/sre/skill-map.md +14 -0
- package/roles/sre/slos/README.md +6 -0
- package/roles/sre/triggers.md +10 -0
- package/roles/sre/workflow.md +9 -0
- package/roles/support-engineer/README.md +16 -0
- package/roles/support-engineer/checklists.md +24 -0
- package/roles/support-engineer/datadog/README.md +6 -0
- package/roles/support-engineer/examples/README.md +6 -0
- package/roles/support-engineer/examples.md +17 -0
- package/roles/support-engineer/incident-response/README.md +6 -0
- package/roles/support-engineer/kubernetes/README.md +6 -0
- package/roles/support-engineer/linux/README.md +6 -0
- package/roles/support-engineer/logs/README.md +6 -0
- package/roles/support-engineer/monitoring/README.md +6 -0
- package/roles/support-engineer/networking/README.md +6 -0
- package/roles/support-engineer/newrelic/README.md +6 -0
- package/roles/support-engineer/postmortem/README.md +6 -0
- package/roles/support-engineer/production/README.md +6 -0
- package/roles/support-engineer/responsibilities.md +16 -0
- package/roles/support-engineer/role.md +47 -0
- package/roles/support-engineer/root-cause-analysis/README.md +6 -0
- package/roles/support-engineer/runbooks/README.md +6 -0
- package/roles/support-engineer/skill-map.md +14 -0
- package/roles/support-engineer/splunk/README.md +6 -0
- package/roles/support-engineer/triggers.md +10 -0
- package/roles/support-engineer/troubleshooting/README.md +6 -0
- package/roles/support-engineer/workflow.md +9 -0
- package/setup.sh +204 -0
- package/skills/.claude/README.md +7 -0
- package/skills/README.md +21 -0
- package/skills/ai-agents/README.md +207 -0
- package/skills/ai-agents/examples.md +335 -0
- package/skills/ai-agents/skill.md +392 -0
- package/skills/architecture/README.md +198 -0
- package/skills/architecture/examples.md +316 -0
- package/skills/architecture/skill.md +189 -0
- package/skills/design-architecture/README.md +107 -0
- package/skills/design-architecture/examples.md +84 -0
- package/skills/design-architecture/skill.md +192 -0
- package/skills/devops/README.md +177 -0
- package/skills/devops/examples.md +376 -0
- package/skills/devops/skill.md +210 -0
- package/skills/documentation/README.md +182 -0
- package/skills/documentation/examples.md +364 -0
- package/skills/documentation/skill.md +200 -0
- package/skills/performance/README.md +177 -0
- package/skills/performance/examples.md +376 -0
- package/skills/performance/skill.md +199 -0
- package/skills/qa/README.md +106 -0
- package/skills/qa/examples.md +84 -0
- package/skills/qa/skill.md +384 -0
- package/skills/security/README.md +108 -0
- package/skills/security/examples.md +85 -0
- package/skills/security/skill.md +223 -0
- package/skills/software-development/README.md +239 -0
- package/skills/software-development/assessment.md +0 -0
- package/skills/software-development/checklists.md +0 -0
- package/skills/software-development/examples.md +375 -0
- package/skills/software-development/prompts.md +0 -0
- package/skills/software-development/skill.md +390 -0
- package/skills/software-development/templates/README.md +7 -0
- package/skills/software-development/templates/api-development.md +0 -0
- package/skills/software-development/templates/bug-fix.md +0 -0
- package/skills/software-development/templates/code-review.md +0 -0
- package/skills/software-development/templates/feature-implementation.md +0 -0
- package/skills/software-development/templates/llm-integration.md +0 -0
- package/skills/software-development/templates/performance-review.md +0 -0
- package/skills/software-development/templates/security-review.md +0 -0
- package/skills/software-development/templates/test-generation.md +0 -0
- package/skills/software-development/tools.md +0 -0
- package/skills/software-development/workflows.md +0 -0
- package/skills/sre/README.md +107 -0
- package/skills/sre/examples.md +379 -0
- package/skills/sre/skill.md +256 -0
- package/skills/support-engineering/README.md +107 -0
- package/skills/support-engineering/examples.md +85 -0
- package/skills/support-engineering/skill.md +103 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
# Logging & Observability: Best Practices
|
|
2
|
+
|
|
3
|
+
Good logging and observability let you understand what's happening in production. This guide covers what to log, how to structure logs, and how to make them actionable.
|
|
4
|
+
|
|
5
|
+
## Structured Logging
|
|
6
|
+
|
|
7
|
+
Structured logs are parseable and queryable, unlike free-form text.
|
|
8
|
+
|
|
9
|
+
```javascript
|
|
10
|
+
// BAD: Unstructured logging (hard to search/analyze)
|
|
11
|
+
console.log('User clicked button');
|
|
12
|
+
console.log('API request took 234ms');
|
|
13
|
+
console.log('Error loading data');
|
|
14
|
+
|
|
15
|
+
// GOOD: Structured logging
|
|
16
|
+
console.log(JSON.stringify({
|
|
17
|
+
event: 'button_clicked',
|
|
18
|
+
timestamp: new Date().toISOString(),
|
|
19
|
+
user_id: 123,
|
|
20
|
+
button_name: 'save'
|
|
21
|
+
}));
|
|
22
|
+
|
|
23
|
+
console.log(JSON.stringify({
|
|
24
|
+
event: 'api_request_completed',
|
|
25
|
+
timestamp: new Date().toISOString(),
|
|
26
|
+
endpoint: '/api/users/123',
|
|
27
|
+
duration_ms: 234,
|
|
28
|
+
status: 200
|
|
29
|
+
}));
|
|
30
|
+
|
|
31
|
+
console.error(JSON.stringify({
|
|
32
|
+
event: 'api_request_failed',
|
|
33
|
+
timestamp: new Date().toISOString(),
|
|
34
|
+
endpoint: '/api/users/123',
|
|
35
|
+
error_message: 'Network timeout',
|
|
36
|
+
error_code: 'NETWORK_TIMEOUT'
|
|
37
|
+
}));
|
|
38
|
+
|
|
39
|
+
// With structured logs, you can:
|
|
40
|
+
// - Filter: all events where user_id = 123
|
|
41
|
+
// - Aggregate: average duration_ms by endpoint
|
|
42
|
+
// - Alert: when error_count > 10 in 5 minutes
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Log Levels
|
|
46
|
+
|
|
47
|
+
Use the right level for each log message.
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
// DEBUG: Low-level technical information
|
|
51
|
+
// - Variable values during development
|
|
52
|
+
// - Function entry/exit
|
|
53
|
+
// - Detailed state changes
|
|
54
|
+
// Only visible in development or with DEBUG flag enabled
|
|
55
|
+
|
|
56
|
+
logger.debug({
|
|
57
|
+
event: 'user_data_loaded',
|
|
58
|
+
user: user,
|
|
59
|
+
timestamp: new Date().toISOString()
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// INFO: Notable business events
|
|
63
|
+
// - User actions (login, purchase, post created)
|
|
64
|
+
// - API calls completed successfully
|
|
65
|
+
// - Configuration loaded
|
|
66
|
+
|
|
67
|
+
logger.info({
|
|
68
|
+
event: 'user_logged_in',
|
|
69
|
+
user_id: 123,
|
|
70
|
+
timestamp: new Date().toISOString()
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// WARN: Unexpected but recoverable situations
|
|
74
|
+
// - Deprecated API usage
|
|
75
|
+
// - Slow operations (exceeded threshold)
|
|
76
|
+
// - Falling back to default behavior
|
|
77
|
+
|
|
78
|
+
logger.warn({
|
|
79
|
+
event: 'api_call_slow',
|
|
80
|
+
endpoint: '/api/users',
|
|
81
|
+
duration_ms: 3500,
|
|
82
|
+
threshold_ms: 1000
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// ERROR: Errors that need attention
|
|
86
|
+
// - API calls failed
|
|
87
|
+
// - Data validation failed
|
|
88
|
+
// - Unhandled exceptions
|
|
89
|
+
// - Should be reviewed and fixed
|
|
90
|
+
|
|
91
|
+
logger.error({
|
|
92
|
+
event: 'api_call_failed',
|
|
93
|
+
endpoint: '/api/users/123',
|
|
94
|
+
status: 500,
|
|
95
|
+
error: 'Server error'
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// CRITICAL/FATAL: System down
|
|
99
|
+
// - Service unavailable
|
|
100
|
+
// - Data corruption detected
|
|
101
|
+
// - Need immediate human intervention
|
|
102
|
+
|
|
103
|
+
logger.critical({
|
|
104
|
+
event: 'database_connection_lost',
|
|
105
|
+
duration_sec: 30,
|
|
106
|
+
attempt: 5
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## What to Log
|
|
111
|
+
|
|
112
|
+
Log the right things to understand what's happening.
|
|
113
|
+
|
|
114
|
+
```javascript
|
|
115
|
+
// DO: Log user actions and business events
|
|
116
|
+
logger.info({
|
|
117
|
+
event: 'user_action',
|
|
118
|
+
action: 'create_post',
|
|
119
|
+
user_id: user.id,
|
|
120
|
+
post_id: post.id,
|
|
121
|
+
timestamp: new Date().toISOString()
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// DO: Log data flow - input and output
|
|
125
|
+
function processPayment(payment) {
|
|
126
|
+
logger.debug({
|
|
127
|
+
event: 'process_payment_start',
|
|
128
|
+
payment_id: payment.id,
|
|
129
|
+
amount: payment.amount
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const result = chargeCard(payment);
|
|
133
|
+
|
|
134
|
+
logger.info({
|
|
135
|
+
event: 'process_payment_success',
|
|
136
|
+
payment_id: payment.id,
|
|
137
|
+
transaction_id: result.id
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// DO: Log errors with context
|
|
144
|
+
function handleError(error, context) {
|
|
145
|
+
logger.error({
|
|
146
|
+
event: 'error_occurred',
|
|
147
|
+
error_message: error.message,
|
|
148
|
+
error_code: error.code,
|
|
149
|
+
stack_trace: error.stack,
|
|
150
|
+
context: context,
|
|
151
|
+
timestamp: new Date().toISOString()
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// DO: Log performance metrics
|
|
156
|
+
function measure(name, fn) {
|
|
157
|
+
const start = performance.now();
|
|
158
|
+
const result = fn();
|
|
159
|
+
const duration = performance.now() - start;
|
|
160
|
+
|
|
161
|
+
logger.info({
|
|
162
|
+
event: 'operation_completed',
|
|
163
|
+
operation: name,
|
|
164
|
+
duration_ms: duration
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// DO NOT: Log secrets
|
|
171
|
+
logger.info({
|
|
172
|
+
event: 'user_auth',
|
|
173
|
+
// DON'T log password
|
|
174
|
+
user_id: user.id,
|
|
175
|
+
// DON'T log full token
|
|
176
|
+
token_prefix: token.substring(0, 10)
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// DO NOT: Log sensitive personal data
|
|
180
|
+
logger.info({
|
|
181
|
+
// Don't log full SSN
|
|
182
|
+
user_id: user.id,
|
|
183
|
+
// Don't log full credit card
|
|
184
|
+
payment_method: 'card_****_****_****_4242'
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// DO NOT: Log excessive data
|
|
188
|
+
logger.info({
|
|
189
|
+
// Don't log entire user object if you only need ID
|
|
190
|
+
user_id: user.id,
|
|
191
|
+
action: 'login'
|
|
192
|
+
});
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Never Log Secrets
|
|
196
|
+
|
|
197
|
+
This is critical. Secrets in logs are security breaches.
|
|
198
|
+
|
|
199
|
+
```javascript
|
|
200
|
+
// BAD: Secrets logged (CRITICAL BUG)
|
|
201
|
+
const apiKey = process.env.API_KEY;
|
|
202
|
+
logger.debug('Using API key:', apiKey); // SECURITY ISSUE
|
|
203
|
+
|
|
204
|
+
const token = getAuthToken();
|
|
205
|
+
logger.info('Auth token:', token); // SECURITY ISSUE
|
|
206
|
+
|
|
207
|
+
// GOOD: Log only identifiers or placeholders
|
|
208
|
+
const apiKey = process.env.API_KEY;
|
|
209
|
+
logger.debug('API client initialized'); // No key logged
|
|
210
|
+
|
|
211
|
+
const token = getAuthToken();
|
|
212
|
+
logger.info({
|
|
213
|
+
event: 'authentication_success',
|
|
214
|
+
user_id: decodeToken(token).userId
|
|
215
|
+
}); // No token logged
|
|
216
|
+
|
|
217
|
+
// Sanitize logs before sending to external service
|
|
218
|
+
function sanitizeLog(obj) {
|
|
219
|
+
const sanitized = { ...obj };
|
|
220
|
+
|
|
221
|
+
// Remove common secret fields
|
|
222
|
+
delete sanitized.password;
|
|
223
|
+
delete sanitized.token;
|
|
224
|
+
delete sanitized.api_key;
|
|
225
|
+
delete sanitized.secret;
|
|
226
|
+
delete sanitized.private_key;
|
|
227
|
+
|
|
228
|
+
// Mask sensitive patterns
|
|
229
|
+
if (sanitized.credit_card) {
|
|
230
|
+
sanitized.credit_card = sanitized.credit_card.replace(/\d(?=\d{4})/g, '*');
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return sanitized;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// IMPORTANT: Audit logs regularly
|
|
237
|
+
// Check production logs for secrets that leaked
|
|
238
|
+
// If found, rotate that credential immediately
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Request IDs (Correlation IDs)
|
|
242
|
+
|
|
243
|
+
Track requests across multiple services for easier debugging.
|
|
244
|
+
|
|
245
|
+
```javascript
|
|
246
|
+
// Generate request ID
|
|
247
|
+
function generateRequestId() {
|
|
248
|
+
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Pass through entire request lifecycle
|
|
252
|
+
function makeRequest(url, options = {}) {
|
|
253
|
+
const requestId = generateRequestId();
|
|
254
|
+
|
|
255
|
+
logger.info({
|
|
256
|
+
event: 'http_request_start',
|
|
257
|
+
request_id: requestId,
|
|
258
|
+
method: options.method || 'GET',
|
|
259
|
+
url: url
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
return fetch(url, {
|
|
263
|
+
...options,
|
|
264
|
+
headers: {
|
|
265
|
+
...options.headers,
|
|
266
|
+
'X-Request-ID': requestId
|
|
267
|
+
}
|
|
268
|
+
})
|
|
269
|
+
.then(r => {
|
|
270
|
+
logger.info({
|
|
271
|
+
event: 'http_request_success',
|
|
272
|
+
request_id: requestId,
|
|
273
|
+
status: r.status,
|
|
274
|
+
duration_ms: Date.now() - parseInt(requestId)
|
|
275
|
+
});
|
|
276
|
+
return r;
|
|
277
|
+
})
|
|
278
|
+
.catch(err => {
|
|
279
|
+
logger.error({
|
|
280
|
+
event: 'http_request_failed',
|
|
281
|
+
request_id: requestId,
|
|
282
|
+
error_message: err.message
|
|
283
|
+
});
|
|
284
|
+
throw err;
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Include request_id in ALL logs within that request
|
|
289
|
+
function Component({ userId }) {
|
|
290
|
+
const [requestId] = useState(generateRequestId());
|
|
291
|
+
|
|
292
|
+
useEffect(() => {
|
|
293
|
+
logger.info({
|
|
294
|
+
request_id: requestId,
|
|
295
|
+
event: 'component_mounted',
|
|
296
|
+
user_id: userId
|
|
297
|
+
});
|
|
298
|
+
}, [userId, requestId]);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Benefits: Can trace entire request flow across frontend and backend
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## Error Reporting
|
|
305
|
+
|
|
306
|
+
Capture errors automatically and report them.
|
|
307
|
+
|
|
308
|
+
```javascript
|
|
309
|
+
// Global error handler
|
|
310
|
+
window.addEventListener('error', (event) => {
|
|
311
|
+
logger.error({
|
|
312
|
+
event: 'uncaught_error',
|
|
313
|
+
error_message: event.error?.message,
|
|
314
|
+
error_stack: event.error?.stack,
|
|
315
|
+
filename: event.filename,
|
|
316
|
+
lineno: event.lineno,
|
|
317
|
+
colno: event.colno,
|
|
318
|
+
timestamp: new Date().toISOString()
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
// Send to error tracking service
|
|
322
|
+
reportToSentry({
|
|
323
|
+
message: event.error?.message,
|
|
324
|
+
stack: event.error?.stack
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
// Promise rejection handler
|
|
329
|
+
window.addEventListener('unhandledrejection', (event) => {
|
|
330
|
+
logger.error({
|
|
331
|
+
event: 'unhandled_rejection',
|
|
332
|
+
reason: event.reason?.message,
|
|
333
|
+
stack: event.reason?.stack,
|
|
334
|
+
timestamp: new Date().toISOString()
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
reportToSentry({
|
|
338
|
+
message: event.reason?.message,
|
|
339
|
+
stack: event.reason?.stack
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
// React error boundary
|
|
344
|
+
class ErrorBoundary extends React.Component {
|
|
345
|
+
componentDidCatch(error, errorInfo) {
|
|
346
|
+
logger.error({
|
|
347
|
+
event: 'react_error_boundary',
|
|
348
|
+
error_message: error.toString(),
|
|
349
|
+
component_stack: errorInfo.componentStack
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
reportToSentry({
|
|
353
|
+
message: error.toString(),
|
|
354
|
+
stack: errorInfo.componentStack
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
render() {
|
|
359
|
+
if (this.state.hasError) {
|
|
360
|
+
return <div>Something went wrong. Error has been reported.</div>;
|
|
361
|
+
}
|
|
362
|
+
return this.props.children;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Logging Cleanup
|
|
368
|
+
|
|
369
|
+
Keep logs clean and manageable.
|
|
370
|
+
|
|
371
|
+
```javascript
|
|
372
|
+
// BAD: Console.log left in production
|
|
373
|
+
function Component() {
|
|
374
|
+
const [data, setData] = useState(null);
|
|
375
|
+
|
|
376
|
+
useEffect(() => {
|
|
377
|
+
fetchData()
|
|
378
|
+
.then(data => {
|
|
379
|
+
console.log('DATA:', data); // Should be removed
|
|
380
|
+
setData(data);
|
|
381
|
+
});
|
|
382
|
+
}, []);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// GOOD: Use logger levels appropriately
|
|
386
|
+
function Component() {
|
|
387
|
+
const [data, setData] = useState(null);
|
|
388
|
+
|
|
389
|
+
useEffect(() => {
|
|
390
|
+
fetchData()
|
|
391
|
+
.then(data => {
|
|
392
|
+
logger.debug({ event: 'data_loaded', data }); // Only in debug mode
|
|
393
|
+
setData(data);
|
|
394
|
+
});
|
|
395
|
+
}, []);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// Remove debug logs before shipping to production
|
|
399
|
+
// Use environment variables to control log level
|
|
400
|
+
const logLevel = process.env.LOG_LEVEL || 'info';
|
|
401
|
+
|
|
402
|
+
const logger = {
|
|
403
|
+
debug: logLevel === 'debug' ? console.log : () => {},
|
|
404
|
+
info: console.log,
|
|
405
|
+
warn: console.warn,
|
|
406
|
+
error: console.error
|
|
407
|
+
};
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
## Logging & Observability Checklist
|
|
411
|
+
|
|
412
|
+
- [ ] Using structured logging (JSON, not free-form text)
|
|
413
|
+
- [ ] Using appropriate log levels (DEBUG, INFO, WARN, ERROR)
|
|
414
|
+
- [ ] Logging user actions and business events
|
|
415
|
+
- [ ] Logging errors with full context
|
|
416
|
+
- [ ] NO secrets logged (passwords, tokens, keys)
|
|
417
|
+
- [ ] NO sensitive PII logged (full SSN, full CC, email if avoidable)
|
|
418
|
+
- [ ] Using request IDs for tracing
|
|
419
|
+
- [ ] Error tracking service configured
|
|
420
|
+
- [ ] Global error handlers in place
|
|
421
|
+
- [ ] Debug logs removed before production
|
|
422
|
+
- [ ] Log retention/cleanup policy defined
|
|
423
|
+
- [ ] Monitoring alerts configured for ERROR level
|
|
424
|
+
|
|
425
|
+
## Related Guidance
|
|
426
|
+
|
|
427
|
+
- `/debugging` — using logs to debug issues
|
|
428
|
+
- `/code-quality` — clean logging patterns
|
|
429
|
+
- `/tools-setup` — logging libraries and services
|
|
430
|
+
- `/performance` — monitoring performance metrics
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Performance
|
|
2
|
+
|
|
3
|
+
Senior frontend developers measure performance, identify bottlenecks, and optimize strategically.
|
|
4
|
+
|
|
5
|
+
## Measurement First
|
|
6
|
+
|
|
7
|
+
- **Never optimize blindly** — measure before and after
|
|
8
|
+
- **Use real metrics** — Lab (synthetic) and Field (real users)
|
|
9
|
+
- **Identify bottleneck** — not all optimizations have same impact
|
|
10
|
+
|
|
11
|
+
### Key Metrics
|
|
12
|
+
|
|
13
|
+
- **First Contentful Paint (FCP)** — when first content appears
|
|
14
|
+
- **Largest Contentful Paint (LCP)** — when main content visible
|
|
15
|
+
- **Cumulative Layout Shift (CLS)** — visual stability
|
|
16
|
+
- **Time to Interactive (TTI)** — when page is interactive
|
|
17
|
+
- **Bundle Size** — total JS/CSS sent to user
|
|
18
|
+
|
|
19
|
+
### Tools
|
|
20
|
+
|
|
21
|
+
- Chrome DevTools (Performance tab)
|
|
22
|
+
- Lighthouse (automated audits)
|
|
23
|
+
- WebPageTest (detailed analysis)
|
|
24
|
+
- Web Vitals library (field metrics)
|
|
25
|
+
|
|
26
|
+
## Common Optimizations
|
|
27
|
+
|
|
28
|
+
### Code Splitting
|
|
29
|
+
- Load only what's needed initially
|
|
30
|
+
- Lazy load components (React.lazy)
|
|
31
|
+
- Route-based splitting (load page code on navigation)
|
|
32
|
+
- Reduces initial bundle size
|
|
33
|
+
|
|
34
|
+
### Memoization
|
|
35
|
+
- `React.memo` — skip re-render if props unchanged
|
|
36
|
+
- `useMemo` — cache expensive computations
|
|
37
|
+
- `useCallback` — cache function references
|
|
38
|
+
- Use when dependencies are stable
|
|
39
|
+
|
|
40
|
+
### Rendering Optimization
|
|
41
|
+
- Virtual lists (render visible items only)
|
|
42
|
+
- Windowing for large lists
|
|
43
|
+
- Pagination for data-heavy pages
|
|
44
|
+
- Reduces DOM nodes and memory
|
|
45
|
+
|
|
46
|
+
### Network Optimization
|
|
47
|
+
- Cache API responses
|
|
48
|
+
- Use CDN for static assets
|
|
49
|
+
- Minify CSS/JS/HTML
|
|
50
|
+
- Gzip compression
|
|
51
|
+
- HTTP/2 multiplexing
|
|
52
|
+
|
|
53
|
+
### Image Optimization
|
|
54
|
+
- Use appropriate formats (WebP, AVIF, JPEG)
|
|
55
|
+
- Lazy load images
|
|
56
|
+
- Responsive images (srcset)
|
|
57
|
+
- Compress without quality loss
|
|
58
|
+
|
|
59
|
+
## React-Specific Patterns
|
|
60
|
+
|
|
61
|
+
- Avoid large re-renders with context splitting
|
|
62
|
+
- Use Suspense for code splitting
|
|
63
|
+
- Profile with React DevTools Profiler
|
|
64
|
+
- Check render count (Profiler tab)
|
|
65
|
+
- Identify slow components
|
|
66
|
+
|
|
67
|
+
## Monitoring in Production
|
|
68
|
+
|
|
69
|
+
- Track Core Web Vitals
|
|
70
|
+
- Monitor error rates
|
|
71
|
+
- Track performance over time
|
|
72
|
+
- Alert on regressions
|
|
73
|
+
- Use analytics to correlate performance with user behavior
|
|
74
|
+
|
|
75
|
+
## Anti-Patterns
|
|
76
|
+
|
|
77
|
+
- Premature optimization (optimize without data)
|
|
78
|
+
- Over-memoization (adds complexity, minimal gain)
|
|
79
|
+
- Excessive state mutations
|
|
80
|
+
- Not lazy loading anything
|
|
81
|
+
- Ignoring bundle size
|
|
82
|
+
- No caching strategy
|
|
83
|
+
- Optimizing wrong metric (optimizing LCP when FCP is bottleneck)
|
|
84
|
+
|
|
85
|
+
## Performance Checklist
|
|
86
|
+
|
|
87
|
+
After changes:
|
|
88
|
+
- [ ] Measure impact (before/after)
|
|
89
|
+
- [ ] Bundle size acceptable
|
|
90
|
+
- [ ] Core Web Vitals within targets
|
|
91
|
+
- [ ] No regressions in Lighthouse
|
|
92
|
+
- [ ] Images optimized
|
|
93
|
+
- [ ] Cache strategy documented
|
|
94
|
+
|
|
95
|
+
## Related Guidance
|
|
96
|
+
|
|
97
|
+
- `/code-quality` — code patterns affect performance
|
|
98
|
+
- `/logging-observability` — monitoring performance
|
|
99
|
+
- `/testing` — performance regression tests
|