Releases: jongpie/NebulaLogger
Version 4.4.0
Admin & Reporting Enhancements
- #125 - Added field
LoggerSettings__c.DefaultSaveMethod__cto handle controlling the save method used when callingLogger.saveLog() - #127 - Added new field Transaction Entry Number on
LogEntryEvent__eandLogEntry__c - #133 - Added new field Epoch Timestamp on
LogEntryEvent__eandLogEntry__c
Bugfixes
- #135 - Fixed "System.QueryException: unexpected token: '('" when querying
Networkobject (reported in #131) - Unpackaged version only:
System.debugis now always called inLogEntryEventBuilder.setMessage(String message), even if Logger is disabled
Managed Package
- Production installation URL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5Y0000027F9wQAE
- Sandbox installation URL: https://test.salesforce.com/packaging/installPackage.apexp?p0=04t5Y0000027F9wQAE
Version 4.3.0
Admin & Reporting Enhancements
- #108 Added new 'Logger Console' app and custom tab for the
LogEntry__cobject - #123 Added new 'Mass Delete' button on
Log__c- users with delete permission can select 1 or more logs from a list view and delete them all at once.- Existing orgs using the managed package will need to manually add this button to
Log__cobject's list view layouts underSetup --> Object Manager --> Log__c --> Search Layouts for Salesforce Classic
- Existing orgs using the managed package will need to manually add this button to
- #113 Added new reports for
Log__candLogEntry__c - #103 Added new fields on
Log__cfor the org's Release Cycle, Release Number and Release Version- Several of these fields are retrieved by making a callout to
api.status.salesforce.com- a remote site setting for this domain is also included. The callout can also be disabled by updating the org defaults inLoggerSettings__cto setEnableStatusApiCallout__c= false - Existing orgs (using either the unmanaged metadata or the managed package) should review
LoggerSettings__cafter upgrading and enable the new Status API callout (if desired)
- Several of these fields are retrieved by making a callout to
Log Sharing Enhancements
- #107 Added Apex managed sharing for
Log__c- logs can now be automatically shared with the userLog__c.LoggedBy__c- This is configurable in
LoggerSettings__c- you can set the fieldDefaultLogShareAccessLevel__cto 'Read' (default), 'Edit' or null (disables automatic sharing) - Existing orgs (using either the unmanaged metadata or the managed package) should review
LoggerSettings__cafter upgrading and configure the new 'Default Log Share Access Level' field (if desired) - This only provides record-level access. In order to see the
Log__candLogEntry__cobjects, you will still need to give users access using one of the included permission sets
- This is configurable in
Flow Logging Enhancements
- #105 Added support for logging Flow fault messages. Both invocable classes,
FlowLogEntryandFlowRecordLogEntry, now have an optional property,faultMessage- simply pass the fault message from Flow, and it will be logged as an exception inLogEntry__c(similar to how Apex exceptions are logged)
Apex Logging Enhancements
- #114 New Logger overloads for logging list parameters, such as
Logger.info('my message, sobjectList)- The JSON of the lists are stored in the existing fields
LogEntry__c.DatabaseResultJson__candLogEntry__c.RecordJson__c. 2 new fields,DatabaseResultCollectionType__candRecordCollectionType__ccan be used to indicate if a single record or list of records was logged - These lists are now supported:
List<SObject>List<Database.DeleteResult>List<Database.MergeResult>List<Database.SaveResult>List<Database.UpsertResult>List<Database.UndeleteResult>
- The JSON of the lists are stored in the existing fields
Bugfixes
- #115 Fixed an error with logging a single instance of
Database.Resultwhen the logging level is disabled for the current user - #118 Fixed upsert logic for
Log__cto remove code assumption that only 1 transaction ID is present withinLogEntryEvent__erecords
Managed Package
- Production installation URL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5Y000000YLDLQA4
- Sandbox installation URL: https://test.salesforce.com/packaging/installPackage.apexp?p0=04t5Y000000YLDLQA4
Version 4.2.0 - Expanded fields and Apex methods
Apex
- Added new methods in
LoggerandLogEntryEventBuilderfor logging database 'result' classes as parameters (DeleteResult,MergeResult,SaveResult,UpsertResultandUndeleteResult) - Added new WARN overloads in
Loggerto support exception parameters - WARN and ERROR now support the same overloads - Resolved 'Current session unavailable' exception in scheduled jobs by using a new approach to store session details
Data Model
- Added
LogEntryEvent__efields for org, user, and record details - Added new
LogEntry__cfield 'record SObject classification' - Added new
Log__csession fields: login application, login platform and login browser
Log Management
- Fixed some display issues in 'View JSON' quick action on
Log__c
Documentation
- Added link in README.md to GitHub pages with documentation of all Apex
publicandglobalclasses/methods
Managed Package
- Production installation URL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5Y000000Xg4wQAC
- Sandbox installation URL: https://test.salesforce.com/packaging/installPackage.apexp?p0=04t5Y000000Xg4wQAC
Version 4.0.0 - Managed Package Released
New 2nd Generation Managed Package
- The managed package uses the namespace
Nebula- you can choose if you want to install the managed package (recommended) or deploy the unpackaged source code - Production installation URL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5Y000000XJZ7QAO
- Sandbox installation URL: https://test.salesforce.com/packaging/installPackage.apexp?p0=04t5Y000000XJZ7QAO
New Features
- Added new 'Related Log Entries' Lightning web component. Using field sets and App Builder, admins can add the component to any record page
- New log management - new fields & 'Manage Log' quick action provide the ability to track details about each log, such as priority, status, issue, closed/open, closed by, closed date, 'is resolved', etc. Statuses can be configured using
LogStatus__mdtcustom metadata type. - Added new schedulable Apex class
LogBatchPurgeSchedulerfor scheduling deletion of old logs - Old aura 'View JSON' cmp is now a wrapper for new Lightning web component
logViewer - Updated all metadata to API v51.0 (Spring '21 release)
- Update README to include more details & screenshots
Bugfixes
- Resolved an issue where
LogEntry__c.Timestamp__cwas not precise - it now includes an accurate value for milliseconds within the timestamp
Removed Apex Classes
- Removed
FlowLogRepo- existing orgs should still be able to use it for the foreseeable future - Removed
CalloutandRestApiclasses - these are no longer needed for Logger, but the classes are still available/maintained in a separate ApexCallouts repo
Removed or Changed Apex Methods
Loggerclass- Removed
saveLog(Quiddity quiddity), and re-addedsaveLog(SaveMethod saveMethod)+SaveMethodenum - Removed parameterless logging methods (
error(),warn(),info(),debug(),fine(),finer(),finest()) (they're now private) - Replaced
createLogEntryEventBuilder()with newEntry() method (with overloads)
- Removed
LogEntryBuilderclass- Removed method
setUserSessionDetails()(it's now private) - Removed
alwaysSave()method - new approach isLogger.newEntry(loggingLevel, message, true);
- Removed method
Custom Fields Cleanup
In preparation for releasing a managed package, several fields have been either deleted or renamed. Existing orgs using an older version can delete these fields after installing the latest version - these fields will no longer be used going forward.
Log Entry Event platform event object
LogEntryEvent__e.ProfileName__cLogEntryEvent__e.RelatedRecordId__c(renamed toLogEntryEvent__e.RecordId__c)LogEntryEvent__e.RelatedRecordJson__c(renamed toLogEntryEvent__e.RelatedRecordJson__c)LogEntryEvent__e.UserRoleName__c
Log custom object
Log__c.SystemModeIsApexRest__cLog__c.SystemModeIsBatch__cLog__c.SystemModeIsFuture__cLog__c.SystemModeIsQueueable__cLog__c.SystemModeIsScheduledJob__cLog__c.SystemModeIsScheduled__cLog__c.TotalLogEntriesWithRelatedRecordId__c(renamed toLog__c.TotalLogEntriesWithRecordId__c)
Log Entry custom object
LogEntry__c.HasRelatedRecordId__c(renamed toLogEntry__c.HasRecordId__c)LogEntry__c.HasRelatedRecordJson__c(renamed toLogEntry__c.HasRecordJson__c)LogEntry__c.RelatedRecordDetailedLink__c(renamed toLogEntry__c.RecordDetailedLink__c)LogEntry__c.RelatedRecordId__c(renamed toLogEntry__c.RecordId__c)LogEntry__c.RelatedRecordJson__c(renamed toLogEntry__c.RecordJson__c)LogEntry__c.RelatedRecordLink__c(renamed toLogEntry__c.RecordLink__c)LogEntry__c.RelatedRecordName__c(renamed toLogEntry__c.RecordName__c)LogEntry__c.RelatedRecordSObject__c(renamed toLogEntry__c.RecordSObject__c)LogEntry__c.RelatedAccount__cLogEntry__c.RelatedCase__cLogEntry__c.RelatedLead__cLogEntry__c.RelatedUser__c
Logger Settings custom setting object
LoggerSettings__c.GenerateDebugStatements__cLoggerSettings__c.StoreRelatedRecordJson__cLoggerSettings__c.StoreStackTrace__c
Winter '21 Release
Updated all metadata to API v50.0 (Winter '21 release)
New Features & Enhancements
| PR | Area | Summary |
|---|---|---|
| #28 | Overall | Logger.getTransactionId() now uses Apex's new Quiddity Request ID |
| #44 | Reporting | Added new fields on Log__c for details about Community, Organization and User License |
| #55 | UI | Switched to using Dynamic Forms for Log__c and LogEntry__c |
| #52 | UI | 'View JSON' quick action improved - added a 'copy JSON to clipboard' button & modal is now larger |
| #57 | Log Batch Deletion | Added new field Log__c.LogRetentionDate__c to control which records are deleted in LogBatchPurger job |
| #45 | Flow | Added quality of life improvements for Flow usage - categorization, plus ability to retrieve latest created log via Flow |
| #36, #51 | Apex & Flow | Related SObject records are now stored automatically as JSON in the new field LogEntry__c.RelatedRecordJson__c |
| #35 | Apex | The Apex stack trace for each log entry are now automatically stored in the new field LogEntry__c.StackTrace__c |
| #34 | Apex | Added LogMessage class to support more advanced methods of setting LogEntry__c.Message__c |
Optimizations
- Reduced CPU usage in
LogEntryBuilder. Previously, logic inLogEntryBuildermethods still executed, even if the entry's logging level was disabled. Additional checks have been added to only run the methods if the logging level is enabled. - Eliminated a SOQL query in
LogEntryBuilderand moved toLogEntryHandlerinstead (which runs in a separate, async transaction)
External Libraries
- Upgraded ApexCallouts library to the latest version
- Eliminated classes
Uuid,Uuid_TestsandTestDataFactory
Summer '20 Overhaul
This release changes most of the method signatures in Logger & will break existing projects. Any existing code will need to be updated to use the new methods. Several fields have also been renamed in this release.
Terminology Changes
- Log Entry Types: the type 'debug' has been renamed to 'diagnostic' to avoid confusion with the DEBUG logging level
- System Mode vs Context: any transaction details that applies to the entire transaction (
System.isFuture(),System.isBatch(), etc) are now referred to asSystem Mode, stored at the Log__c-level, Any details that are specific to a single entry (Trigger.isExecuting) is still referred to asContextand is still stored at the LogEntry__c-level.
New Features
- Added
Logger.saveLog(SaveMethod saveMethod). Currently, it supports saving via DML statements, REST API, or a new queuable job (useful for saving logs asynchronously). - New
Loggermethod naming convention. Logger now uses a method naming convention based on the desired logging level, such asLogger.debug('my debug message')andLogger.warn('my warning message'). Each logging level's methods have been overloaded to support both simple & complex logging needs.
** For advanced logging news, the parameterless version of each method returns a newLogEntryBuilderobject, which provides more control over how the log entries are generated. - Added new 'Logger' methods for settings-related details, including
Logger.getUserLoggingLevelLogger.isEnabled(),Logger.isDebugEnabled(),Logger.isInfoEnabled(), etc. - Add 'View JSON' quick action button on Log__c to see the log and its entries in JSON format
- Added new
LoggerLogViewerpermission set to give view-all access for the Log__c and LogEntry__c objects - Added additional list views on Log__c
SFDX Metadata Conversion
This release just covers converting the repo to use the SFDX metadata structure - no functional changes have been made.
- The existing metadata has been converted from the old
srcfolder format to the new SFDX folder structure, undernebula-app-framework. Other related repos will eventually be updated to use this same structure. - Dependencies (metadata used from separate projects) have been placed in their own subfolders.
- Updated .travis.yml to use SFDX (instead of jsforce)
Spring '20 Enhancements
API Version Updated
- Upgraded all metadata to API v48.0 (Spring '20 release)
New Methods
- Added new methods to
Loggerfor controlling savingsuspendSaving()- Temporarily disables any calls tosaveLog()during the current transaction. Any log entries are still maintained in the logger's bufferresumeSaving()- Re-enables savingflushBuffer()- Discards any unsaved log entries in the logger's buffer
- Added new methods to
Loggerfor record-specific log entries - Added new method
saveLog(Boolean saveLogViaRestApi)which uses a callout to save the logs. This can be used when callouts are being made and DML statements cannot be used due to mixed operations limits
New Classes & Triggers
- Added
LogEntryHandlerclass andLogEntrytrigger to dynamically populate lookup fields referenced inLogEntry__c.RelatedRecordName__c
Removed Code
- Removed 3rd party integrations (Loggly, Slack & Trello). These will be moved to a separate repository.
- Eliminated originLocation parameter in all public methods - the private method
Logger.getOriginLocation()handles automatically setting the value
Admin Enhancements
- Added fields on
Log__cfor storing user & session details - Added formula fields on
LogEntry__cto simplify showing limits used vs max
Fixed failing unit tests
Small patch: Fixed some tests that previously failed if you deployed to production & had existing scheduled jobs. Thanks to @marcellcsiszar for reporting the issue.