diff --git a/nebula-logger/core/main/log-management/flexipages/LogRecordPage.flexipage-meta.xml b/nebula-logger/core/main/log-management/flexipages/LogRecordPage.flexipage-meta.xml
index a74ebf30b..974483a16 100644
--- a/nebula-logger/core/main/log-management/flexipages/LogRecordPage.flexipage-meta.xml
+++ b/nebula-logger/core/main/log-management/flexipages/LogRecordPage.flexipage-meta.xml
@@ -7,7 +7,7 @@
actionNames
- Log__c.ViewLogJSON
+ Log__c.OpenViewer
ChangeOwnerOne
diff --git a/nebula-logger/core/main/log-management/layouts/Log__c-Log Layout.layout-meta.xml b/nebula-logger/core/main/log-management/layouts/Log__c-Log Layout.layout-meta.xml
index 1ef166d1d..161423505 100644
--- a/nebula-logger/core/main/log-management/layouts/Log__c-Log Layout.layout-meta.xml
+++ b/nebula-logger/core/main/log-management/layouts/Log__c-Log Layout.layout-meta.xml
@@ -321,7 +321,7 @@
Record
- Log__c.ViewLogJSON
+ Log__c.OpenViewer
QuickAction
0
diff --git a/nebula-logger/core/main/log-management/lwc/logJSON/__tests__/data/getLog.json b/nebula-logger/core/main/log-management/lwc/logJSON/__tests__/data/getLog.json
deleted file mode 100644
index f1ac7fc0f..000000000
--- a/nebula-logger/core/main/log-management/lwc/logJSON/__tests__/data/getLog.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "Name": "Log-1234567890"
-}
diff --git a/nebula-logger/core/main/log-management/lwc/logJSON/__tests__/logJSON.test.js b/nebula-logger/core/main/log-management/lwc/logJSON/__tests__/logJSON.test.js
deleted file mode 100644
index d0063f41f..000000000
--- a/nebula-logger/core/main/log-management/lwc/logJSON/__tests__/logJSON.test.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import { createElement } from 'lwc';
-import LogJSON from 'c/logJSON';
-import getLog from '@salesforce/apex/Logger.getLog';
-import { registerApexTestWireAdapter } from '@salesforce/sfdx-lwc-jest';
-
-// Mock data
-const mockGetLog = require('./data/getLog.json');
-
-// Register a test wire adapter
-const getLogAdapter = registerApexTestWireAdapter(getLog);
-
-document.execCommand = jest.fn();
-
-jest.mock(
- '@salesforce/apex/Logger.getLog',
- () => {
- return {
- default: () => mockGetLog
- };
- },
- { virtual: true }
-);
-
-describe('Logger JSON Viewer lwc tests', () => {
- afterEach(() => {
- while (document.body.firstChild) {
- document.body.removeChild(document.body.firstChild);
- }
- jest.clearAllMocks();
- });
-
- it('sets document title', async () => {
- const logViewerElement = createElement('c-log-json', { is: LogJSON });
- document.body.appendChild(logViewerElement);
- getLogAdapter.emit(mockGetLog);
-
- await Promise.resolve();
- expect(logViewerElement.title).toEqual('JSON for ' + mockGetLog.Name);
- });
-
- it('defaults to brand button variant', async () => {
- const logViewer = createElement('c-log-json', { is: LogJSON });
- document.body.appendChild(logViewer);
-
- getLogAdapter.emit(mockGetLog);
-
- await Promise.resolve();
- const inputButton = logViewer.shadowRoot.querySelector('lightning-button-stateful');
- expect(logViewer.title).toEqual('JSON for ' + mockGetLog.Name);
- expect(inputButton.variant).toEqual('brand');
- });
-
- it('copies the JSON to the clipboard', async () => {
- const logViewer = createElement('c-log-json', { is: LogJSON });
- document.body.appendChild(logViewer);
-
- getLogAdapter.emit(mockGetLog);
-
- // Resolve a promise to wait for a rerender of the new content
- return Promise.resolve()
- .then(() => {
- let copyJsonBtn = logViewer.shadowRoot.querySelector('lightning-button-stateful[data-id="copy-json-btn"]');
- copyJsonBtn.click();
- })
- .then(() => {
- const clipboardContent = JSON.parse(logViewer.shadowRoot.querySelector('pre').textContent);
- expect(clipboardContent).toEqual(mockGetLog);
- expect(document.execCommand).toHaveBeenCalledWith('copy');
- });
- });
-});
diff --git a/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.css b/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.css
deleted file mode 100644
index ed52f8b6a..000000000
--- a/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.css
+++ /dev/null
@@ -1,11 +0,0 @@
-pre {
- max-height: 500px;
- margin: auto 10px;
- overflow-y: scroll;
-}
-
-.slds-modal__content {
- overflow-y: hidden !important;
- height: unset !important;
- max-height: unset !important;
-}
diff --git a/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.html b/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.html
deleted file mode 100644
index 063f43544..000000000
--- a/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
- {logJSON}
-
-
-
-
-
-
diff --git a/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.js b/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.js
deleted file mode 100644
index e55298e16..000000000
--- a/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/*************************************************************************************************
- * This file is part of the Nebula Logger project, released under the MIT License. *
- * See LICENSE file or go to https://github.com/jongpie/NebulaLogger for full license details. *
- ************************************************************************************************/
-
-import { api, LightningElement, wire } from 'lwc';
-import getLog from '@salesforce/apex/Logger.getLog';
-
-export default class LogJSON extends LightningElement {
- @api
- recordId;
-
- log;
- logJSON;
- jsonCopied = false;
-
- @wire(getLog, { logId: '$recordId' })
- wiredGetLog(result) {
- this.log = result;
-
- let formattedLog;
- // Sort the keys (fields) in the log object
- if (result.data) {
- formattedLog = Object.keys(result.data)
- .sort()
- .reduce((obj, key) => {
- obj[key] = result.data[key];
- return obj;
- }, {});
- }
- this.logJSON = JSON.stringify(formattedLog, null, '\t');
- }
-
- @api
- get title() {
- return this.log.data ? 'JSON for ' + this.log.data.Name : '';
- }
-
- get variant() {
- return this.jsonCopied ? 'success' : 'brand';
- }
-
- async copyToClipboard() {
- const value = this.template.querySelector('pre').textContent;
-
- const textArea = document.createElement('textarea');
- textArea.value = value;
- // Avoid scrolling to bottom
- textArea.style.top = '0';
- textArea.style.left = '0';
- textArea.style.position = 'fixed';
-
- document.body.appendChild(textArea);
- textArea.focus();
- textArea.select();
- document.execCommand('copy');
- document.body.removeChild(textArea);
-
- /* eslint-disable-next-line no-console */
- console.log('Log data successfully copied to clipboard', JSON.parse(value));
- this.jsonCopied = true;
-
- /* eslint-disable-next-line @lwc/lwc/no-async-operation */
- setTimeout(() => {
- this.jsonCopied = false;
- }, 5000);
- }
-}
diff --git a/nebula-logger/core/main/log-management/lwc/logViewer/__tests__/data/getLog.json b/nebula-logger/core/main/log-management/lwc/logViewer/__tests__/data/getLog.json
new file mode 100644
index 000000000..051b2cfec
--- /dev/null
+++ b/nebula-logger/core/main/log-management/lwc/logViewer/__tests__/data/getLog.json
@@ -0,0 +1,849 @@
+{
+ "ApiReleaseNumber__c": "236.12",
+ "ApiReleaseVersion__c": "Spring '22 Patch 12",
+ "ApiVersion__c": "v54.0",
+ "CreatedById": "0051h000008NoMwAAK",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "EndTime__c": "2022-03-09T05:22:50.000Z",
+ "Id": "a021h000004AXYMAA4",
+ "IsClosed__c": false,
+ "IsDeleted": false,
+ "IsResolved__c": false,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LastModifiedDate": "2022-03-09T05:22:57.000Z",
+ "LastReferencedDate": "2022-03-09T05:47:29.000Z",
+ "LastViewedDate": "2022-03-09T05:47:29.000Z",
+ "Locale__c": "en_US",
+ "LogEntriesSummary__c": "9 total entries, 1 error(s), 1 warning(s)",
+ "LogEntries__r": [
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "LoggingLevelWithImage__c": " FINEST",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": false,
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": false,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 132,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "Logger - Saving 8 log entries via Anonymous Apex, save method is EVENT_BUS",
+ "Id": "a011h000005P8h7AAC",
+ "LoggingLevelOrdinal__c": 2,
+ "MessageTruncated__c": false,
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "TransactionEntryNumber__c": 9,
+ "LimitsSoqlQueryRows__c": "4 / 50000",
+ "HasRecordId__c": false,
+ "LimitsSoqlQueries__c": "4 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 4,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": false,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "132 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8h7",
+ "StackTrace__c": "AnonymousBlock: line 21, column 1\nAnonymousBlock: line 21, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "41745 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "EventUuid__c": "9dadd636-3d40-492a-913a-3add99824912",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 41745,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "FINEST",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370189,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 4
+ },
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "LoggingLevelWithImage__c": " FINEST",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": false,
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": false,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 122,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "Example FINEST entry",
+ "Id": "a011h000005P8h6AAC",
+ "LoggingLevelOrdinal__c": 2,
+ "MessageTruncated__c": false,
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "TransactionEntryNumber__c": 8,
+ "LimitsSoqlQueryRows__c": "4 / 50000",
+ "HasRecordId__c": false,
+ "LimitsSoqlQueries__c": "4 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 4,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": false,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "122 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8h6",
+ "StackTrace__c": "AnonymousBlock: line 19, column 1\nAnonymousBlock: line 19, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "37516 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "EventUuid__c": "58747fda-b991-4d44-86f1-892eb288f94e",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 37516,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "FINEST",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370178,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 4
+ },
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "LoggingLevelWithImage__c": " FINER",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": false,
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": false,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 113,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "Example FINER entry",
+ "Id": "a011h000005P8h5AAC",
+ "LoggingLevelOrdinal__c": 3,
+ "MessageTruncated__c": false,
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "TransactionEntryNumber__c": 7,
+ "LimitsSoqlQueryRows__c": "4 / 50000",
+ "HasRecordId__c": false,
+ "LimitsSoqlQueries__c": "4 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 4,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": false,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "113 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8h5",
+ "StackTrace__c": "AnonymousBlock: line 18, column 1\nAnonymousBlock: line 18, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "33429 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "EventUuid__c": "f5c18382-72ba-4808-8319-56cdfe27916f",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 33429,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "FINER",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370169,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 4
+ },
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "LoggingLevelWithImage__c": " FINE",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": false,
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": false,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 104,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "Example FINE entry",
+ "Id": "a011h000005P8h4AAC",
+ "LoggingLevelOrdinal__c": 4,
+ "MessageTruncated__c": false,
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "TransactionEntryNumber__c": 6,
+ "LimitsSoqlQueryRows__c": "4 / 50000",
+ "HasRecordId__c": false,
+ "LimitsSoqlQueries__c": "4 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 4,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": false,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "104 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8h4",
+ "StackTrace__c": "AnonymousBlock: line 17, column 1\nAnonymousBlock: line 17, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "29340 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "EventUuid__c": "ea49c0ac-234a-4793-bff5-cfcf0bb0685b",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 29340,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "FINE",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370159,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 4
+ },
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "RecordSObjectClassification__c": "Standard Object",
+ "LoggingLevelWithImage__c": " DEBUG",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": false,
+ "RecordLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": false,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "RecordId__c": "0051h000008NoMxAAK",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 94,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "Example DEBUG entry for just a record ID",
+ "Id": "a011h000005P8h3AAC",
+ "LoggingLevelOrdinal__c": 5,
+ "MessageTruncated__c": false,
+ "RecordSObjectType__c": "User",
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "RecordDetailedLink__c": "User: test-sgpopgvvyplr@example.com",
+ "TransactionEntryNumber__c": 5,
+ "LimitsSoqlQueryRows__c": "4 / 50000",
+ "HasRecordId__c": true,
+ "LimitsSoqlQueries__c": "4 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 4,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": false,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "RecordCollectionType__c": "Single",
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "94 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8h3",
+ "StackTrace__c": "AnonymousBlock: line 16, column 1\nAnonymousBlock: line 16, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "25114 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "RecordName__c": "test-sgpopgvvyplr@example.com",
+ "EventUuid__c": "4b1cbe02-9778-4472-a5c1-8de2a25cc9b7",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 25114,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "DEBUG",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370149,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 4
+ },
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "RecordJson__c": "{\n \"attributes\" : {\n \"type\" : \"User\",\n \"url\" : \"/services/data/v54.0/sobjects/User/0051h000008NoMxAAK\"\n },\n \"Id\" : \"0051h000008NoMxAAK\",\n \"Name\" : \"User User\",\n \"Username\" : \"test-sgpopgvvyplr@example.com\",\n \"ProfileId\" : \"00e1h000000xTOgAAM\",\n \"Profile\" : {\n \"attributes\" : {\n \"type\" : \"Profile\",\n \"url\" : \"/services/data/v54.0/sobjects/Profile/00e1h000000xTOgAAM\"\n },\n \"Id\" : \"00e1h000000xTOgAAM\",\n \"Name\" : \"System Administrator\"\n },\n \"AboutMe\" : \"I hope you dont leak my social, which is XXX-XX-9999, btw.\"\n}",
+ "RecordSObjectClassification__c": "Standard Object",
+ "LoggingLevelWithImage__c": " DEBUG",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": false,
+ "RecordLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": true,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "RecordId__c": "0051h000008NoMxAAK",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 85,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "Example DEBUG entry",
+ "Id": "a011h000005P8h2AAC",
+ "LoggingLevelOrdinal__c": 5,
+ "MessageTruncated__c": false,
+ "RecordSObjectType__c": "User",
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "RecordDetailedLink__c": "User: test-sgpopgvvyplr@example.com",
+ "TransactionEntryNumber__c": 4,
+ "LimitsSoqlQueryRows__c": "4 / 50000",
+ "HasRecordId__c": true,
+ "LimitsSoqlQueries__c": "4 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 4,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": true,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "RecordCollectionType__c": "Single",
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "85 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8h2",
+ "StackTrace__c": "AnonymousBlock: line 15, column 1\nAnonymousBlock: line 15, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "20253 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "RecordName__c": "test-sgpopgvvyplr@example.com",
+ "EventUuid__c": "5c2ffa21-1c7b-421b-813e-cbd7971cb446",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 20253,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "DEBUG",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370138,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 4
+ },
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "RecordJson__c": "{\n \"attributes\" : {\n \"type\" : \"User\",\n \"url\" : \"/services/data/v54.0/sobjects/User/0051h000008NoMxAAK\"\n },\n \"Id\" : \"0051h000008NoMxAAK\",\n \"Name\" : \"User User\",\n \"Username\" : \"test-sgpopgvvyplr@example.com\",\n \"ProfileId\" : \"00e1h000000xTOgAAM\",\n \"Profile\" : {\n \"attributes\" : {\n \"type\" : \"Profile\",\n \"url\" : \"/services/data/v54.0/sobjects/Profile/00e1h000000xTOgAAM\"\n },\n \"Id\" : \"00e1h000000xTOgAAM\",\n \"Name\" : \"System Administrator\"\n },\n \"AboutMe\" : \"I hope you dont leak my social, which is XXX-XX-9999, btw.\"\n}",
+ "RecordSObjectClassification__c": "Standard Object",
+ "LoggingLevelWithImage__c": " INFO",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": true,
+ "RecordLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": true,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "RecordId__c": "0051h000008NoMxAAK",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 74,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "In case you want to steal my identity, my fake social is XXX-XX-9999, thanks",
+ "Id": "a011h000005P8h1AAC",
+ "LoggingLevelOrdinal__c": 6,
+ "MessageTruncated__c": false,
+ "RecordSObjectType__c": "User",
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "RecordDetailedLink__c": "User: test-sgpopgvvyplr@example.com",
+ "TransactionEntryNumber__c": 3,
+ "LimitsSoqlQueryRows__c": "4 / 50000",
+ "HasRecordId__c": true,
+ "LimitsSoqlQueries__c": "4 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 4,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": true,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "RecordCollectionType__c": "Single",
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "74 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8h1",
+ "StackTrace__c": "AnonymousBlock: line 14, column 1\nAnonymousBlock: line 14, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "15333 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "RecordName__c": "test-sgpopgvvyplr@example.com",
+ "EventUuid__c": "c780f79c-d24c-4a2c-84bb-be06249debb0",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 15333,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "INFO",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370126,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 4
+ },
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "LoggingLevelWithImage__c": " WARN",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": true,
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": false,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 68,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "Here is my fake Mastercard credit card ****-****-****-0005, please don't steal it",
+ "Id": "a011h000005P8h0AAC",
+ "LoggingLevelOrdinal__c": 7,
+ "MessageTruncated__c": false,
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "TransactionEntryNumber__c": 2,
+ "LimitsSoqlQueryRows__c": "4 / 50000",
+ "HasRecordId__c": false,
+ "LimitsSoqlQueries__c": "4 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 4,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": false,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "68 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8h0",
+ "StackTrace__c": "AnonymousBlock: line 13, column 1\nAnonymousBlock: line 13, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "11116 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "EventUuid__c": "9b68c3c3-e2f2-41e8-b4a2-b5470dfcde84",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 11116,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "WARN",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370120,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 4
+ },
+ {
+ "LastModifiedDate": "2022-03-09T05:22:53.000Z",
+ "HasException__c": false,
+ "LimitsMobilePushApexCalls__c": "0 / 10",
+ "LoggingLevelWithImage__c": " ERROR",
+ "HasDatabaseResult__c": false,
+ "LimitsAggregateQueries__c": "0 / 300",
+ "MessageMasked__c": true,
+ "LimitsSoqlQueryRowsMax__c": 50000,
+ "HasRecordJson__c": false,
+ "LimitsCalloutsMax__c": 100,
+ "LimitsEmailInvocationsUsed__c": 0,
+ "IsDeleted": false,
+ "LimitsCalloutsUsed__c": 0,
+ "Log__c": "a021h000004AXYMAA4",
+ "LimitsDmlRowsMax__c": 10000,
+ "LimitsCpuTimeUsed__c": 30,
+ "LimitsQueueableJobsMax__c": 50,
+ "LimitsPublishImmediateDmlStatementsUsed__c": 0,
+ "LimitsSoslSearchesUsed__c": 0,
+ "LimitsDmlStatementsMax__c": 150,
+ "Message__c": "Here is my fake Visa credit card\n\n ****-****-****-0004,\n\n\n please don't steal it",
+ "Id": "a011h000005P8gzAAC",
+ "LoggingLevelOrdinal__c": 8,
+ "MessageTruncated__c": false,
+ "LimitsQueueableJobsUsed__c": 0,
+ "LimitsPublishImmediateDmlStatements__c": "0 / 150",
+ "TransactionEntryNumber__c": 1,
+ "LimitsSoqlQueryRows__c": "1 / 50000",
+ "HasRecordId__c": false,
+ "LimitsSoqlQueries__c": "1 / 100",
+ "LimitsSoqlQueryRowsUsed__c": 1,
+ "Timestamp__c": "2022-03-09T05:22:50.000Z",
+ "LimitsDmlRowsUsed__c": 0,
+ "LimitsMobilePushApexCallsUsed__c": 0,
+ "RecordJsonMasked__c": false,
+ "LimitsAggregateQueriesMax__c": 300,
+ "SystemModstamp": "2022-03-09T05:22:53.000Z",
+ "LimitsCallouts__c": "0 / 100",
+ "LimitsSoqlQueriesMax__c": 100,
+ "LimitsDmlStatements__c": "0 / 150",
+ "LimitsSoslSearches__c": "0 / 20",
+ "LogTransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "LimitsPublishImmediateDmlStatementsMax__c": 150,
+ "LimitsFutureCallsUsed__c": 0,
+ "LimitsCpuTime__c": "30 / 10000",
+ "OriginLocation__c": "AnonymousBlock",
+ "LimitsDmlStatementsUsed__c": 0,
+ "Name": "a011h000005P8gz",
+ "StackTrace__c": "AnonymousBlock: line 12, column 1\nAnonymousBlock: line 12, column 1",
+ "HasStackTrace__c": true,
+ "LimitsSoslSearchesMax__c": 20,
+ "CreatedById": "0051h000008NoMwAAK",
+ "HasExceptionStackTrace__c": false,
+ "LimitsDmlRows__c": "0 / 10000",
+ "LimitsFutureCallsMax__c": 50,
+ "LimitsHeapSizeMax__c": 6000000,
+ "LimitsHeapSize__c": "5472 / 6000000",
+ "CreatedDate": "2022-03-09T05:22:53.000Z",
+ "LimitsSoqlQueryLocatorRowsUsed__c": 0,
+ "LimitsAsyncCalls__c": "0 / 200",
+ "LimitsCpuTimeMax__c": 10000,
+ "EventUuid__c": "5a1678b2-82b6-4228-8907-a0df605bda03",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LimitsQueueableJobs__c": "0 / 50",
+ "LimitsSoqlQueryLocatorRows__c": "0 / 10000",
+ "LimitsHeapSizeUsed__c": 5472,
+ "TriggerIsExecuting__c": false,
+ "LimitsMobilePushApexCallsMax__c": 10,
+ "Origin__c": "Apex.AnonymousBlock",
+ "LimitsAsyncCallsMax__c": 200,
+ "LimitsAsyncCallsUsed__c": 0,
+ "LoggingLevel__c": "ERROR",
+ "LimitsAggregateQueriesUsed__c": 0,
+ "LimitsEmailInvocations__c": "0 / 10",
+ "OriginType__c": "Apex",
+ "LimitsFutureCalls__c": "0 / 50",
+ "EpochTimestamp__c": 1646803370023,
+ "LimitsSoqlQueryLocatorRowsMax__c": 10000,
+ "LimitsEmailInvocationsMax__c": 10,
+ "LastModifiedById": "0051h000008NoMwAAK",
+ "LimitsSoqlQueriesUsed__c": 1
+ }
+ ],
+ "LogRetentionDate__c": "2022-03-22",
+ "LoggedByUsernameLink__c": "test-sgpopgvvyplr@example.com",
+ "LoggedByUsername__c": "test-sgpopgvvyplr@example.com",
+ "LoggedBy__c": "0051h000008NoMxAAK",
+ "LoggerVersionNumber__c": "v4.7.0",
+ "LoginApplication__c": "Salesforce CLI",
+ "LoginBrowser__c": "Unknown",
+ "LoginHistoryId__c": "0Ya1h00000yEUrXCAW",
+ "LoginPlatform__c": "Unknown",
+ "LoginType__c": "Remote Access 2.0",
+ "MaxLogEntryLoggingLevelOrdinal__c": 8,
+ "Name": "Log-000004",
+ "OrganizationDomainUrl__c": "https://velocity-nosoftware-48362.cs79.my.salesforce.com",
+ "OrganizationEnvironmentType__c": "Scratch Org",
+ "OrganizationId__c": "00D1h000000MNKZEA4",
+ "OrganizationInstanceName__c": "CS79",
+ "OrganizationName__c": "Nebula Logger - Base Scratch Org",
+ "OrganizationType__c": "Enterprise Edition",
+ "Owner": {
+ "Type": "User",
+ "Id": "0051h000008NoMxAAK",
+ "Name": "User User"
+ },
+ "OwnerId": "0051h000008NoMxAAK",
+ "Priority__c": "High",
+ "ProfileId__c": "00e1h000000xTOgAAM",
+ "ProfileLink__c": "System Administrator",
+ "ProfileName__c": "System Administrator",
+ "Scenario__c": "an example transaction scenario name",
+ "SendSlackNotification__c": true,
+ "SessionId__c": "0Ak1h00001MhxLcCAJ",
+ "SessionSecurityLevel__c": "STANDARD",
+ "SessionType__c": "Oauth2",
+ "SourceIp__c": "Salesforce.com IP",
+ "StartTime__c": "2022-03-09T05:22:50.000Z",
+ "Status__c": "New",
+ "SystemModeSummary__c": "API.v54.0.ANONYMOUS",
+ "SystemMode__c": "ANONYMOUS",
+ "SystemModstamp": "2022-03-09T05:22:57.000Z",
+ "TimeZoneId__c": "America/Los_Angeles",
+ "TimeZoneName__c": "(GMT-08:00) Pacific Standard Time (America/Los_Angeles)",
+ "TotalDEBUGLogEntries__c": 2,
+ "TotalERRORLogEntries__c": 1,
+ "TotalFINELogEntries__c": 1,
+ "TotalFINERLogEntries__c": 1,
+ "TotalFINESTLogEntries__c": 2,
+ "TotalINFOLogEntries__c": 1,
+ "TotalLimitsCpuTimeUsed__c": 132,
+ "TotalLogEntries__c": 9,
+ "TotalWARNLogEntries__c": 1,
+ "TransactionId__c": "4heTw6JlPFkvtu-qbxkog-",
+ "UserLicenseDefinitionKey__c": "SFDC",
+ "UserLicenseId__c": "1001h000000abKhAAI",
+ "UserLicenseName__c": "Salesforce",
+ "UserLoggingLevelOrdinal__c": 2,
+ "UserLoggingLevel__c": "FINEST",
+ "UserRoleLink__c": " ",
+ "UserType__c": "Standard",
+ "WasLoggedByCurrentUser__c": true
+}
diff --git a/nebula-logger/core/main/log-management/lwc/logViewer/__tests__/logViewer.test.js b/nebula-logger/core/main/log-management/lwc/logViewer/__tests__/logViewer.test.js
new file mode 100644
index 000000000..201c7b6cd
--- /dev/null
+++ b/nebula-logger/core/main/log-management/lwc/logViewer/__tests__/logViewer.test.js
@@ -0,0 +1,112 @@
+import { createElement } from 'lwc';
+import LogViewer from 'c/logViewer';
+import getLog from '@salesforce/apex/Logger.getLog';
+import { registerApexTestWireAdapter } from '@salesforce/sfdx-lwc-jest';
+
+// Mock data
+const mockGetLog = require('./data/getLog.json');
+
+// Register a test wire adapter
+const getLogAdapter = registerApexTestWireAdapter(getLog);
+
+document.execCommand = jest.fn();
+
+jest.mock(
+ '@salesforce/apex/Logger.getLog',
+ () => {
+ return {
+ default: () => mockGetLog
+ };
+ },
+ { virtual: true }
+);
+
+test.todo('test for downloading JSON file');
+test.todo('test for downloading log file');
+
+describe('Logger JSON Viewer lwc tests', () => {
+ afterEach(() => {
+ while (document.body.firstChild) {
+ document.body.removeChild(document.body.firstChild);
+ }
+ jest.clearAllMocks();
+ });
+
+ it('sets document title', async () => {
+ const logViewerElement = createElement('c-log-viewer', { is: LogViewer });
+ document.body.appendChild(logViewerElement);
+ getLogAdapter.emit(mockGetLog);
+
+ await Promise.resolve();
+ expect(logViewerElement.title).toEqual(mockGetLog.Name);
+ });
+
+ it('defaults to brand button variant', async () => {
+ const logViewer = createElement('c-log-viewer', { is: LogViewer });
+ document.body.appendChild(logViewer);
+
+ getLogAdapter.emit(mockGetLog);
+
+ await Promise.resolve();
+ const inputButton = logViewer.shadowRoot.querySelector('lightning-button-stateful');
+ expect(logViewer.title).toEqual(mockGetLog.Name);
+ expect(inputButton.variant).toEqual('brand');
+ });
+
+ it('copies the JSON to the clipboard', async () => {
+ const logViewer = createElement('c-log-viewer', { is: LogViewer });
+ document.body.appendChild(logViewer);
+
+ getLogAdapter.emit(mockGetLog);
+
+ return Promise.resolve()
+ .then(() => {
+ let copyBtn = logViewer.shadowRoot.querySelector('lightning-button-stateful[data-id="copy-btn"]');
+ copyBtn.click();
+ })
+ .then(() => {
+ const tab = logViewer.shadowRoot.querySelector('lightning-tab[data-id="json-content"]');
+ expect(tab.value).toEqual('json');
+ tab.dispatchEvent(new CustomEvent('active'));
+ })
+ .then(() => {
+ const clipboardContent = JSON.parse(logViewer.shadowRoot.querySelector('pre').textContent);
+ expect(clipboardContent).toEqual(mockGetLog);
+ expect(document.execCommand).toHaveBeenCalledWith('copy');
+ });
+ });
+
+ it('copies the log file to the clipboard', async () => {
+ const logViewer = createElement('c-log-viewer', { is: LogViewer });
+ document.body.appendChild(logViewer);
+
+ getLogAdapter.emit(mockGetLog);
+
+ return Promise.resolve()
+ .then(() => {
+ let copyBtn = logViewer.shadowRoot.querySelector('lightning-button-stateful[data-id="copy-btn"]');
+ copyBtn.click();
+ })
+ .then(() => {
+ const tab = logViewer.shadowRoot.querySelector('lightning-tab[data-id="file-content"]');
+ expect(tab.value).toEqual('file');
+ tab.dispatchEvent(new CustomEvent('active'));
+ })
+ .then(() => {
+ let expectedContentLines = [];
+ mockGetLog.LogEntries__r.forEach(logEntry => {
+ const columns = [];
+ columns.push(new Date(logEntry.EpochTimestamp__c).toISOString());
+ columns.push(logEntry.LoggingLevel__c);
+ columns.push(logEntry.StackTrace__c?.split('\n')[0]);
+ columns.push(logEntry.Message__c);
+
+ expectedContentLines.push(columns.join(' | '));
+ });
+
+ const clipboardContent = logViewer.shadowRoot.querySelector('pre').textContent;
+ expect(clipboardContent).toEqual(expectedContentLines.join('\n'));
+ expect(document.execCommand).toHaveBeenCalledWith('copy');
+ });
+ });
+});
diff --git a/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.css b/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.css
new file mode 100644
index 000000000..d35f572f0
--- /dev/null
+++ b/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.css
@@ -0,0 +1,9 @@
+.content {
+ height: calc(100vh - 550px);
+}
+
+.content pre {
+ height: 100%;
+ margin: auto 10px;
+ overflow-y: scroll;
+}
diff --git a/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.html b/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.html
new file mode 100644
index 000000000..dfda55ed1
--- /dev/null
+++ b/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.js b/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.js
new file mode 100644
index 000000000..583eb7fbd
--- /dev/null
+++ b/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.js
@@ -0,0 +1,130 @@
+/*************************************************************************************************
+ * This file is part of the Nebula Logger project, released under the MIT License. *
+ * See LICENSE file or go to https://github.com/jongpie/NebulaLogger for full license details. *
+ ************************************************************************************************/
+
+import { LightningElement, api, wire } from 'lwc';
+import getLog from '@salesforce/apex/Logger.getLog';
+import EPOCH_TIMESTAMP_FIELD from '@salesforce/schema/LogEntry__c.EpochTimestamp__c';
+import LOGGING_LEVEL_FIELD from '@salesforce/schema/LogEntry__c.LoggingLevel__c';
+import MESSAGE_FIELD from '@salesforce/schema/LogEntry__c.Message__c';
+import STACK_TRACE_FIELD from '@salesforce/schema/LogEntry__c.StackTrace__c';
+
+export default class LogViewer extends LightningElement {
+ @api
+ recordId;
+
+ isLoaded = false;
+ log = {};
+ currentMode = {};
+ dataCopied = false;
+
+ _logFileContent;
+ _logJSONContent;
+
+ @wire(getLog, { logId: '$recordId' })
+ wiredGetLog(result) {
+ if (result.data) {
+ this.log = result.data;
+ this._loadLogFileContent();
+ this._loadLogJSONContent();
+ this.isLoaded = true;
+ }
+ }
+
+ @api
+ get title() {
+ return this.log?.Name;
+ }
+
+ get variant() {
+ return this.dataCopied ? 'success' : 'brand';
+ }
+
+ get downloadButtonLabel() {
+ return `Download ${this.currentMode?.label}`;
+ }
+
+ handleTabActivated(event) {
+ this.currentMode = {
+ label: event.target.label,
+ value: event.target.value
+ };
+
+ switch (this.currentMode.value) {
+ case 'file':
+ this.currentMode.data = this._logFileContent;
+ this.currentMode.extension = 'log';
+ break;
+ case 'json':
+ this.currentMode.data = this._logJSONContent;
+ this.currentMode.extension = 'json';
+ break;
+ }
+ }
+
+ async copyToClipboard() {
+ // const value = this.template.querySelector('pre').textContent;
+ const value = this.currentMode.data;
+
+ const textArea = document.createElement('textarea');
+ textArea.value = value;
+ // Avoid scrolling to bottom
+ textArea.style.top = '0';
+ textArea.style.left = '0';
+ textArea.style.position = 'fixed';
+
+ document.body.appendChild(textArea);
+ textArea.focus();
+ textArea.select();
+ document.execCommand('copy');
+ document.body.removeChild(textArea);
+
+ /* eslint-disable-next-line no-console */
+ console.log('Log data successfully copied to clipboard', value);
+ this.dataCopied = true;
+
+ /* eslint-disable-next-line @lwc/lwc/no-async-operation */
+ setTimeout(() => {
+ this.dataCopied = false;
+ }, 5000);
+ }
+
+ async downloadFile() {
+ const exportedFilename = this.log.Name + '_' + this.log.OrganizationId__c + '.' + this.currentMode.extension;
+ const encodedValue = encodeURIComponent(this.currentMode.data);
+
+ const link = window.document.createElement('a');
+ link.href = 'data:text;charset=utf-8,' + encodedValue;
+ link.target = '_blank';
+ link.download = exportedFilename;
+ link.click();
+ }
+
+ _loadLogFileContent() {
+ const fieldDelimiter = '\n';
+ const lineDelimiter = '\n\n' + '-'.repeat(36) + '\n\n';
+ const logFileLines = [];
+ this.log.LogEntries__r.forEach(logEntry => {
+ const columns = [];
+ columns.push('[' + new Date(logEntry[EPOCH_TIMESTAMP_FIELD.fieldApiName]).toISOString() + ' - ' + logEntry[LOGGING_LEVEL_FIELD.fieldApiName] + ']');
+ columns.push('[Message]\n' + logEntry[MESSAGE_FIELD.fieldApiName]);
+ columns.push('\n[Stack Trace]\n' + logEntry[STACK_TRACE_FIELD.fieldApiName]);
+
+ logFileLines.push(columns.join(fieldDelimiter));
+ });
+ this._logFileContent = logFileLines.join(lineDelimiter);
+ }
+
+ _loadLogJSONContent() {
+ // Sort the keys (fields) in the log object
+ let formattedLog;
+ formattedLog = Object.keys(this.log)
+ .sort()
+ .reduce((obj, key) => {
+ obj[key] = this.log[key];
+ return obj;
+ }, {});
+ this._logJSONContent = JSON.stringify(formattedLog, null, '\t');
+ }
+}
diff --git a/nebula-logger/core/main/log-management/lwc/logJSON/logJSON.js-meta.xml b/nebula-logger/core/main/log-management/lwc/logViewer/logViewer.js-meta.xml
similarity index 100%
rename from nebula-logger/core/main/log-management/lwc/logJSON/logJSON.js-meta.xml
rename to nebula-logger/core/main/log-management/lwc/logViewer/logViewer.js-meta.xml
diff --git a/nebula-logger/core/main/log-management/quickActions/Log__c.ViewLogJSON.quickAction-meta.xml b/nebula-logger/core/main/log-management/quickActions/Log__c.OpenViewer.quickAction-meta.xml
similarity index 58%
rename from nebula-logger/core/main/log-management/quickActions/Log__c.ViewLogJSON.quickAction-meta.xml
rename to nebula-logger/core/main/log-management/quickActions/Log__c.OpenViewer.quickAction-meta.xml
index 47d562200..731bca851 100644
--- a/nebula-logger/core/main/log-management/quickActions/Log__c.ViewLogJSON.quickAction-meta.xml
+++ b/nebula-logger/core/main/log-management/quickActions/Log__c.OpenViewer.quickAction-meta.xml
@@ -1,9 +1,9 @@
ScreenAction
- Shows the current log & log entries in JSON format
-
- logJSON
+ Shows the current log & log entries in different formats
+
+ logViewer
false
LightningWebComponent
diff --git a/nebula-logger/core/main/logger-engine/classes/Logger.cls b/nebula-logger/core/main/logger-engine/classes/Logger.cls
index 8914bd751..8781cc8bc 100644
--- a/nebula-logger/core/main/logger-engine/classes/Logger.cls
+++ b/nebula-logger/core/main/logger-engine/classes/Logger.cls
@@ -2646,9 +2646,13 @@ global with sharing class Logger {
logFieldNames.addAll(new List{ 'Owner.Name', 'Owner.Type' });
List logEntryFieldNames = new List(Schema.LogEntry__c.SObjectType.getDescribe().fields.getMap().keySet());
- List textReplacements = new List{ String.join(logFieldNames, ','), String.join(logEntryFieldNames, ',') };
+ List textReplacements = new List{
+ String.join(logFieldNames, ','),
+ String.join(logEntryFieldNames, ','),
+ Schema.LogEntry__c.TransactionEntryNumber__c.getDescribe().getName()
+ };
String query = String.format(
- 'SELECT {0}, (SELECT {1} FROM LogEntries__r) FROM Log__c WHERE Id = :logId OR TransactionId__c = :logId',
+ 'SELECT {0}, (SELECT {1} FROM LogEntries__r ORDER BY {2}) FROM Log__c WHERE Id = :logId OR TransactionId__c = :logId',
textReplacements
);
diff --git a/nebula-logger/managed-package/core/main/deprecated/aura/logJSONViewer/logJSONViewer.cmp b/nebula-logger/managed-package/core/main/deprecated/aura/logJSONViewer/logJSONViewer.cmp
index dc752f767..ce545d878 100644
--- a/nebula-logger/managed-package/core/main/deprecated/aura/logJSONViewer/logJSONViewer.cmp
+++ b/nebula-logger/managed-package/core/main/deprecated/aura/logJSONViewer/logJSONViewer.cmp
@@ -4,5 +4,5 @@
**********************************************************************************************-->
- This component has been deprecated - please instead use the lwc logJSON
+ This component has been deprecated - please instead use the lwc logViewer
diff --git a/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.html b/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.html
deleted file mode 100644
index cdfb780ad..000000000
--- a/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- This component has been deprecated - please instead use the lwc logJSON
diff --git a/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.js b/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.js
deleted file mode 100644
index ba5552f76..000000000
--- a/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*************************************************************************************************
- * This file is part of the Nebula Logger project, released under the MIT License. *
- * See LICENSE file or go to https://github.com/jongpie/NebulaLogger for full license details. *
- ************************************************************************************************/
-
-import { LightningElement } from 'lwc';
-
-export default class LogViewer extends LightningElement {}
diff --git a/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.js-meta.xml b/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.js-meta.xml
deleted file mode 100644
index e4e51b24e..000000000
--- a/nebula-logger/managed-package/core/main/deprecated/lwc/logViewer/logViewer.js-meta.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 53.0
- true
-