# Event Types Strategy Guide Event types are the foundation of your Trailonix logging strategy. They categorize and organize your log events, making them searchable, filterable, and alertable. Since event types are completely free-form text that you define, establishing a solid naming strategy is crucial for long-term success. ## Understanding Event Types > **📝 Important:** Event types are **completely free text** - you define them! Trailonix doesn't have predefined event types or a management interface. Unlike many logging platforms that force you into predefined categories, Trailonix gives you complete freedom to create event types that match your application's needs. This flexibility is powerful but requires discipline to use effectively. **What are Event Types?** - **Categories** for your log events (e.g., `user_login`, `payment_failed`, `email_sent`) - **Required field** for every log event you send to Trailonix - **Foundation for alerts** - every alert rule starts with an event type - **Key for filtering** and searching your logs - **Completely user-defined** - no predefined list or restrictions ## The Importance of Consistency **Consistency in event types is absolutely critical** for several reasons: ### Alert Reliability If your application sometimes logs `user_login` and sometimes `userLogin`, your alert rules will only catch one variation, potentially missing critical events. ❌ **What happens without consistency:** ``` // Your app logs these different variations: user_login userLogin User_Login USER_LOGIN login_user ``` **Result:** An alert rule for `user_login` will miss 80% of your login events! ✅ **With consistent naming:** ``` // Always use the same format: user_login user_logout user_register ``` **Result:** Your alerts catch 100% of relevant events. ### Effective Filtering and Search Inconsistent event types fragment your data, making it difficult to: - **Find all related events** when troubleshooting - **Create meaningful dashboards** and analytics - **Understand patterns** in your application behavior - **Set up comprehensive monitoring** ### Team Collaboration Multiple developers working on the same application need clear conventions to ensure everyone logs events the same way. ## Choosing a Naming Convention Pick one convention and stick to it across your entire application and team: ### snake_case (Recommended) ``` user_login user_logout payment_started payment_completed payment_failed order_created order_shipped email_sent error_database_connection ``` **Pros:** Easy to read, widely used in backend systems, clear word separation ### camelCase ``` userLogin userLogout paymentStarted paymentCompleted paymentFailed orderCreated orderShipped emailSent errorDatabaseConnection ``` **Pros:** Common in JavaScript/frontend development, compact ### kebab-case ``` user-login user-logout payment-started payment-completed payment-failed order-created order-shipped email-sent error-database-connection ``` **Pros:** URL-friendly, visually distinct, easy to read > **⚠️ Critical:** Whatever convention you choose, **document it for your team** and **enforce it consistently**. Mixed conventions will cause problems with alerts and data analysis. ## Event Type Organization Strategies ### 1. Action-Based Grouping Group events by the action being performed: ``` # User actions user_login user_logout user_register user_password_reset # Payment actions payment_started payment_completed payment_failed payment_refunded # Order actions order_created order_updated order_shipped order_delivered order_cancelled ``` ### 2. System-Based Grouping Group events by the system or component: ``` # Authentication system auth_login_attempt auth_login_success auth_login_failed auth_logout # Payment system payment_charge_created payment_charge_succeeded payment_charge_failed # Notification system notification_email_sent notification_sms_sent notification_push_sent ``` ### 3. Severity-Based Grouping Include severity or type information in the event name: ``` # Errors error_database_timeout error_payment_gateway error_validation_failed # Warnings warning_slow_query warning_high_memory warning_rate_limit_approaching # Info events info_user_created info_backup_completed info_deployment_finished ``` ## Event Type Best Practices ### Be Specific but Concise - ✅ **Good:** `payment_failed` - Clear and specific - ❌ **Bad:** `event` - Too generic - ❌ **Bad:** `payment_processing_failed_due_to_insufficient_funds` - Too verbose ### Use Verbs for Actions - ✅ **Good:** `user_login`, `order_created`, `email_sent` - ❌ **Bad:** `user`, `order`, `email` ### Group Related Events with Prefixes ``` # Payment workflow payment_started payment_processing payment_completed payment_failed # User lifecycle user_registered user_activated user_deactivated user_deleted ``` ### Avoid Special Characters Stick to letters, numbers, and your chosen separator: - ✅ **Good:** `user_login`, `api_request_timeout` - ❌ **Bad:** `user@login`, `api/request/timeout`, `user.login` ### Consider Future Needs Think about how your event types will scale: - Will you need sub-categories? Plan your naming accordingly - Will other teams use these events? Make them self-explanatory - Will you need to aggregate events? Group them logically ## Common Event Type Categories Here are some categories that work well for most applications: ### User Authentication ``` user_login_attempt user_login_success user_login_failed user_logout user_password_reset user_password_changed user_mfa_enabled user_mfa_disabled ``` ### Business Events ``` order_created order_updated order_paid order_shipped order_delivered order_cancelled order_refunded ``` ### Error Tracking ``` error_api_timeout error_database_connection error_payment_gateway error_validation_failed error_permission_denied error_rate_limit_exceeded ``` ### System Events ``` server_started server_stopped deployment_started deployment_completed backup_started backup_completed maintenance_started maintenance_completed ``` ### Integration Events ``` webhook_received webhook_processed api_call_made api_response_received email_sent sms_sent notification_delivered ``` ## Implementation Best Practices ### Use Constants in Your Application Code **Highly recommended:** Define event types as constants in your application to prevent typos and ensure consistency across your codebase. #### JavaScript/TypeScript Example ```javascript // constants/eventTypes.js export const EVENT_TYPES = { // User events USER_LOGIN: 'user_login', USER_LOGOUT: 'user_logout', USER_REGISTER: 'user_register', // Payment events PAYMENT_STARTED: 'payment_started', PAYMENT_COMPLETED: 'payment_completed', PAYMENT_FAILED: 'payment_failed', // Error events ERROR_DATABASE: 'error_database_connection', ERROR_API_TIMEOUT: 'error_api_timeout', ERROR_VALIDATION: 'error_validation_failed' }; // Usage in your code logger.log(EVENT_TYPES.USER_LOGIN, { userId: 'user_123', metadata: { success: true } }); ``` #### C# Example ```csharp // Constants/EventTypes.cs public static class EventTypes { // User events public const string UserLogin = "user_login"; public const string UserLogout = "user_logout"; public const string UserRegister = "user_register"; // Payment events public const string PaymentStarted = "payment_started"; public const string PaymentCompleted = "payment_completed"; public const string PaymentFailed = "payment_failed"; // Error events public const string ErrorDatabase = "error_database_connection"; public const string ErrorApiTimeout = "error_api_timeout"; public const string ErrorValidation = "error_validation_failed"; } // Usage in your code logger.Log(EventTypes.UserLogin, userId: "user_123", metadata: new { success = true }); ``` #### Python Example ```python # constants/event_types.py class EventTypes: # User events USER_LOGIN = "user_login" USER_LOGOUT = "user_logout" USER_REGISTER = "user_register" # Payment events PAYMENT_STARTED = "payment_started" PAYMENT_COMPLETED = "payment_completed" PAYMENT_FAILED = "payment_failed" # Error events ERROR_DATABASE = "error_database_connection" ERROR_API_TIMEOUT = "error_api_timeout" ERROR_VALIDATION = "error_validation_failed" # Usage in your code logger.log(EventTypes.USER_LOGIN, user_id="user_123", metadata={"success": True}) ``` #### PHP Example ```php log(EventTypes::USER_LOGIN, ['userId' => 'user_123', 'metadata' => ['success' => true]]); ``` **Benefits of Using Constants:** - **Prevents typos** that create accidental event type variations - **IDE autocomplete** helps developers use the right event types - **Centralized management** - change event types in one place - **Compile-time checking** (in typed languages) catches incorrect event types - **Team consistency** - everyone uses the same predefined types - **Easier refactoring** when you need to rename event types > **💡 Pro Tip:** Keep your constants file in version control and make it part of your code review process. This ensures all team members use the approved event types. ## Setting Up Your Event Type Strategy ### 1. Audit Your Current Events If you're already logging events, audit what you have: - List all current event types - Identify inconsistencies - Group similar events - Plan standardization ### 2. Create a Team Convention Document your decisions: - **Naming convention** (snake_case, camelCase, etc.) - **Grouping strategy** (action-based, system-based, etc.) - **Common prefixes** and their meanings - **Examples** for each category ### 3. Create a Reference Document Maintain a team reference with: - Approved event types - Examples of good and bad naming - Guidelines for creating new event types - Contact person for questions ### 4. Implement Gradually - Start with new features using the convention - Gradually update existing events during maintenance - Update alert rules as you standardize event types - Monitor for mixed usage and correct it ## Migration and Cleanup ### Standardizing Existing Events If you already have inconsistent event types: 1. **Identify variations** of the same logical event 2. **Choose the standard name** for each event type 3. **Update your application code** to use standard names 4. **Update alert rules** to use new event type names 5. **Monitor both old and new** event types during transition 6. **Remove old logging code** once transition is complete ### Handling Legacy Data - Old logs with inconsistent event types will remain searchable - Create alerts for both old and new event types during migration - Use search filters to find events regardless of naming inconsistencies - Consider the transition period when analyzing historical data ## Team Guidelines and Enforcement ### Code Review Practices - **Review event type naming** in all pull requests - **Check for consistency** with existing conventions - **Ensure constants are used** instead of hardcoded strings - **Suggest improvements** for unclear or inconsistent names - **Maintain a checklist** of event type best practices ### Documentation Requirements - **Document new event types** when they're introduced - **Include examples** of when the event should be logged - **Specify required metadata** for each event type - **Update team reference** regularly ### Monitoring and Maintenance - **Regularly review** event types in your logs - **Identify and fix** inconsistencies quickly - **Update conventions** as your application evolves - **Train new team members** on your event type strategy ## Consequences of Poor Event Type Strategy ### Alert Failures Without consistent event types: - **Missed critical alerts** because events are logged with different names - **False negatives** when monitoring for specific events - **Incomplete coverage** of important application events - **Difficult troubleshooting** when alerts don't fire as expected ### Analysis Problems Inconsistent naming leads to: - **Fragmented data** that's hard to analyze - **Incomplete metrics** and dashboards - **Difficulty identifying trends** across similar events - **Wasted time** searching for variations of the same event ### Team Confusion Poor conventions cause: - **Duplicate event types** for the same logical event - **Confusion** about which event type to use - **Time wasted** debugging logging inconsistencies - **Technical debt** that becomes harder to fix over time ## What's Next? Now that you understand event type strategy, you can: - **[Review the Quick Start Guide](/guides/quickstart)** for practical event type naming examples - **[Set up alerts](/guides/setting-up-alerts)** using your consistent event types - **[Explore integration examples](/examples/integrations)** to see event type strategies in different programming languages - **[Learn about effective logging practices](/guides/logging-best-practices)** to complement your event type strategy --- **🎯 Ready to implement your event type strategy?** Start by auditing your current events and creating a team convention document. Consistency today saves hours of debugging tomorrow!