Skip to content

v4.15.0 - Winter '25 Release

Latest
Compare
Choose a tag to compare
@jongpie jongpie released this 26 Nov 19:20
6608157

Managed Package Release - v4.15.0

This release is for both the unlocked package (as always), as well as the managed package! You can see everything that's changed between v4.14.0 and v4.15.0 by reviewing:

  • The v4.15.0 milestone to see all of the issues & pull requests that are included in the this release.
  • The diff between v4.14.0 and v4.15.0 to see all of the code & metadata changes that have been committed since the last managed package release.

For orgs that are upgrading to this version of the managed package: There are several enhancements & bugfixes in this release (listed below). A few of the notable highlights:

  • 🥳Added support for OmniStudio logging
  • 🥳Added support for loosely-coupled dependencies (especially useful for package developers/ISVs/consultants)
  • 🥳Added a new & improved getLogger() function in JavaScript that replaces the now-deprecated createLogger() function
    • createLogger() will continue to be supported, but it's recommended that everyone migrates to the new getLogger() function instead

Double Feature: Support for OmniStudio Logging + Loosely-Coupled Dependencies

✅✅Release v4.14.10: With the new Apex class Nebula.CallableLogger, 2 great enhancements have been added to Nebula Logger:

  1. It's now even easier for ISVs, consultants, and package developers to optionally leverage Nebula Logger when its available in your customers' orgs
  2. OmniStudio logging is now provided out of the box

These 2 enhancements are made possible by having the Nebula.CallableLogger class implement Apex's Callable interface.

  • The Nebula.CallableLogger class was originally released in the unlocked package in v4.14.10
  • It was further enhanced in v4.14.16

For more details on using Nebula.CallableLogger, check out these wiki pages:

Apex Logging Enhancements

For the method Nebula.Logger.setAsyncContext():

  • Release v4.14.15: Enhanced queueable FinalizerContext logging messages
  • 🐞Release v4.14.11: Bugfix to update Nebula.Logger.setAsyncContext() behavior to only set the context the first time a non-null context value is provided

For the class Nebula.LogEntryEventBuilder:

  • Release v4.14.18 by @alanjaouen: Add setRecord(System.Iterable<Id> recordsIds) method overload to Nebula.LogEntryEventBuilder for easily logging instances of Set<Id> and List<Id>
  • Add some changes related to HttpRequest logging via setHttpRequestDetails()
    • Release v4.14.8: Added the ability to capture HttpRequest headers via new method overload setHttpRequestDetails(System.HttpRequest request, List<String> headersToLog)
    • 🐞Release v4.14.12: Deprecated & replaced Nebula__HttpRequestEndpoint__c fields with new Nebula__HttpRequestEndpointAddress__c fields so that endpoints longer than 255 characters can be stored

For custom field mappings (originally released in release v4.13.14):

  • Release v4.14.14: Added new static Apex method overloads Nebula.Logger.setField()

For automatic Apex code snippets (originally released in release v4.13.1):

  • 🐞Release v4.14.9: Bugfix to auto-truncate Apex code snippets stored in Nebula__LogEntry__c fields.
    • Previously, the code snippet was only limited by the number of lines of code - but for Apex classes & triggers that have very looooooooooooong code on some lines, the code snippet could cause the JSON value to exceed the corresponding field's max length

JavaScript Logging Enhancements

  • ⚠️Release v4.14.13: Added a new synchronous JavaScript function getLogger() + deprecated async function createLogger()
  • Release v4.14.4: Added the option to automatically call Salesforce's lightning-logger LWC when logging via lightning components
    • Note: for orgs without Event Monitoring (or with Event Monitoring disabled), essentially nothing will actually happen when this feature is enabled in Nebula Logger in your orgs. It's a fully optional feature specifically for orgs that do have Event Monitoring.
    • When Event Monitoring is available & configured, using this feature creates a "Lightning Logger" event in Event Monitoring. These events & the lightning-logger LWC were made generally available (GA) in Salesforce's Spring '24 release.
    • This is controlled using the new field Nebula__LoggerSettings__c.Nebula__IsJavaScriptLightningLoggerEnabled__c, and is disabled/false by default
  • Release v4.14.6: Custom Field Mappings Support for Lightning Components
    • Additional enhancements were also added
  • Release v4.14.17: Added more details in Nebula/logger LWC's console statements
  • 🐞Release v4.14.2: Bugfix in the pipeline so that Jest test failures are properly surfaced/correctly cause a pipeline failure

Data Masking

  • 🐞Release v4.14.7: Fixed an issue with the regular expression used in the included data masking rule for US Social Security Numbers (SSNs). It now uses a more targeted regular expression for identifying SSNs to mask.
    • Previously, the rule was not restrictive enough in the regular expression used in SensitiveDataRegEx__c, which resulted in the rule masking some values that it should have ignored.

Nebula Logger Console App Changes

  • Release v4.14.5: Added Nebula/loggerSettings LWC to the app's utility bar
  • 🐞Release v4.14.3: Bugfix to correct the visibility rules for the tab "Related Record Details" on flexipage Nebula__LogEntryRecordPage

Core Unlocked Package Release - v4.15.0

These changes are new for both the unlocked package and the managed package.

Winter '25 Release Upgrade

  • Bumped all metadata to API v62.0 (Winter '25 release)
    • Also updated the list of picklist values in several 'API version' picklist fields on Log__c and LogEntry__c
  • Resolved #733 by updating all 5 record flexipages to use the new dynamic highlights component (released in Salesforce's Winter '25 release) in place of compact layouts.
    • The compact layouts are still included in the repo, but they're now considered deprecated.

Log__c Object Changes

  • Updated the flexipage LogRecordPage to use the newer component 'dynamic related list - single' instead of the older component 'related list - single' for displaying related lists
  • Updated the order of fields shown on the LogEntry__c related list to have LoggingLevel__c as one of the first fields (instead of as one of the last fields)
  • Updated all list views to have the existing field Log__c.ProfileLink__c
  • Added new list views
    1. AllChildLogs: shows any logs that have a parent log set using Logger.setParentLogTransactionId(String) (based on Log__c.ParentLogLink__c != null)
    2. AllImpersonatedLogs: shows any logs where an admin was impersonating the logging user (based on Log__c.ImpersonatedByUsernameLink__c != null)

LogEntry__c Object Changes

  • Updated the flexipage LogEntryRecordPage to use the newer component 'dynamic related list - single' instead of the older component 'related list - single' for displaying related lists
  • Added 3 new formula fields on LogEntry__c that reference the existing formula fields on Log__c so that the same data can easily be shown in list views, etc.:
    1. ImpersonatedByUsernameLink__c
    2. ParentLogLink__c
    3. ProfileLink__c
  • Updated all list views to have the existing field Log__c.ProfileLink__c
  • Added new list views
    1. AllERRORLogEntries: shows any records where LogEntry__c.LoggingLevel__c == 'ERROR'
      • This is very similar to the existing list view AllERRORandWARNLogEntries that shows both ERROR and WARN
    2. AllImpersonatedLogEntries: shows any log entries where an admin was impersonating the logging user (based on LogEntry__c.ImpersonatedByUsernameLink__c != null)
      • This is conceptually the same as the new Log__c list view AllImpersonatedLogs mentioned above

Note: The new formula fields on LogEntry__c (ImpersonatedByUsernameLink__c, ParentLogLink__c, and ProfileLink__c) also help to circumvent an issue with the new dynamic higlights panel - even though the dynamic highlights panel is capable of referencing parent object fields, it expects the namespaced relationship Nebula__Log__r for the managed package, despite the fact that the fields themselves don't need the namespace prefix (e.g., it expects Nebula__Log__r.ParentLogLink__c, which is nonsense & inconsistent 😅). I don't want to have to make a script to add the namespace in the pipeline, and the whole thing feels like a flaw on Salesforce's side, so these formula fields are used in the dynamic highlights panel to avoid the problem.

LogEntryTag__c Object Changes

  • Updated the flexipage LogEntryTagRecordPage to use the newer component 'dynamic related list - single' instead of the older component 'related list - single' for displaying related lists
  • Added 3 new formula fields on LogEntryTag__c that reference the new formula fields on LogEntry__c (mentioned above) so that the same data can easily be shown in list views, etc.:
    1. ImpersonatedByUsernameLink__c
    2. ParentLogLink__c
    3. ProfileLink__c
  • Updated the existing list view All to include the new fields LoggedByUsernameLink__c and ProfileLink__c
  • Added a new list view:
    1. AllImpersonatedLogEntryTags: shows any log entry tag where an admin was impersonating the logging user (based on LogEntryTag__c.ImpersonatedByUsernameLink__c != null)
      • This is conceptually the same as the new Log__c list view AllImpersonatedLogs and the new LogEntry__c list view AllImpersonatedLogEntries mentioned above

LoggerTag__c Object Changes

  • Enabled field history tracking on Name and UniqueId__c
  • Added the standard History related list component to the flexipage LoggerTagRecordPage

LoggerScenario__c Object Changes

  • Updated the flexipage LoggerScenarioRecordPage to use the newer component 'dynamic related list - single' instead of the older component 'related list - single' for displaying related lists
  • Updated the order of fields shown on the Log__c and LogEntry__c related lists to have a more consistent order as other related lists & list views for those objects

Updated Permission Sets

  • Updated 3 of the included permission sets to have read access to the new formula fields on LogEntry__c and LogEntryTag__c (mentioned above)
    1. LoggerAdmin
    2. LoggerLogViewer
    3. LoggerEndUser

Internal Optimizations

  • Updated all Apex SObjectType and SObjectField usages of getDescribe().getName() to toString() - it's easier to read, and based on some benchmarking @jamessimone did, it's faster too 🏎️
  • Updated a helper method in LogBatchPurgeController_Tests to try to avoid recurring flaky test failures due to (presumably) non-unique data being (previously) generated in parallel test methods

Dev / Pipeline Changes

  • Removed old sfdx commands in README.md, related scripts, and release notes - now only sf commands are provided
    • Salesforce is beginning to fully remove sfdx commands (see issue #2974 in the CLI repo), and sf commands will be the only set of commands in the future, so it makes sense to remove references the now-partially-deprecated sfdx commands
  • Added settings metadata to dev subdirectory to enable the new (beta) local dev setting for LWC in scratch orgs
    • This only impacts people working within Nebula Logger's repo (i.e., people making bugfixes & enhancements to Nebula Logger's codebase) - it doesn't have any impact to Nebula Logger itself
    • This new feature is controlled by the node enableLightningPreviewPref in nebula-logger/dev/main/default/settings/LightningExperience.settings-meta.xml

Installation Info

Core Unlocked Package - no namespace

Full Changelog: v4.14.18...v4.15.0

Core Managed Package - Nebula namespace

Full Changelog: v4.14.0...v4.15.0