{"id":20682265,"url":"https://github.com/j-fischer/rflib","last_synced_at":"2026-01-26T18:55:20.259Z","repository":{"id":37374532,"uuid":"210472898","full_name":"j-fischer/rflib","owner":"j-fischer","description":"Salesforce open source library with logging framework, trigger framework, feature switches, and advanced monitoring capabilities","archived":false,"fork":false,"pushed_at":"2025-12-28T05:54:38.000Z","size":14669,"stargazers_count":206,"open_issues_count":5,"forks_count":28,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-12-30T12:28:41.717Z","etag":null,"topics":["logging","logging-library","salesforce","salesforce-apex","salesforce-lightning","trigger-framework"],"latest_commit_sha":null,"homepage":"","language":"Apex","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/j-fischer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-09-23T23:53:29.000Z","updated_at":"2025-12-17T05:29:11.000Z","dependencies_parsed_at":"2025-12-06T16:00:46.016Z","dependency_job_id":null,"html_url":"https://github.com/j-fischer/rflib","commit_stats":null,"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"purl":"pkg:github/j-fischer/rflib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-fischer%2Frflib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-fischer%2Frflib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-fischer%2Frflib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-fischer%2Frflib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/j-fischer","download_url":"https://codeload.github.com/j-fischer/rflib/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-fischer%2Frflib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28785172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T13:55:28.044Z","status":"ssl_error","status_checked_at":"2026-01-26T13:55:26.068Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["logging","logging-library","salesforce","salesforce-apex","salesforce-lightning","trigger-framework"],"created_at":"2024-11-16T22:13:10.595Z","updated_at":"2026-01-26T18:55:20.247Z","avatar_url":"https://github.com/j-fischer.png","language":"Apex","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reliability Force\n\n![Build Status](https://img.shields.io/circleci/build/github/j-fischer/rflib/master) ![GitHub](https://img.shields.io/github/license/j-fischer/rflib) ![NPM package version](https://shields.io/npm/v/rflib) [![codecov](https://codecov.io/gh/j-fischer/rflib/branch/master/graph/badge.svg)](https://codecov.io/gh/j-fischer/rflib)\n\nThe goal of this library is to help developers to create clean, production-ready code with a high level of operational supportability.\n\nThis library is inspired by Dan Appleman's (see [Advanced Apex Programming](https://www.amazon.com/gp/product/1936754126/ref=as_li_tl?ie=UTF8\u0026tag=apexbook-20\u0026camp=1789\u0026creative=9325\u0026linkCode=as2\u0026creativeASIN=1936754126\u0026linkId=2e3446c23a7a7cc6c947ec1bb2480434))\nlogging design pattern to collect better diagnostic information when dealing with errors in your Apex classes. This library expands\nhis concepts to provide detailed log information from Lightning Components and Lightning Web Components, giving developers more visibility\ninto the execution path on the client side, especially when dealing with production issues. The library can be configured to\nautomatically report any unexpected errors through Salesforce's latest technologies such as Platform Events.\n\n## Key Features\n\nThe following lists describe some of the key features of rflib.\n\n#### Logging Framework (package RFLIB):\n\n- [Logger for LWC and Aura](https://github.com/j-fischer/rflib/wiki/Getting-Started-with-Logging), which publishes logs the same way as Apex\n- [Configuration through Custom Settings](https://github.com/j-fischer/rflib/wiki/Logger-Settings) allowing for different log configurations between users\n- Aggregation of log statements when reporting\n- Using Platform Events for reporting of log statements\n- [Masking](https://github.com/j-fischer/rflib/wiki/Masking-Log-Messages) of content in Log Messages\n- Log Archive using Big Objects\n- Automatically [time and log](https://github.com/j-fischer/rflib/wiki/Getting-Started-with-the-Log-Timer) execution duration\n- Dashboard for all Object, Field, and Apex/VF Page permissions for Profiles, Permission Sets, and Permission Set Groups\n- Supports logging in Flow and Process Builder\n- Supports OmniScript and Integration Procedures in [OmniStudio](https://github.com/j-fischer/rflib/wiki/Getting-Started-with-Logging-in-OmniStudio)\n- Display of platform details (Governor Limits, browser \u0026 NodeJS process details) for every Log Event\n- [HTTP Request mocking framework](https://github.com/j-fischer/rflib/wiki/Getting-Started-with-Salesforce-Functions) to speed up integration development\n\n#### Feature Switches (package RFLIB-FS):\n\n- [Fully configured](https://github.com/j-fischer/rflib/wiki/Getting-Started-with-Feature-Switches) using Custom Metadata\n- Supports hierarchical structure (similar to Custom Settings) to override settings at the profile or user level\n- Fully supported in Flow Builder through Get Records or Apex Action\n\n#### Trigger Framework (package RFLIB-TF):\n\n- Fully decoupled [framework](https://github.com/j-fischer/rflib/wiki/Getting-Started-with-the-Trigger-Framework), trigger handlers work in isolation\n- Recursion tracking to allow for easy prevention of multiple executions\n- Fully configurable trigger management (activation, order, error handling, etc) using Custom Metadata Types\n- [Framework for Retryable Actions](https://github.com/j-fischer/rflib/wiki/Getting-Started-with-Retryable-Actions) using Platform Events for asynchronous actions with automatic retries\n\n#### Pharos AI Integration (package RFLIB-PHAROS):\n\n- Seamless integration with Pharos AI to increased operational support, investigative support and issue management.\n- Fully configurable using Custom Settings and the `Field Mapping` Custom Metadata object.\n- Does not have direct package dependency, integration works entirely through Platform Events.\n\n## Deploy\n\n**The best way to add RFLIB to your environment is by installing the unlocked package.**\n\nAlternatively, you can either clone the repository and use 'sfdx force:source:deploy' to deploy this library to your Sandbox or use the **Deploy to Salesforce**\nbutton below to deploy it directly into your org.\n\nPlease check the [CHANGELOG file](https://github.com/j-fischer/rflib/blob/master/CHANGELOG.md) for versions, install links and package aliases.\n\nTo install package via browser:\n\nhttps://login.salesforce.com/packaging/installPackage.apexp?p0=\u003cPACKAGE_VERSION_ID\u003e\n\nTo install package via SFDX CLI Plugin (v2):\n\n```\nsf package install --package \u003cPackage ID\u003e --target-org \u003cyour org alias\u003e\n```\n\nHere are the commands for the latest versions:\n\n```\nrem RFLIB 10.1.0\nsf package install --package 04tKY000000ygWuYAI --target-org \u003cyour org alias\u003e\n\nrem RFLIB-FS 3.0.1\nsf package install --package 04t3h000004pOeLAAU --target-org \u003cyour org alias\u003e\n\nrem RFLIB-TF 3.0.2\nsf package install --package 04tKY000000xAF1YAM --target-org \u003cyour org alias\u003e\n\nrem RFLIB-PHAROS 1.0.0\nsf package install --package 04tKY000000xhxmYAA --target-org \u003cyour org alias\u003e\n```\n\nTo deploy code:\n\n\u003ca href=\"https://githubsfdeploy.herokuapp.com/?owner=j-fischer\u0026repo=rflib\u0026ref=master\"\u003e\n  \u003cimg alt=\"Deploy to Salesforce\"\n       src=\"https://raw.githubusercontent.com/afawcett/githubsfdeploy/master/src/main/webapp/resources/img/deploy.png\"\u003e\n\u003c/a\u003e\n\nSee the [NPM Package Registry record for more details](https://www.npmjs.com/package/rflib).\n\n## Documentation\n\nDocumentation such as \"How To's\" and more can be found in the [Wiki of this repository](https://github.com/j-fischer/rflib/wiki).\n\n## Log Event Dashboard\n\nReview any log events sent within the last 72 hours or receive new log events in real-time. The dashboard shows all the events and lets you\nfilter them by searching text within the messages. This will make it easy to detect error codes or other log messages of value.\n\nTo enabled the Ops Center application, simply assign the `Ops Center Access` Permission Set to the users of your choice.\n\n![alt text](https://github.com/j-fischer/rflib/blob/master/screenshots/Log_Monitor_Dashboard.gif 'Log Monitor Dashboard')\n\n## Permissions Explorer\n\nReview object and field permissions for profiles and permission Sets easily within the same user interface. Many problems encountered in an org trace back\nto access issues. Using the Setup interface to review access for users is pretty inefficient. This dashboard provides access to all profiles and permissions\nand allows for quick filtering of the results.\n\nTo enabled the Ops Center application, simply assign the `Ops Center Access` Permission Set to the users of your choice.\n\n![alt text](https://github.com/j-fischer/rflib/blob/master/screenshots/Permission_Explorer.gif 'Permissions Explorer')\n\n## Management Console\n\nA critical aspect of operating a Salesforce Org is managing Governor Limits. There are transactional and org-wide limits, some of which RFLIB is consuming\nin order to report and display Log Events. While there are several different tools available to monitor org-wide Governor Limits, RFLIB provides a simple\nway to stay on top of those as well through the `Management Console` tab.\n\nThere, users with access to the Ops Center can view the current consumption of the org-wide Governor Limits relevant to RFLIB. In addition, RFLIB will\ndisplay what users have not been provided with Permission Set to enable client logging and what users are assigned access to the Ops Center.\n\n![alt text](https://github.com/j-fischer/rflib/blob/master/screenshots/Management_Console.png 'Management Console')\n\n## Application Event Dashboard\n\nWhether a product owner wants to understand feature adoption or user behaviour, [Application Events](https://github.com/j-fischer/rflib/wiki/Getting-Started-with-Application-Events) provide visibility into the an\napplication's usage patterns and can help teams to make better decisions and learn more about their apps.\n\nFor operational teams, Application Events can be used to track integration requests and their outcomes, which can lead to a call to action to review\nRFLIB log messages for more details.\n\n![alt text](https://github.com/j-fischer/rflib/blob/master/screenshots/Application_Event_Dashboard.jpg 'Application Event Dashboard')\n\n## Updates\n\nSee [CHANGELOG file](https://github.com/j-fischer/rflib/blob/master/CHANGELOG.md) for versions, install links and package IDs.\n\n## Third Party Sources\n\n- Thanks to Marco Almodova for granting me his ConfirmationDialog component including the right to share it under the BSD-3-Clause license: https://github.com/marcoalmodova/confirm-dialog\n- Thanks to the Beyond The Cloud team for their SOQL library, which is licensed under the MIT license: https://github.com/beyond-the-cloud-dev/soql-lib/blob/main/LICENSE\n\n## Credits\n\n- Table Pagination was inspired by: https://salesforcelightningwebcomponents.blogspot.com/2019/04/pagination-with-search-step-by-step.html\n- Log Monitor Component was inspired by: https://github.com/rsoesemann/apex-unified-logging\n- \"Bypass All Trigger\" Custom Permission was inspired by: https://github.com/appero-com/MyTriggers\n- The unlocked packaged was created with the help of Andrew Fawcett: https://andyinthecloud.com/2018/06/16/salesforce-dx-packages-and-open-source/\n- Logo was created with: https://www.freelogodesign.org/\n- Thanks to Fabien Taillon for his SFDX CLI Plugin: https://github.com/texei/texei-sfdx-plugin\n- Thanks to René Winkelmeyer for his SFDX CLI Plugin: https://github.com/muenzpraeger/sfdx-plugin\n- Thanks to Shane McLaughlin for his SFDX CLI Plugin: https://github.com/mshanemc/shane-sfdx-plugins\n- Thanks to Simon Akbar for his amazing blog post: https://www.machinereadablepeople.net/home/2020/4/4/exporting-salesforce-field-level-security-and-object-access-with-the-data-loader\n- Thanks to Salesforce Labs for the Streaming Monitor package: https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FYEEWUA5\n- Thanks to Numaan Mahammad for Big Object Utility: https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000EcvSsUAJ\n- Thanks to Pearl Lee (@thetechbee) and Aleksandra Radovanovic (@\\_AleksM) for being such amazing supporters of my work and this library\n- Thanks to [Jonathan Gillespie](https://github.com/jongpie) for the ongoing support and PR contributions\n- Thanks to the [Pharos AI Team](https://pharos.ai/) for the great collaboration.\n\n## Attribution\n\n- Application Event Logger Action icon (SVG) provided by [yogiaprelliyanto](https://www.svgrepo.com/author/yogiaprelliyanto/) under the [CC Attribution License](https://www.svgrepo.com/page/licensing#CC%20Attribution)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj-fischer%2Frflib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fj-fischer%2Frflib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj-fischer%2Frflib/lists"}