The job id is returned when the job is created e.g.:
Id jobID = System.enqueueJob(...);
or
Id batchprocessid = Database.executeBatch(...);
or from the context parameter passed into the asynchronous code being run. Once you have the Id, you can query for more information:
AsyncApexJob jobInfo = [
SELECT Status, NumberOfErrors
FROM AsyncApexJob
WHERE Id = :jobID
];
and see e.g. AsyncApexJob for the available data fields.
The work of "create a record to the custom object" based on the AsyncApexJob
fields will have to be done within the future call itself (because that could run any time in the future and so cannot pass data back to the caller or be guaranteed to have even started at any point in time) or in whatever other code that launches the job. Or the job itself could do the work at the start or end.