pentaho/pentaho-kettle · error · KettleJobException
Unable to begin processing by logging start in logtable
Error message
Unable to begin processing by logging start in logtable {0} What it means
Thrown when inserting the job-start record into the job log table raises a KettleDatabaseException. Kettle marks an error before execution even begins and aborts with this KettleJobException, chaining the database exception.
Solutions
- Test the log table's database connection (credentials, host, port)
- Verify the job log table exists and matches the expected schema (regenerate DDL)
- Check the database user has INSERT privileges on the log table
- Read the chained KettleDatabaseException for the exact SQL error
Example fix
// before <connection>logdb</connection> pointing to a dropped database // after Recreate logdb connection and run generated DDL to create the job log table
Defensive patterns
Strategy: try-catch
Validate before calling
try (Connection c = logDb.connect()) {
DatabaseMetaData md = c.getMetaData();
if (!c.isValid(5)) throw new IllegalStateException("Log DB not reachable");
ResultSet rs = md.getTables(null, null, jobLogTable.getTableName(), null);
if (!rs.next()) throw new IllegalStateException("Job log table missing");
} Try / catch
try {
job.run();
} catch (KettleJobException e) {
if (e.getMessage().startsWith("Unable to begin processing by logging start")) {
Throwable dbe = e.getCause(); // KettleDatabaseException
log.error("Insert into job log table failed: " + dbe.getMessage(), dbe);
}
} Prevention
- Test the logging DB connection before starting the job
- Grant INSERT privileges to the Kettle DB user
- Verify log table existence/schema at deploy time
When it happens
Trigger: Writing the 'start' row to the job log table fails: connection failure, bad credentials, missing table, schema mismatch, or constraint violation during the begin-processing insert.
Common situations: Log database is down or unreachable; job log table was dropped or has an outdated schema; wrong connection configured for the job's logging settings; insufficient INSERT permissions.
Related errors
- Conversion error after getting last logdate from
- Database connection not found:
- Database.Exception.EmptyConnectionError
- DatabaseJoinMeta.Exception.ErrorObtainingFields
- DimensionLookupMeta.Exception.UnableToRetrieveDataTypeOfRetu…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/217f26b5bc94883a.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/Job.java:1107
// log record...
//
addJobListener( new JobAdapter() {
@Override public void jobFinished( Job job ) throws KettleException {
try {
endProcessing();
} catch ( KettleJobException e ) {
log.logError( BaseMessages.getString( PKG, "Job.Exception.UnableToWriteToLoggingTable", jobLogTable
.toString() ), e );
// do not skip exception here
// job is failed in case log database record is failed!
throw new KettleException( e );
}
}
} );
} catch ( KettleDatabaseException dbe ) {
addErrors( 1 ); // This is even before actual execution
throw new KettleJobException( BaseMessages.getString( PKG, "Job.Log.UnableToProcessLoggingStart", ""
+ tableName ), dbe );
} finally {
ldb.close();
}
}
// If we need to write out the job entry logging information, do so at the end of the job:
//
JobEntryLogTable jobEntryLogTable = jobMeta.getJobEntryLogTable();
if ( jobEntryLogTable.isDefined() ) {
addJobListener( new JobAdapter() {
@Override public void jobFinished( Job job ) throws KettleException {
try {
writeJobEntryLogInformation();
} catch ( KettleException e ) {
throw new KettleException( BaseMessages.getString( PKG,
"Job.Exception.UnableToPerformJobEntryLoggingAtJobEnd" ), e );
}View on GitHub (pinned to f3058517a1)