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-deprecatedcreateLogger()
functioncreateLogger()
will continue to be supported, but it's recommended that everyone migrates to the newgetLogger()
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:
- It's now even easier for ISVs, consultants, and package developers to optionally leverage Nebula Logger when its available in your customers' orgs
- 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 inv4.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 queueableFinalizerContext
logging messages - 🐞Release
v4.14.11
: Bugfix to updateNebula.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: AddsetRecord(System.Iterable<Id> recordsIds)
method overload toNebula.LogEntryEventBuilder
for easily logging instances ofSet<Id>
andList<Id>
- Add some changes related to
HttpRequest
logging viasetHttpRequestDetails()
- ✅Release
v4.14.8
: Added the ability to captureHttpRequest
headers via new method overloadsetHttpRequestDetails(System.HttpRequest request, List<String> headersToLog)
- 🐞Release
v4.14.12
: Deprecated & replacedNebula__HttpRequestEndpoint__c
fields with newNebula__HttpRequestEndpointAddress__c
fields so that endpoints longer than 255 characters can be stored
- ✅Release
For custom field mappings (originally released in release v4.13.14
):
- ✅Release
v4.14.14
: Added new static Apex method overloadsNebula.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 inNebula__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
- ✅
⚠️ Releasev4.14.13
: Added a new synchronous JavaScript functiongetLogger()
+ deprecated async functioncreateLogger()
- ✅Release
v4.14.4
: Added the option to automatically call Salesforce'slightning-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 inNebula/logger
LWC'sconsole
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.
- Previously, the rule was not restrictive enough in the regular expression used in
Nebula Logger
Console App Changes
- ✅Release
v4.14.5
: AddedNebula/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 flexipageNebula__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
andLogEntry__c
- Also updated the list of picklist values in several 'API version' picklist fields on
- 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 haveLoggingLevel__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
AllChildLogs
: shows any logs that have a parent log set usingLogger.setParentLogTransactionId(String)
(based onLog__c.ParentLogLink__c != null
)AllImpersonatedLogs
: shows any logs where an admin was impersonating the logging user (based onLog__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 onLog__c
so that the same data can easily be shown in list views, etc.:ImpersonatedByUsernameLink__c
ParentLogLink__c
ProfileLink__c
- Updated all list views to have the existing field
Log__c.ProfileLink__c
- Added new list views
AllERRORLogEntries
: shows any records whereLogEntry__c.LoggingLevel__c == 'ERROR'
- This is very similar to the existing list view
AllERRORandWARNLogEntries
that shows bothERROR
andWARN
- This is very similar to the existing list view
AllImpersonatedLogEntries
: shows any log entries where an admin was impersonating the logging user (based onLogEntry__c.ImpersonatedByUsernameLink__c != null
)- This is conceptually the same as the new
Log__c
list viewAllImpersonatedLogs
mentioned above
- This is conceptually the same as the new
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 onLogEntry__c
(mentioned above) so that the same data can easily be shown in list views, etc.:ImpersonatedByUsernameLink__c
ParentLogLink__c
ProfileLink__c
- Updated the existing list view
All
to include the new fieldsLoggedByUsernameLink__c
andProfileLink__c
- Added a new list view:
AllImpersonatedLogEntryTags
: shows any log entry tag where an admin was impersonating the logging user (based onLogEntryTag__c.ImpersonatedByUsernameLink__c != null
)- This is conceptually the same as the new
Log__c
list viewAllImpersonatedLogs
and the newLogEntry__c
list viewAllImpersonatedLogEntries
mentioned above
- This is conceptually the same as the new
LoggerTag__c
Object Changes
- Enabled field history tracking on
Name
andUniqueId__c
- Added the standard
History
related list component to the flexipageLoggerTagRecordPage
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
andLogEntry__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
andLogEntryTag__c
(mentioned above)LoggerAdmin
LoggerLogViewer
LoggerEndUser
Internal Optimizations
- Updated all Apex
SObjectType
andSObjectField
usages ofgetDescribe().getName()
totoString()
- 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 inREADME.md
, related scripts, and release notes - now onlysf
commands are provided- Salesforce is beginning to fully remove
sfdx
commands (see issue #2974 in the CLI repo), andsf
commands will be the only set of commands in the future, so it makes sense to remove references the now-partially-deprecatedsfdx
commands
- Salesforce is beginning to fully remove
- 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
innebula-logger/dev/main/default/settings/LightningExperience.settings-meta.xml
Installation Info
Core Unlocked Package - no namespace
Full Changelog: v4.14.18...v4.15.0
- SF CLI:
sf package install --wait 20 --security-type AdminsOnly --package 04t5Y0000015odKQAQ
- Sandbox: https://test.salesforce.com/packaging/installPackage.apexp?p0=04t5Y0000015odKQAQ
- Production: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5Y0000015odKQAQ
Core Managed Package - Nebula
namespace
Full Changelog: v4.14.0...v4.15.0
- SF CLI:
sf package install --wait 20 --security-type AdminsOnly --package 04t5Y0000015odFQAQ
- Sandbox: https://test.salesforce.com/packaging/installPackage.apexp?p0=04t5Y0000015odFQAQ
- Production: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5Y0000015odFQAQ