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

  1. Test the log table's database connection (credentials, host, port)
  2. Verify the job log table exists and matches the expected schema (regenerate DDL)
  3. Check the database user has INSERT privileges on the log table
  4. 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

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


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)