Appfarm Documentation
Getting startedDocumentationCommunityAppfarm Create
  • Overview
  • Getting Started
    • What is Appfarm?
    • Key concepts
    • Quickstart
      • Speed intro
      • Step-by-step guide
    • Appfarm Showroom
    • FAQ
  • Appcademy
    • Learning paths
    • Appfarm Fundamentals
      • Intro Course
        • 1. Intro to No-Code and Appfarm
        • 2. Navigation in Appfarm Create
        • 3. What is Apps?
        • 4. Intro to UI Editor
        • 5. Data Model
        • 6. App Data
        • 7. Actions
        • 8. Tips and Tricks
        • 9. Intro to practical walkthrough
        • 10. Create a details view of a Project
        • 11. Create a Custom List
        • 12. Swipe and Delete
        • 13. Functionality for simple Create of Data
        • 14. Upload and Download Photos
        • 15. Input Dialog with Validation and Save
        • 16. Dashboard
        • 17. Summary
        • Quiz
      • User Interface Fundamentals
        • Container - Sectioning, Styling and Repeating
        • Conditional Styles
        • Motions
        • Responsive Design
        • Step-by-step workflow
        • Featured UI Components
        • Quiz
      • App Data Fundamentals
        • Data Source Filtering
        • App Variables and Runtime Properties
        • URL Parameters
        • Quiz
      • Actions & Logic Fundamentals
        • Event Handlers
        • Featured Action Nodes
        • Context Parameters
        • Quiz
      • Services Fundamentals
        • Introduction to Services
        • Setting up a Service
        • Scheduling a Service
      • Integration Fundamentals
        • The web request action node
        • Fetch data from an endpoint
        • Map data to a data source
        • Modify the response
        • Nested data mapping
        • Path parameters
        • Authentication
        • Send data to an endpoint
        • Quiz
      • User handling and permissions
        • Users and roles
        • Permissions
        • Creating users
        • Extending the User object class
        • Updating and deleting users
        • Unauthenticated access
        • Quiz
    • Appfarm Professional
      • User Interfaces
        • Featured UI Components
        • Concepts and Use Cases
      • Data Structures & Data Handling
        • Data Features
        • Search & Filters
        • Featured Action Nodes
        • GraphQL
      • Logic & Flow
        • Logical Concepts
        • Date and Time Handling
        • Featured Action Nodes
        • Exception Handling
      • Login & Configuration
        • Login and Authentication
        • Settings, Configuration and Languages
      • Security & Operations
        • Security and Permissions
        • Deployment
        • Schedules and Logs
        • Debugging and App Health
      • Performance & Optimization
        • Optimizing Performance
        • Enhancing Functionality
    • Appfarm Sales Representative
    • Appfarm Developer Forum
      • Session 1: Data Modeling in Appfarm Create
      • Session 2: App Data in Appfarm Create
      • Session 3: Services in Appfarm Create
      • Session 4: Optimizing Performance
    • Background
      • Databases
        • Data modeling 101
        • Database normalization
  • Library
    • UI components
      • Advanced bar chart
      • Advanced bubble chart
      • Advanced combined chart
      • Advanced gantt chart
      • Advanced heatmap chart
      • Advanced line/area chart
      • Advanced pie chart
      • Advanced scatter plot chart
      • Advanced solid gauge chart
      • Animated component
      • Avatar
      • Avatar group
      • Basic bar chart
      • Basic gauge chart
      • Basic line chart
      • Basic pie chart
      • Bottom navigation
      • Button
      • Checkbox
      • Chip group
      • Circular progress
      • Coded component
        • Coded component examples
      • Container
      • Date & time picker
      • Drawable canvas
      • Floating action button
      • Icon
      • Icon button
      • Iframe
      • Image
      • Linear progress
      • List
      • Map
      • Menu list
      • Multi select
      • PDF reader
      • Popover
      • Radio buttons
      • Rich text editor
      • Rich text
      • Select
      • Slider
      • Speed dial
      • Switch
      • Table
      • Tabs
      • Text
      • Text edit
      • View container
      • Visibility group
    • Action nodes
      • Aggregate data
      • Advanced search
      • Auth operations
      • Block
      • Catch exception
      • Copy to clipboard
      • Create file archive
      • Create file object
      • Create object
      • Create user account
      • Delete objects
      • Delete user account
      • Duplicate objects
      • End execution
      • Exit block
      • Exit loop
      • Export data
      • Foreach
      • Generate document
      • If
      • Import data
      • Invalidate cache
      • Log in
      • Log to console
      • Log out
      • Next iteration
      • Navigate
      • Open/close popover
      • Open confirm dialog
      • Open print dialog
      • Open snackbar
      • Open Unsplash dialog
      • Open URL
      • Persist objects
      • Push notifications
      • Read objects
      • Request permissions
      • Run code
      • Run other action
      • Run service
      • Scan barcode/QR code
      • Send email
      • Send SMS
      • Set client language
      • Set data source attributes
      • Set selection
      • Set theme
      • Set user account image
      • Show install app prompt
      • Sleep
      • Sort objects
      • Throw exception
      • Toggle drawer
      • Update object
      • Update secret
      • Update user account
      • Web request
      • While
  • Reference
    • Appfarm Create
      • Appfarm Commander
      • Blue dots
      • Copy & Paste
      • Farmer's Market
      • Find references
      • Find usage
      • Keyboard shortcuts
      • Undo/Redo
      • User preferences
    • Platform concepts
      • Conditions
      • Data bindings
      • Date and time
      • Event handlers
      • Filters
      • Functions
      • Markdown
      • Objects
      • Operators
      • Value processor
    • Dashboard
    • Apps
      • UI
        • Views
          • Dialog
          • Drawer
        • Layout designer
        • Component properties
        • Shareable UI components
      • Data
        • App variables
        • Data sources
        • Calendar data sources
      • Actions
      • App settings
      • App size
      • App health
    • Services
      • Service Endpoints
      • Service settings
      • Service health
      • API explorer
    • Data model
      • Object classes
      • Object class properties
      • Enumerated types
      • GraphQL
        • Queries
        • Mutations
      • Data Extract API
      • Time series data
    • Operations
      • Deploy
      • Schedules
      • Logs
    • Resources
      • Themes
      • Files
      • Fonts
      • Internationalization
    • Configuration
      • Environments
      • Login
        • Custom auth providers
    • Security
      • Users
      • Service accounts
      • Roles
      • Secrets
      • Permissions
        • Conditional Permissions
    • Appfarm Client
      • Developer tools for Apps
      • Developer tools for Services
      • Warnings and errors
  • How to
    • Data modeling
      • Many-to-many relationships
      • Use naming conventions
      • Offline data handling
      • Data silos and White labelling
    • User interface
      • Manage a many-to-many relationship with a Chip group
      • Configure drag and drop
      • Build a drag-and-drop calendar
      • Design a responsive layout
      • Work with flexbox
      • Use Mapbox as a map layer
      • Understand charts
    • Logic and flow
      • Event Log Design
      • Configure advanced search
    • Themes and styling
      • Change the active theme
      • Add custom email templates
    • Enhance your app
      • Add deep links
      • Add keyboard shortcuts
      • Add link previews for social media
      • Apply SEO best practices
      • Change the active language
      • Generate a PDF from a Container
    • Integrations
      • Integrate with external systems
      • Integrate with OpenAI
      • Integrate with Google Analytics (GA4)
      • Configure a custom email account
      • Integrate with a payment provider
      • Integrate with Signicat
      • Integrate directly with an external database
      • Retrieve a Bearer token from Google Cloud
      • Fetch data from BigQuery
      • Retrieve access token from Microsoft Entra ID
    • Workflow automation
      • Update an OAuth 2.0 access token from a service
    • Authentication and access control
      • Add users and assign roles
      • Configure unauthenticated access
      • Implement third-party authentication
    • Security, testing and deployment
      • Add a custom domain
      • Install an app on a device
      • Get ready for Production
      • Optimize performance
      • Security checklist
      • Test and debug
    • Example apps
      • Create an Instagram clone
        • The end result
        • Designing the feed
        • Create new post
        • Add a like-button
        • Add comment-functionality
  • Solution administration
    • Subscription and billing
    • Dedicated tier benefits
    • Guide to GDPR
      • Key principles
      • How Appfarm protects personal data
      • How you can protect your clients’ data
      • Glossary
    • Appfarm and the EU AI Act
  • Policies
    • Appfarm Policies
    • Data Processors
    • Privacy Policy
Powered by GitBook
On this page
  • Why use an Event Log?
  • Example Data Model
  • An example setup
  • Aftermath and clean-up

Was this helpful?

Export as PDF
  1. How to
  2. Logic and flow

Event Log Design

An Architectural guide on Event Handling

PreviousLogic and flowNextConfigure advanced search

Last updated 1 year ago

Was this helpful?

In complex use cases, typically with a lot of integrations or important services running on a schedule, errors are bound to happen at some point.

Appfarm allows the developer to catch and handle Exceptions in the Actions flow (e.g. notifying the user that something went wrong), but there may be cases where you also want to explicitly log the exception and where it originated.

This is where building functionality for logging Events comes into play.

This article suggests a simple data model design for capturing such Events when they occur, as well as having a dashboard for monitoring and handling the Event Log.

Why use an Event Log?

Using an Event Log can be especially useful when working with solutions where the developers are regularly circulated, to have a unified design on how to log and track errors that may occur.

It is also excellent for being counteractive rather than reactive on errors and specific events. For example: An important nightly sync job (service) has failed. This should be logged to an Event Log (and optionally also notified by email) so that immediate action may be taken, instead of waiting until someone discovers the error (it may even be too late to fix).

The concept can also be applied to logging system events that are not necessarily exceptions or errors, but merely documenting that an event has taken place. This can be useful when extending your system with numerous integrations that pull or post data throughout your application, or performs various processing steps on a schedule.

The event log can then be monitored on a schedule and reported to a dynamic set of users or recipients. In systems where an error should be accounted for and resolved, you may also extend the design to include features for manually resolve certain events.

An example of an Event Log dashboard is available in our . You may view the demos, as well as access the setup in Appfarm Create. If you do not have access, you may register .

Example Data Model

This is a suggestion of Object Classes and Enumerated Types that may be created for implementing an Event Log.

Event Log

Event Log (extended, if entries may require resolvement)

Enum entries

An example setup

In our example solution, we have two Apps and a Service that runs on a Schedule. In addition, we have a Watchdog Service responsible for reporting our Event Logs to a set of recipients.

App A encounters an error when communicating with an external API through a web request, which we fortunately catch in our exception handler. The user is gracefully informed of the event, but we also want to log this to our event log in order to follow up on the incident. We create an event log of Type Web Request with Critical Severity, our action name as Originated in Action and App A as Source.

In another area of App A, we have an action that does some sort of calculation when executed and it is important that we have control of when it was executed. We create an Event Log of Type Action with Information Severity, our action name as Originated in Action and App A as Source.

We have implemented the same design both in our App B and Service 1 for handling critical exceptions and logging key events from our service.

You may also create a Dashboard or Monitor area in an administration App for displaying and investigating the Event Log using e.g. a Table component and (if necessary) functionality for resolving Event Log entries. This design can be extended as well to provide a short cut for viewing Event Logs last hour/last day and search/filtering features. This area should also have functionality for handling the recipient list if you choose to have a dynamic list of recipients to notify.

The Watchdog Service runs on a periodic schedule (hourly, daily, weekly, whatever), reads all Event Logs created since the last execution, and creates a report. The report is sent by e-mail to a list of recipients. As a final step, it marks the read Event Logs as reported.

For the example found in Showroom (see link in the top area of this article), we’ve constructed the Watchdog as a callable action from an App rather than a Service on a Schedule -to enable a smoother testing experience. The logic from the action could and should be transferred to an action running as a Service on a Schedule.

Aftermath and clean-up

An Event Log system may generate large amounts of data over time. You should take precautions in your data filters when reading and displaying the logs, and also provide search and filtering possibilities.

Default settings may be three views with Event Log entries from last hour, last day and last week, and with the possibility of performing a search on the Event Log data.

You may also instruct the watchdog to perform some sort of cleanup and deletion of old Event Logs that satisfies a given criteria.

Showroom
here
Event Log
Event Log (Extended)
Enum Entries
Event Log Architecture