You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'd like to be able to have a single log record created when a batch job is executed containing a series of log entry records , but it seems that the mechanism documented as below creates a new log record for the start, each execute and the finish, resulting in hundreds (or thousands) of log records when there are many batches to process
==== Code from the readme ======
public with sharing class BatchableLoggerExample implements Database.Batchable, Database.Stateful {
private String originalTransactionId;
public Database.QueryLocator start(Database.BatchableContext batchableContext) {
// Each batchable method runs in a separate transaction,
// so store the first transaction ID to later relate the other transactions
this.originalTransactionId = Logger.getTransactionId();
Logger.info('Starting BatchableLoggerExample');
Logger.saveLog();
// Just as an example, query all accounts
return Database.getQueryLocator([SELECT Id, Name, RecordTypeId FROM Account]);
}
public void execute(Database.BatchableContext batchableContext, List<Account> scope) {
// One-time call (per transaction) to set the parent log
Logger.setParentLogTransactionId(this.originalTransactionId);
for (Account account : scope) {
// Add your batch job's logic here
// Then log the result
Logger.info('Processed an account record', account);
}
Logger.saveLog();
}
public void finish(Database.BatchableContext batchableContext) {
// The finish method runs in yet-another transaction, so set the parent log again
Logger.setParentLogTransactionId(this.originalTransactionId);
Logger.info('Finishing running BatchableLoggerExample');
Logger.saveLog();
}
}
The text was updated successfully, but these errors were encountered:
Ah yes, I think you are right. When I raised it I thought that I remembered something similar but I couldn't find it in the issues list. I expect it's because this is a completely different project at a VERY different scale where I'm getting hundreds of batch Apex executions which makes the noise factor much more significant
How is your thinking progressing on a solution? Might there be an option to get transaction ID rather then the parent transactionID and set that for all subsequent batches?
@stephengoodcloud no worries, I'll close this as a duplicate & will keep #499 to track this.
At the moment, I still don't have a solution designed for this, but I'm hoping to revisit it later this year. I don't plan to change the the behavior of when/how Log__c records are created, but hope to provide some better reporting & viewing capabilities so you can see all of the LogEntry__c records across related Log__c records.
New Feature Summary
I'd like to be able to have a single log record created when a batch job is executed containing a series of log entry records , but it seems that the mechanism documented as below creates a new log record for the start, each execute and the finish, resulting in hundreds (or thousands) of log records when there are many batches to process
==== Code from the readme ======
public with sharing class BatchableLoggerExample implements Database.Batchable, Database.Stateful {
private String originalTransactionId;
}
The text was updated successfully, but these errors were encountered: