tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__py3-none-any.whl
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.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2196
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -111
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,478 +1,478 @@
|
|
|
1
|
-
# Logging Strategies
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Logging provides a chronological record of events and activities in a system. Effective logging strategies are essential for debugging, auditing, compliance, and understanding system behavior.
|
|
6
|
-
|
|
7
|
-
## Logging Levels
|
|
8
|
-
|
|
9
|
-
### Standard Levels (RFC 5424)
|
|
10
|
-
|
|
11
|
-
**DEBUG:**
|
|
12
|
-
- Detailed diagnostic information
|
|
13
|
-
- Typically only enabled during development
|
|
14
|
-
- Use for: Variable values, execution flow, detailed state
|
|
15
|
-
|
|
16
|
-
**INFO:**
|
|
17
|
-
- General informational messages
|
|
18
|
-
- Confirms normal operation
|
|
19
|
-
- Use for: Service start/stop, configuration loaded, milestones
|
|
20
|
-
|
|
21
|
-
**WARN:**
|
|
22
|
-
- Warning messages for potentially harmful situations
|
|
23
|
-
- System continues operating normally
|
|
24
|
-
- Use for: Deprecated API usage, slow operations, retry attempts
|
|
25
|
-
|
|
26
|
-
**ERROR:**
|
|
27
|
-
- Error events that may allow application to continue
|
|
28
|
-
- Indicates failure in application component
|
|
29
|
-
- Use for: Failed operations, exceptions caught and handled
|
|
30
|
-
|
|
31
|
-
**FATAL/CRITICAL:**
|
|
32
|
-
- Very severe error events
|
|
33
|
-
- Application may abort
|
|
34
|
-
- Use for: Critical failures, system unavailability
|
|
35
|
-
|
|
36
|
-
### Level Selection Guidelines
|
|
37
|
-
|
|
38
|
-
```python
|
|
39
|
-
import logging
|
|
40
|
-
|
|
41
|
-
logger = logging.getLogger(__name__)
|
|
42
|
-
|
|
43
|
-
# DEBUG: Development and troubleshooting
|
|
44
|
-
logger.debug("Processing user %s with options %s", user_id, options)
|
|
45
|
-
|
|
46
|
-
# INFO: Normal operations
|
|
47
|
-
logger.info("User %s logged in successfully", user_id)
|
|
48
|
-
|
|
49
|
-
# WARN: Unexpected but handled situations
|
|
50
|
-
logger.warning("Failed to send email to %s, will retry", email)
|
|
51
|
-
|
|
52
|
-
# ERROR: Errors that are caught and handled
|
|
53
|
-
logger.error("Failed to process order %s: %s", order_id, error, exc_info=True)
|
|
54
|
-
|
|
55
|
-
# CRITICAL: System-threatening errors
|
|
56
|
-
logger.critical("Database connection pool exhausted", exc_info=True)
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Structured Logging
|
|
60
|
-
|
|
61
|
-
### Why Structured Logging?
|
|
62
|
-
|
|
63
|
-
**Benefits:**
|
|
64
|
-
- Machine-readable (JSON format)
|
|
65
|
-
- Easy to query and filter
|
|
66
|
-
- Supports aggregation and analysis
|
|
67
|
-
- Better for distributed systems
|
|
68
|
-
|
|
69
|
-
**Example:**
|
|
70
|
-
```python
|
|
71
|
-
import json
|
|
72
|
-
import logging
|
|
73
|
-
|
|
74
|
-
class StructuredLogger:
|
|
75
|
-
def __init__(self, name):
|
|
76
|
-
self.logger = logging.getLogger(name)
|
|
77
|
-
self.logger.setLevel(logging.INFO)
|
|
78
|
-
handler = logging.StreamHandler()
|
|
79
|
-
handler.setFormatter(JsonFormatter())
|
|
80
|
-
self.logger.addHandler(handler)
|
|
81
|
-
|
|
82
|
-
def info(self, message, **kwargs):
|
|
83
|
-
self.logger.info(message, extra=kwargs)
|
|
84
|
-
|
|
85
|
-
def error(self, message, **kwargs):
|
|
86
|
-
self.logger.error(message, extra=kwargs)
|
|
87
|
-
|
|
88
|
-
# Usage
|
|
89
|
-
logger = StructuredLogger(__name__)
|
|
90
|
-
logger.info("Order processed",
|
|
91
|
-
order_id="12345",
|
|
92
|
-
user_id="67890",
|
|
93
|
-
amount=99.99,
|
|
94
|
-
currency="USD",
|
|
95
|
-
status="completed"
|
|
96
|
-
)
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### JSON Log Format
|
|
100
|
-
|
|
101
|
-
**Standard Fields:**
|
|
102
|
-
```json
|
|
103
|
-
{
|
|
104
|
-
"timestamp": "2026-01-15T10:30:45.123Z",
|
|
105
|
-
"level": "INFO",
|
|
106
|
-
"service": "order-service",
|
|
107
|
-
"message": "Order processed",
|
|
108
|
-
"order_id": "12345",
|
|
109
|
-
"user_id": "67890",
|
|
110
|
-
"duration_ms": 245,
|
|
111
|
-
"trace_id": "abc123",
|
|
112
|
-
"span_id": "def456"
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
## Context and Correlation
|
|
117
|
-
|
|
118
|
-
### Request Correlation
|
|
119
|
-
|
|
120
|
-
**Add correlation IDs to all logs:**
|
|
121
|
-
```python
|
|
122
|
-
import logging
|
|
123
|
-
from contextvars import ContextVar
|
|
124
|
-
|
|
125
|
-
request_id_var: ContextVar[str] = ContextVar('request_id')
|
|
126
|
-
|
|
127
|
-
class CorrelationFilter(logging.Filter):
|
|
128
|
-
def filter(self, record):
|
|
129
|
-
record.request_id = request_id_var.get(None)
|
|
130
|
-
record.trace_id = get_trace_id() # From OpenTelemetry
|
|
131
|
-
return True
|
|
132
|
-
|
|
133
|
-
logger.addFilter(CorrelationFilter())
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Contextual Logging
|
|
137
|
-
|
|
138
|
-
**Use context managers for operation scoping:**
|
|
139
|
-
```python
|
|
140
|
-
import logging
|
|
141
|
-
from contextlib import contextmanager
|
|
142
|
-
|
|
143
|
-
logger = logging.getLogger(__name__)
|
|
144
|
-
|
|
145
|
-
@contextmanager
|
|
146
|
-
def log_operation(operation_name, **context):
|
|
147
|
-
start_time = time.time()
|
|
148
|
-
logger.info(f"Starting {operation_name}", extra=context)
|
|
149
|
-
try:
|
|
150
|
-
yield
|
|
151
|
-
duration = time.time() - start_time
|
|
152
|
-
logger.info(f"Completed {operation_name}",
|
|
153
|
-
extra={**context, "duration_ms": duration * 1000})
|
|
154
|
-
except Exception as e:
|
|
155
|
-
duration = time.time() - start_time
|
|
156
|
-
logger.error(f"Failed {operation_name}",
|
|
157
|
-
extra={**context, "duration_ms": duration * 1000},
|
|
158
|
-
exc_info=True)
|
|
159
|
-
raise
|
|
160
|
-
|
|
161
|
-
# Usage
|
|
162
|
-
with log_operation("process_order", order_id="12345", user_id="67890"):
|
|
163
|
-
# Process order
|
|
164
|
-
pass
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## Log Aggregation and Storage
|
|
168
|
-
|
|
169
|
-
### Centralized Logging
|
|
170
|
-
|
|
171
|
-
**Why Centralize:**
|
|
172
|
-
- Distributed systems span multiple services
|
|
173
|
-
- Containers/instances are ephemeral
|
|
174
|
-
- Need unified view across system
|
|
175
|
-
- Enable search and correlation
|
|
176
|
-
|
|
177
|
-
**Architecture:**
|
|
178
|
-
```
|
|
179
|
-
Services → Log Shippers → Log Aggregator → Storage → Search/Analysis
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Log Shippers
|
|
183
|
-
|
|
184
|
-
**Fluentd:**
|
|
185
|
-
- Open-source log collector
|
|
186
|
-
- Plugin ecosystem
|
|
187
|
-
- JSON transformation
|
|
188
|
-
|
|
189
|
-
**Fluent Bit:**
|
|
190
|
-
- Lightweight log processor
|
|
191
|
-
- Good for containers
|
|
192
|
-
- Lower resource usage
|
|
193
|
-
|
|
194
|
-
**Filebeat:**
|
|
195
|
-
- Elastic's log shipper
|
|
196
|
-
- Lightweight
|
|
197
|
-
- Integrates with Elasticsearch
|
|
198
|
-
|
|
199
|
-
**Vector:**
|
|
200
|
-
- High-performance observability pipeline
|
|
201
|
-
- Rust-based
|
|
202
|
-
- Transformations and routing
|
|
203
|
-
|
|
204
|
-
### Storage Solutions
|
|
205
|
-
|
|
206
|
-
**Elasticsearch + Logstash + Kibana (ELK):**
|
|
207
|
-
- Full-text search
|
|
208
|
-
- Powerful querying
|
|
209
|
-
- Visual dashboards
|
|
210
|
-
|
|
211
|
-
**Loki:**
|
|
212
|
-
- Log aggregation system (Grafana Labs)
|
|
213
|
-
- Label-based indexing
|
|
214
|
-
- Prometheus-compatible queries
|
|
215
|
-
|
|
216
|
-
**Cloud Logging:**
|
|
217
|
-
- AWS CloudWatch Logs
|
|
218
|
-
- Google Cloud Logging
|
|
219
|
-
- Azure Monitor Logs
|
|
220
|
-
|
|
221
|
-
## Log Retention and Rotation
|
|
222
|
-
|
|
223
|
-
### Retention Policies
|
|
224
|
-
|
|
225
|
-
**Development:**
|
|
226
|
-
- 7-14 days retention
|
|
227
|
-
- Debug logs enabled
|
|
228
|
-
|
|
229
|
-
**Production:**
|
|
230
|
-
- 30-90 days for application logs
|
|
231
|
-
- 1+ year for audit logs
|
|
232
|
-
- Compliance requirements may vary
|
|
233
|
-
|
|
234
|
-
### Log Rotation
|
|
235
|
-
|
|
236
|
-
**Size-based Rotation:**
|
|
237
|
-
```python
|
|
238
|
-
from logging.handlers import RotatingFileHandler
|
|
239
|
-
|
|
240
|
-
handler = RotatingFileHandler(
|
|
241
|
-
'app.log',
|
|
242
|
-
maxBytes=10*1024*1024, # 10 MB
|
|
243
|
-
backupCount=5
|
|
244
|
-
)
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
**Time-based Rotation:**
|
|
248
|
-
```python
|
|
249
|
-
from logging.handlers import TimedRotatingFileHandler
|
|
250
|
-
|
|
251
|
-
handler = TimedRotatingFileHandler(
|
|
252
|
-
'app.log',
|
|
253
|
-
when='midnight',
|
|
254
|
-
interval=1,
|
|
255
|
-
backupCount=30
|
|
256
|
-
)
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
## Security and Privacy
|
|
260
|
-
|
|
261
|
-
### Sensitive Data Handling
|
|
262
|
-
|
|
263
|
-
**Don't Log:**
|
|
264
|
-
- Passwords and tokens
|
|
265
|
-
- Credit card numbers
|
|
266
|
-
- Social security numbers
|
|
267
|
-
- Full request/response bodies (may contain PII)
|
|
268
|
-
|
|
269
|
-
**Redaction Patterns:**
|
|
270
|
-
```python
|
|
271
|
-
import re
|
|
272
|
-
|
|
273
|
-
def redact_sensitive_data(message: str) -> str:
|
|
274
|
-
# Redact credit cards
|
|
275
|
-
message = re.sub(r'\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b',
|
|
276
|
-
'[REDACTED]', message)
|
|
277
|
-
# Redact emails
|
|
278
|
-
message = re.sub(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',
|
|
279
|
-
'[EMAIL_REDACTED]', message)
|
|
280
|
-
return message
|
|
281
|
-
|
|
282
|
-
logger.info(f"User login: {redact_sensitive_data(user_email)}")
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
### Audit Logging
|
|
286
|
-
|
|
287
|
-
**What to Audit:**
|
|
288
|
-
- Authentication and authorization events
|
|
289
|
-
- Data access and modifications
|
|
290
|
-
- Configuration changes
|
|
291
|
-
- Administrative actions
|
|
292
|
-
|
|
293
|
-
**Audit Log Requirements:**
|
|
294
|
-
- Immutable (append-only)
|
|
295
|
-
- Long retention (compliance)
|
|
296
|
-
- Tamper-evident
|
|
297
|
-
- Complete context
|
|
298
|
-
|
|
299
|
-
```python
|
|
300
|
-
def audit_log(action: str, user_id: str, resource: str, **details):
|
|
301
|
-
logger.info("AUDIT",
|
|
302
|
-
action=action,
|
|
303
|
-
user_id=user_id,
|
|
304
|
-
resource=resource,
|
|
305
|
-
timestamp=datetime.utcnow().isoformat(),
|
|
306
|
-
**details
|
|
307
|
-
)
|
|
308
|
-
|
|
309
|
-
# Usage
|
|
310
|
-
audit_log("CREATE", user_id="admin", resource="user", target_user_id="12345")
|
|
311
|
-
audit_log("DELETE", user_id="admin", resource="order", order_id="67890")
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
## Performance Considerations
|
|
315
|
-
|
|
316
|
-
### Async Logging
|
|
317
|
-
|
|
318
|
-
**Use Async Handlers:**
|
|
319
|
-
```python
|
|
320
|
-
from logging.handlers import QueueHandler, QueueListener
|
|
321
|
-
import queue
|
|
322
|
-
|
|
323
|
-
log_queue = queue.Queue(-1)
|
|
324
|
-
queue_handler = QueueHandler(log_queue)
|
|
325
|
-
stream_handler = logging.StreamHandler()
|
|
326
|
-
listener = QueueListener(log_queue, stream_handler)
|
|
327
|
-
listener.start()
|
|
328
|
-
|
|
329
|
-
logger.addHandler(queue_handler)
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
### Sampling
|
|
333
|
-
|
|
334
|
-
**Sample debug logs in production:**
|
|
335
|
-
```python
|
|
336
|
-
import random
|
|
337
|
-
|
|
338
|
-
def sampled_debug(message, sample_rate=0.1):
|
|
339
|
-
if random.random() < sample_rate:
|
|
340
|
-
logger.debug(message)
|
|
341
|
-
|
|
342
|
-
# Use for high-volume debug logs
|
|
343
|
-
sampled_debug("Processing item", sample_rate=0.01)
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
### Conditional Logging
|
|
347
|
-
|
|
348
|
-
**Avoid expensive string formatting:**
|
|
349
|
-
```python
|
|
350
|
-
# Bad: Always formats string
|
|
351
|
-
logger.debug(f"Processing user {user_id} with complex data {expensive_operation()}")
|
|
352
|
-
|
|
353
|
-
# Good: Only formats if level enabled
|
|
354
|
-
if logger.isEnabledFor(logging.DEBUG):
|
|
355
|
-
logger.debug(f"Processing user {user_id} with complex data {expensive_operation()}")
|
|
356
|
-
|
|
357
|
-
# Better: Lazy formatting
|
|
358
|
-
logger.debug("Processing user %s with complex data %s",
|
|
359
|
-
user_id, expensive_operation())
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
## Best Practices
|
|
363
|
-
|
|
364
|
-
### 1. Meaningful Messages
|
|
365
|
-
|
|
366
|
-
```python
|
|
367
|
-
# Bad: Vague message
|
|
368
|
-
logger.error("Error occurred")
|
|
369
|
-
|
|
370
|
-
# Good: Specific with context
|
|
371
|
-
logger.error("Failed to process payment",
|
|
372
|
-
order_id=order_id,
|
|
373
|
-
payment_method=payment_method,
|
|
374
|
-
error_code=error.code,
|
|
375
|
-
exc_info=True
|
|
376
|
-
)
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
### 2. Consistent Format
|
|
380
|
-
|
|
381
|
-
- Use structured logging
|
|
382
|
-
- Include timestamps (UTC)
|
|
383
|
-
- Add correlation IDs
|
|
384
|
-
- Standard field names
|
|
385
|
-
|
|
386
|
-
### 3. Appropriate Levels
|
|
387
|
-
|
|
388
|
-
- DEBUG: Development only
|
|
389
|
-
- INFO: Normal operations
|
|
390
|
-
- WARN: Handled issues
|
|
391
|
-
- ERROR: Caught exceptions
|
|
392
|
-
- CRITICAL: System failures
|
|
393
|
-
|
|
394
|
-
### 4. Include Context
|
|
395
|
-
|
|
396
|
-
- Request IDs
|
|
397
|
-
- User IDs
|
|
398
|
-
- Resource IDs
|
|
399
|
-
- Operation names
|
|
400
|
-
- Duration metrics
|
|
401
|
-
|
|
402
|
-
### 5. Error Logging
|
|
403
|
-
|
|
404
|
-
```python
|
|
405
|
-
try:
|
|
406
|
-
risky_operation()
|
|
407
|
-
except Exception as e:
|
|
408
|
-
logger.error("Operation failed",
|
|
409
|
-
operation="risky_operation",
|
|
410
|
-
error_type=type(e).__name__,
|
|
411
|
-
error_message=str(e),
|
|
412
|
-
exc_info=True # Include stack trace
|
|
413
|
-
)
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
### 6. Don't Log Too Much
|
|
417
|
-
|
|
418
|
-
- Avoid logging in tight loops
|
|
419
|
-
- Don't log every iteration
|
|
420
|
-
- Use appropriate levels
|
|
421
|
-
- Sample when necessary
|
|
422
|
-
|
|
423
|
-
### 7. Don't Log Too Little
|
|
424
|
-
|
|
425
|
-
- Log entry/exit of important operations
|
|
426
|
-
- Log state changes
|
|
427
|
-
- Log external calls
|
|
428
|
-
- Log errors with context
|
|
429
|
-
|
|
430
|
-
## Tools and Libraries
|
|
431
|
-
|
|
432
|
-
### Python
|
|
433
|
-
|
|
434
|
-
**structlog:**
|
|
435
|
-
- Structured logging library
|
|
436
|
-
- Context propagation
|
|
437
|
-
- Multiple formatters
|
|
438
|
-
|
|
439
|
-
**python-json-logger:**
|
|
440
|
-
- JSON formatter for standard logging
|
|
441
|
-
- Simple integration
|
|
442
|
-
|
|
443
|
-
### JavaScript/Node.js
|
|
444
|
-
|
|
445
|
-
**pino:**
|
|
446
|
-
- Fast JSON logger
|
|
447
|
-
- Child loggers
|
|
448
|
-
- Levels
|
|
449
|
-
|
|
450
|
-
**winston:**
|
|
451
|
-
- Flexible logging library
|
|
452
|
-
- Multiple transports
|
|
453
|
-
- Formatting
|
|
454
|
-
|
|
455
|
-
### Java
|
|
456
|
-
|
|
457
|
-
**Logback:**
|
|
458
|
-
- Successor to Log4j
|
|
459
|
-
- Flexible configuration
|
|
460
|
-
- Multiple appenders
|
|
461
|
-
|
|
462
|
-
**Log4j2:**
|
|
463
|
-
- High performance
|
|
464
|
-
- Async logging
|
|
465
|
-
- Plugin architecture
|
|
466
|
-
|
|
467
|
-
## Summary
|
|
468
|
-
|
|
469
|
-
Effective logging requires:
|
|
470
|
-
1. **Structured format** for machine readability
|
|
471
|
-
2. **Appropriate levels** for different scenarios
|
|
472
|
-
3. **Context inclusion** (IDs, timestamps, correlation)
|
|
473
|
-
4. **Centralized aggregation** for distributed systems
|
|
474
|
-
5. **Security considerations** (redact sensitive data)
|
|
475
|
-
6. **Performance awareness** (async, sampling, conditional)
|
|
476
|
-
7. **Retention policies** based on requirements
|
|
477
|
-
8. **Consistent patterns** across services
|
|
478
|
-
|
|
1
|
+
# Logging Strategies
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Logging provides a chronological record of events and activities in a system. Effective logging strategies are essential for debugging, auditing, compliance, and understanding system behavior.
|
|
6
|
+
|
|
7
|
+
## Logging Levels
|
|
8
|
+
|
|
9
|
+
### Standard Levels (RFC 5424)
|
|
10
|
+
|
|
11
|
+
**DEBUG:**
|
|
12
|
+
- Detailed diagnostic information
|
|
13
|
+
- Typically only enabled during development
|
|
14
|
+
- Use for: Variable values, execution flow, detailed state
|
|
15
|
+
|
|
16
|
+
**INFO:**
|
|
17
|
+
- General informational messages
|
|
18
|
+
- Confirms normal operation
|
|
19
|
+
- Use for: Service start/stop, configuration loaded, milestones
|
|
20
|
+
|
|
21
|
+
**WARN:**
|
|
22
|
+
- Warning messages for potentially harmful situations
|
|
23
|
+
- System continues operating normally
|
|
24
|
+
- Use for: Deprecated API usage, slow operations, retry attempts
|
|
25
|
+
|
|
26
|
+
**ERROR:**
|
|
27
|
+
- Error events that may allow application to continue
|
|
28
|
+
- Indicates failure in application component
|
|
29
|
+
- Use for: Failed operations, exceptions caught and handled
|
|
30
|
+
|
|
31
|
+
**FATAL/CRITICAL:**
|
|
32
|
+
- Very severe error events
|
|
33
|
+
- Application may abort
|
|
34
|
+
- Use for: Critical failures, system unavailability
|
|
35
|
+
|
|
36
|
+
### Level Selection Guidelines
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
import logging
|
|
40
|
+
|
|
41
|
+
logger = logging.getLogger(__name__)
|
|
42
|
+
|
|
43
|
+
# DEBUG: Development and troubleshooting
|
|
44
|
+
logger.debug("Processing user %s with options %s", user_id, options)
|
|
45
|
+
|
|
46
|
+
# INFO: Normal operations
|
|
47
|
+
logger.info("User %s logged in successfully", user_id)
|
|
48
|
+
|
|
49
|
+
# WARN: Unexpected but handled situations
|
|
50
|
+
logger.warning("Failed to send email to %s, will retry", email)
|
|
51
|
+
|
|
52
|
+
# ERROR: Errors that are caught and handled
|
|
53
|
+
logger.error("Failed to process order %s: %s", order_id, error, exc_info=True)
|
|
54
|
+
|
|
55
|
+
# CRITICAL: System-threatening errors
|
|
56
|
+
logger.critical("Database connection pool exhausted", exc_info=True)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Structured Logging
|
|
60
|
+
|
|
61
|
+
### Why Structured Logging?
|
|
62
|
+
|
|
63
|
+
**Benefits:**
|
|
64
|
+
- Machine-readable (JSON format)
|
|
65
|
+
- Easy to query and filter
|
|
66
|
+
- Supports aggregation and analysis
|
|
67
|
+
- Better for distributed systems
|
|
68
|
+
|
|
69
|
+
**Example:**
|
|
70
|
+
```python
|
|
71
|
+
import json
|
|
72
|
+
import logging
|
|
73
|
+
|
|
74
|
+
class StructuredLogger:
|
|
75
|
+
def __init__(self, name):
|
|
76
|
+
self.logger = logging.getLogger(name)
|
|
77
|
+
self.logger.setLevel(logging.INFO)
|
|
78
|
+
handler = logging.StreamHandler()
|
|
79
|
+
handler.setFormatter(JsonFormatter())
|
|
80
|
+
self.logger.addHandler(handler)
|
|
81
|
+
|
|
82
|
+
def info(self, message, **kwargs):
|
|
83
|
+
self.logger.info(message, extra=kwargs)
|
|
84
|
+
|
|
85
|
+
def error(self, message, **kwargs):
|
|
86
|
+
self.logger.error(message, extra=kwargs)
|
|
87
|
+
|
|
88
|
+
# Usage
|
|
89
|
+
logger = StructuredLogger(__name__)
|
|
90
|
+
logger.info("Order processed",
|
|
91
|
+
order_id="12345",
|
|
92
|
+
user_id="67890",
|
|
93
|
+
amount=99.99,
|
|
94
|
+
currency="USD",
|
|
95
|
+
status="completed"
|
|
96
|
+
)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### JSON Log Format
|
|
100
|
+
|
|
101
|
+
**Standard Fields:**
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"timestamp": "2026-01-15T10:30:45.123Z",
|
|
105
|
+
"level": "INFO",
|
|
106
|
+
"service": "order-service",
|
|
107
|
+
"message": "Order processed",
|
|
108
|
+
"order_id": "12345",
|
|
109
|
+
"user_id": "67890",
|
|
110
|
+
"duration_ms": 245,
|
|
111
|
+
"trace_id": "abc123",
|
|
112
|
+
"span_id": "def456"
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Context and Correlation
|
|
117
|
+
|
|
118
|
+
### Request Correlation
|
|
119
|
+
|
|
120
|
+
**Add correlation IDs to all logs:**
|
|
121
|
+
```python
|
|
122
|
+
import logging
|
|
123
|
+
from contextvars import ContextVar
|
|
124
|
+
|
|
125
|
+
request_id_var: ContextVar[str] = ContextVar('request_id')
|
|
126
|
+
|
|
127
|
+
class CorrelationFilter(logging.Filter):
|
|
128
|
+
def filter(self, record):
|
|
129
|
+
record.request_id = request_id_var.get(None)
|
|
130
|
+
record.trace_id = get_trace_id() # From OpenTelemetry
|
|
131
|
+
return True
|
|
132
|
+
|
|
133
|
+
logger.addFilter(CorrelationFilter())
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Contextual Logging
|
|
137
|
+
|
|
138
|
+
**Use context managers for operation scoping:**
|
|
139
|
+
```python
|
|
140
|
+
import logging
|
|
141
|
+
from contextlib import contextmanager
|
|
142
|
+
|
|
143
|
+
logger = logging.getLogger(__name__)
|
|
144
|
+
|
|
145
|
+
@contextmanager
|
|
146
|
+
def log_operation(operation_name, **context):
|
|
147
|
+
start_time = time.time()
|
|
148
|
+
logger.info(f"Starting {operation_name}", extra=context)
|
|
149
|
+
try:
|
|
150
|
+
yield
|
|
151
|
+
duration = time.time() - start_time
|
|
152
|
+
logger.info(f"Completed {operation_name}",
|
|
153
|
+
extra={**context, "duration_ms": duration * 1000})
|
|
154
|
+
except Exception as e:
|
|
155
|
+
duration = time.time() - start_time
|
|
156
|
+
logger.error(f"Failed {operation_name}",
|
|
157
|
+
extra={**context, "duration_ms": duration * 1000},
|
|
158
|
+
exc_info=True)
|
|
159
|
+
raise
|
|
160
|
+
|
|
161
|
+
# Usage
|
|
162
|
+
with log_operation("process_order", order_id="12345", user_id="67890"):
|
|
163
|
+
# Process order
|
|
164
|
+
pass
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Log Aggregation and Storage
|
|
168
|
+
|
|
169
|
+
### Centralized Logging
|
|
170
|
+
|
|
171
|
+
**Why Centralize:**
|
|
172
|
+
- Distributed systems span multiple services
|
|
173
|
+
- Containers/instances are ephemeral
|
|
174
|
+
- Need unified view across system
|
|
175
|
+
- Enable search and correlation
|
|
176
|
+
|
|
177
|
+
**Architecture:**
|
|
178
|
+
```
|
|
179
|
+
Services → Log Shippers → Log Aggregator → Storage → Search/Analysis
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Log Shippers
|
|
183
|
+
|
|
184
|
+
**Fluentd:**
|
|
185
|
+
- Open-source log collector
|
|
186
|
+
- Plugin ecosystem
|
|
187
|
+
- JSON transformation
|
|
188
|
+
|
|
189
|
+
**Fluent Bit:**
|
|
190
|
+
- Lightweight log processor
|
|
191
|
+
- Good for containers
|
|
192
|
+
- Lower resource usage
|
|
193
|
+
|
|
194
|
+
**Filebeat:**
|
|
195
|
+
- Elastic's log shipper
|
|
196
|
+
- Lightweight
|
|
197
|
+
- Integrates with Elasticsearch
|
|
198
|
+
|
|
199
|
+
**Vector:**
|
|
200
|
+
- High-performance observability pipeline
|
|
201
|
+
- Rust-based
|
|
202
|
+
- Transformations and routing
|
|
203
|
+
|
|
204
|
+
### Storage Solutions
|
|
205
|
+
|
|
206
|
+
**Elasticsearch + Logstash + Kibana (ELK):**
|
|
207
|
+
- Full-text search
|
|
208
|
+
- Powerful querying
|
|
209
|
+
- Visual dashboards
|
|
210
|
+
|
|
211
|
+
**Loki:**
|
|
212
|
+
- Log aggregation system (Grafana Labs)
|
|
213
|
+
- Label-based indexing
|
|
214
|
+
- Prometheus-compatible queries
|
|
215
|
+
|
|
216
|
+
**Cloud Logging:**
|
|
217
|
+
- AWS CloudWatch Logs
|
|
218
|
+
- Google Cloud Logging
|
|
219
|
+
- Azure Monitor Logs
|
|
220
|
+
|
|
221
|
+
## Log Retention and Rotation
|
|
222
|
+
|
|
223
|
+
### Retention Policies
|
|
224
|
+
|
|
225
|
+
**Development:**
|
|
226
|
+
- 7-14 days retention
|
|
227
|
+
- Debug logs enabled
|
|
228
|
+
|
|
229
|
+
**Production:**
|
|
230
|
+
- 30-90 days for application logs
|
|
231
|
+
- 1+ year for audit logs
|
|
232
|
+
- Compliance requirements may vary
|
|
233
|
+
|
|
234
|
+
### Log Rotation
|
|
235
|
+
|
|
236
|
+
**Size-based Rotation:**
|
|
237
|
+
```python
|
|
238
|
+
from logging.handlers import RotatingFileHandler
|
|
239
|
+
|
|
240
|
+
handler = RotatingFileHandler(
|
|
241
|
+
'app.log',
|
|
242
|
+
maxBytes=10*1024*1024, # 10 MB
|
|
243
|
+
backupCount=5
|
|
244
|
+
)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Time-based Rotation:**
|
|
248
|
+
```python
|
|
249
|
+
from logging.handlers import TimedRotatingFileHandler
|
|
250
|
+
|
|
251
|
+
handler = TimedRotatingFileHandler(
|
|
252
|
+
'app.log',
|
|
253
|
+
when='midnight',
|
|
254
|
+
interval=1,
|
|
255
|
+
backupCount=30
|
|
256
|
+
)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Security and Privacy
|
|
260
|
+
|
|
261
|
+
### Sensitive Data Handling
|
|
262
|
+
|
|
263
|
+
**Don't Log:**
|
|
264
|
+
- Passwords and tokens
|
|
265
|
+
- Credit card numbers
|
|
266
|
+
- Social security numbers
|
|
267
|
+
- Full request/response bodies (may contain PII)
|
|
268
|
+
|
|
269
|
+
**Redaction Patterns:**
|
|
270
|
+
```python
|
|
271
|
+
import re
|
|
272
|
+
|
|
273
|
+
def redact_sensitive_data(message: str) -> str:
|
|
274
|
+
# Redact credit cards
|
|
275
|
+
message = re.sub(r'\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b',
|
|
276
|
+
'[REDACTED]', message)
|
|
277
|
+
# Redact emails
|
|
278
|
+
message = re.sub(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',
|
|
279
|
+
'[EMAIL_REDACTED]', message)
|
|
280
|
+
return message
|
|
281
|
+
|
|
282
|
+
logger.info(f"User login: {redact_sensitive_data(user_email)}")
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Audit Logging
|
|
286
|
+
|
|
287
|
+
**What to Audit:**
|
|
288
|
+
- Authentication and authorization events
|
|
289
|
+
- Data access and modifications
|
|
290
|
+
- Configuration changes
|
|
291
|
+
- Administrative actions
|
|
292
|
+
|
|
293
|
+
**Audit Log Requirements:**
|
|
294
|
+
- Immutable (append-only)
|
|
295
|
+
- Long retention (compliance)
|
|
296
|
+
- Tamper-evident
|
|
297
|
+
- Complete context
|
|
298
|
+
|
|
299
|
+
```python
|
|
300
|
+
def audit_log(action: str, user_id: str, resource: str, **details):
|
|
301
|
+
logger.info("AUDIT",
|
|
302
|
+
action=action,
|
|
303
|
+
user_id=user_id,
|
|
304
|
+
resource=resource,
|
|
305
|
+
timestamp=datetime.utcnow().isoformat(),
|
|
306
|
+
**details
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
# Usage
|
|
310
|
+
audit_log("CREATE", user_id="admin", resource="user", target_user_id="12345")
|
|
311
|
+
audit_log("DELETE", user_id="admin", resource="order", order_id="67890")
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Performance Considerations
|
|
315
|
+
|
|
316
|
+
### Async Logging
|
|
317
|
+
|
|
318
|
+
**Use Async Handlers:**
|
|
319
|
+
```python
|
|
320
|
+
from logging.handlers import QueueHandler, QueueListener
|
|
321
|
+
import queue
|
|
322
|
+
|
|
323
|
+
log_queue = queue.Queue(-1)
|
|
324
|
+
queue_handler = QueueHandler(log_queue)
|
|
325
|
+
stream_handler = logging.StreamHandler()
|
|
326
|
+
listener = QueueListener(log_queue, stream_handler)
|
|
327
|
+
listener.start()
|
|
328
|
+
|
|
329
|
+
logger.addHandler(queue_handler)
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Sampling
|
|
333
|
+
|
|
334
|
+
**Sample debug logs in production:**
|
|
335
|
+
```python
|
|
336
|
+
import random
|
|
337
|
+
|
|
338
|
+
def sampled_debug(message, sample_rate=0.1):
|
|
339
|
+
if random.random() < sample_rate:
|
|
340
|
+
logger.debug(message)
|
|
341
|
+
|
|
342
|
+
# Use for high-volume debug logs
|
|
343
|
+
sampled_debug("Processing item", sample_rate=0.01)
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### Conditional Logging
|
|
347
|
+
|
|
348
|
+
**Avoid expensive string formatting:**
|
|
349
|
+
```python
|
|
350
|
+
# Bad: Always formats string
|
|
351
|
+
logger.debug(f"Processing user {user_id} with complex data {expensive_operation()}")
|
|
352
|
+
|
|
353
|
+
# Good: Only formats if level enabled
|
|
354
|
+
if logger.isEnabledFor(logging.DEBUG):
|
|
355
|
+
logger.debug(f"Processing user {user_id} with complex data {expensive_operation()}")
|
|
356
|
+
|
|
357
|
+
# Better: Lazy formatting
|
|
358
|
+
logger.debug("Processing user %s with complex data %s",
|
|
359
|
+
user_id, expensive_operation())
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## Best Practices
|
|
363
|
+
|
|
364
|
+
### 1. Meaningful Messages
|
|
365
|
+
|
|
366
|
+
```python
|
|
367
|
+
# Bad: Vague message
|
|
368
|
+
logger.error("Error occurred")
|
|
369
|
+
|
|
370
|
+
# Good: Specific with context
|
|
371
|
+
logger.error("Failed to process payment",
|
|
372
|
+
order_id=order_id,
|
|
373
|
+
payment_method=payment_method,
|
|
374
|
+
error_code=error.code,
|
|
375
|
+
exc_info=True
|
|
376
|
+
)
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### 2. Consistent Format
|
|
380
|
+
|
|
381
|
+
- Use structured logging
|
|
382
|
+
- Include timestamps (UTC)
|
|
383
|
+
- Add correlation IDs
|
|
384
|
+
- Standard field names
|
|
385
|
+
|
|
386
|
+
### 3. Appropriate Levels
|
|
387
|
+
|
|
388
|
+
- DEBUG: Development only
|
|
389
|
+
- INFO: Normal operations
|
|
390
|
+
- WARN: Handled issues
|
|
391
|
+
- ERROR: Caught exceptions
|
|
392
|
+
- CRITICAL: System failures
|
|
393
|
+
|
|
394
|
+
### 4. Include Context
|
|
395
|
+
|
|
396
|
+
- Request IDs
|
|
397
|
+
- User IDs
|
|
398
|
+
- Resource IDs
|
|
399
|
+
- Operation names
|
|
400
|
+
- Duration metrics
|
|
401
|
+
|
|
402
|
+
### 5. Error Logging
|
|
403
|
+
|
|
404
|
+
```python
|
|
405
|
+
try:
|
|
406
|
+
risky_operation()
|
|
407
|
+
except Exception as e:
|
|
408
|
+
logger.error("Operation failed",
|
|
409
|
+
operation="risky_operation",
|
|
410
|
+
error_type=type(e).__name__,
|
|
411
|
+
error_message=str(e),
|
|
412
|
+
exc_info=True # Include stack trace
|
|
413
|
+
)
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### 6. Don't Log Too Much
|
|
417
|
+
|
|
418
|
+
- Avoid logging in tight loops
|
|
419
|
+
- Don't log every iteration
|
|
420
|
+
- Use appropriate levels
|
|
421
|
+
- Sample when necessary
|
|
422
|
+
|
|
423
|
+
### 7. Don't Log Too Little
|
|
424
|
+
|
|
425
|
+
- Log entry/exit of important operations
|
|
426
|
+
- Log state changes
|
|
427
|
+
- Log external calls
|
|
428
|
+
- Log errors with context
|
|
429
|
+
|
|
430
|
+
## Tools and Libraries
|
|
431
|
+
|
|
432
|
+
### Python
|
|
433
|
+
|
|
434
|
+
**structlog:**
|
|
435
|
+
- Structured logging library
|
|
436
|
+
- Context propagation
|
|
437
|
+
- Multiple formatters
|
|
438
|
+
|
|
439
|
+
**python-json-logger:**
|
|
440
|
+
- JSON formatter for standard logging
|
|
441
|
+
- Simple integration
|
|
442
|
+
|
|
443
|
+
### JavaScript/Node.js
|
|
444
|
+
|
|
445
|
+
**pino:**
|
|
446
|
+
- Fast JSON logger
|
|
447
|
+
- Child loggers
|
|
448
|
+
- Levels
|
|
449
|
+
|
|
450
|
+
**winston:**
|
|
451
|
+
- Flexible logging library
|
|
452
|
+
- Multiple transports
|
|
453
|
+
- Formatting
|
|
454
|
+
|
|
455
|
+
### Java
|
|
456
|
+
|
|
457
|
+
**Logback:**
|
|
458
|
+
- Successor to Log4j
|
|
459
|
+
- Flexible configuration
|
|
460
|
+
- Multiple appenders
|
|
461
|
+
|
|
462
|
+
**Log4j2:**
|
|
463
|
+
- High performance
|
|
464
|
+
- Async logging
|
|
465
|
+
- Plugin architecture
|
|
466
|
+
|
|
467
|
+
## Summary
|
|
468
|
+
|
|
469
|
+
Effective logging requires:
|
|
470
|
+
1. **Structured format** for machine readability
|
|
471
|
+
2. **Appropriate levels** for different scenarios
|
|
472
|
+
3. **Context inclusion** (IDs, timestamps, correlation)
|
|
473
|
+
4. **Centralized aggregation** for distributed systems
|
|
474
|
+
5. **Security considerations** (redact sensitive data)
|
|
475
|
+
6. **Performance awareness** (async, sampling, conditional)
|
|
476
|
+
7. **Retention policies** based on requirements
|
|
477
|
+
8. **Consistent patterns** across services
|
|
478
|
+
|