diff --git a/lib/logger/__mocks__/index.ts b/lib/logger/__mocks__/index.ts
index 36b7185649965915db5e4f0d0f2c7dc860ba104e..4601ac1f30ac2a7e98eb7679dfe76ce239c77d71 100644
--- a/lib/logger/__mocks__/index.ts
+++ b/lib/logger/__mocks__/index.ts
@@ -14,6 +14,8 @@ loggerLevels.forEach(k => {
 });
 
 export const setMeta = jest.fn();
+export const addMeta = jest.fn();
+export const removeMeta = jest.fn();
 export const levels = jest.fn();
 export const addStream = jest.fn();
 export const getErrors = (): any[] => [];
diff --git a/lib/logger/index.ts b/lib/logger/index.ts
index ec499ade79dc4ab1695f5fe379803f95165064f0..e91ce7733f1ff99de8625514c41cccd7c24a2a83 100644
--- a/lib/logger/index.ts
+++ b/lib/logger/index.ts
@@ -97,11 +97,25 @@ loggerLevels.forEach(loggerLevel => {
   logger[loggerLevel] = logFactory(loggerLevel);
 });
 
-// setMeta overrides existing meta
+// setMeta overrides existing meta, may remove fields if no longer existing
 export function setMeta(obj: any): void {
   meta = { ...obj };
 }
 
+// addMeta overrides or adds fields but does not remove any
+export function addMeta(obj: any): void {
+  meta = { ...meta, ...obj };
+}
+
+// removeMeta removes the provided fields from meta
+export function removeMeta(fields: string[]): void {
+  Object.keys(meta).forEach(key => {
+    if (fields.includes(key)) {
+      delete meta[key];
+    }
+  });
+}
+
 export /* istanbul ignore next */ function addStream(
   stream: bunyan.Stream
 ): void {
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index 5c6767d5c3604bbcc1b124dda32ea9be88dbd52f..f66bdfac916bfcf2fb0dd86cb478901bd6951035 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -1,6 +1,6 @@
 import { DateTime } from 'luxon';
 
-import { logger, setMeta } from '../../logger';
+import { logger } from '../../logger';
 import { isScheduledNow } from './schedule';
 import { getUpdatedPackageFiles } from './get-updated';
 import {
@@ -53,11 +53,6 @@ export async function processBranch(
     .map(upgrade => upgrade.depName)
     .filter(v => v) // remove nulls (happens for lock file maintenance)
     .filter((value, i, list) => list.indexOf(value) === i); // remove duplicates
-  setMeta({
-    repository: config.repository,
-    branch: config.branchName,
-    dependencies,
-  });
   logger.debug(
     { dependencies },
     `processBranch with ${branchConfig.upgrades.length} upgrades`
diff --git a/lib/workers/repository/error.ts b/lib/workers/repository/error.ts
index a12820b8899646b8c7b4e02393848fa9d3103b58..5882d7727eacc505f277a82a53713127342eb71e 100644
--- a/lib/workers/repository/error.ts
+++ b/lib/workers/repository/error.ts
@@ -1,4 +1,4 @@
-import { logger, setMeta } from '../../logger';
+import { logger } from '../../logger';
 import { raiseConfigWarningIssue } from './error-config';
 import { RenovateConfig } from '../../config';
 
@@ -6,10 +6,6 @@ export default async function handleError(
   config: RenovateConfig,
   err: Error
 ): Promise<string> {
-  setMeta({
-    repository: config.repository,
-  });
-
   if (err.message === 'uninitiated') {
     logger.info('Repository is uninitiated - skipping');
     delete config.branchList; // eslint-disable-line no-param-reassign
diff --git a/lib/workers/repository/finalise/validate.ts b/lib/workers/repository/finalise/validate.ts
index 455285a3fe693d9d9f1856a1c4b25ccca8277714..9d67512c26f8c4c1619d90a897753722a29ae517 100644
--- a/lib/workers/repository/finalise/validate.ts
+++ b/lib/workers/repository/finalise/validate.ts
@@ -1,5 +1,5 @@
 import JSON5 from 'json5';
-import { logger, setMeta } from '../../../logger';
+import { logger } from '../../../logger';
 import { migrateAndValidate } from '../../../config/migrate-validate';
 import { configFileNames } from '../../../config/app-strings';
 import { platform, Pr } from '../../../platform';
@@ -25,7 +25,6 @@ export async function validatePrs(config: RenovateConfig): Promise<void> {
   ) {
     return;
   }
-  setMeta({ repository: config.repository });
   logger.debug('branchPrefix: ' + config.branchPrefix);
   const renovatePrs = await getRenovatePrs(config.branchPrefix);
   logger.debug({ renovatePrs }, `Found ${renovatePrs.length} Renovate PRs`);
diff --git a/lib/workers/repository/index.ts b/lib/workers/repository/index.ts
index 551dc5929305bedf836807390a7952d287ecb0bf..91fb726e14c7c6406b2f7a454746b37c20a5a031 100644
--- a/lib/workers/repository/index.ts
+++ b/lib/workers/repository/index.ts
@@ -41,6 +41,7 @@ export async function renovateRepository(
     await finaliseRepo(config, branchList);
     repoResult = processResult(config, res);
   } catch (err) /* istanbul ignore next */ {
+    setMeta({ repository: config.repository });
     const errorRes = await handleError(config, err);
     repoResult = processResult(config, errorRes);
   }
diff --git a/lib/workers/repository/process/index.ts b/lib/workers/repository/process/index.ts
index 9efbbd61c11d47e05c54ff451db8af7a26fa7972..d386df4c8107338ab324830fc02643d4dc8a818e 100644
--- a/lib/workers/repository/process/index.ts
+++ b/lib/workers/repository/process/index.ts
@@ -1,4 +1,4 @@
-import { logger, setMeta } from '../../../logger';
+import { logger } from '../../../logger';
 import { mergeChildConfig, RenovateConfig } from '../../../config';
 import { extractAndUpdate, ExtractAndUpdateResult } from './extract-update';
 import { platform } from '../../../platform';
@@ -47,9 +47,6 @@ export async function processRepo(
     let branches: BranchConfig[] = [];
     let branchList: string[] = [];
     for (const baseBranch of config.baseBranches) {
-      setMeta({
-        repository: config.repository,
-      });
       logger.debug(`baseBranch: ${baseBranch}`);
       const baseBranchConfig = mergeChildConfig(config, { baseBranch });
       if (config.baseBranches.length > 1) {
diff --git a/lib/workers/repository/process/write.ts b/lib/workers/repository/process/write.ts
index 89eef5f71da3a610928923805d35e81584e9b58b..368d0fe719fbe0b39b4378c1b1c26413d3974ca3 100644
--- a/lib/workers/repository/process/write.ts
+++ b/lib/workers/repository/process/write.ts
@@ -1,4 +1,4 @@
-import { logger } from '../../../logger';
+import { logger, addMeta, removeMeta } from '../../../logger';
 import { processBranch } from '../../branch';
 import { getPrsRemaining } from './limits';
 import { getLimitRemaining } from '../../global/limits';
@@ -32,6 +32,7 @@ export async function writeUpdates(
   });
   let prsRemaining = await getPrsRemaining(config, branches);
   for (const branch of branches) {
+    addMeta({ branch: branch.branchName });
     const res = await processBranch(
       branch,
       prsRemaining <= 0 || getLimitRemaining('prCommitsPerRunLimit') <= 0,
@@ -44,5 +45,6 @@ export async function writeUpdates(
     }
     prsRemaining -= res === 'pr-created' ? 1 : 0;
   }
+  removeMeta(['branch']);
   return 'done';
 }
diff --git a/lib/workers/repository/updates/branchify.ts b/lib/workers/repository/updates/branchify.ts
index 40375a037930172e910871a1829662f294a9f9b7..93ea6c5b94cf90f7f0d535ed4b1f4a25c9d42f59 100644
--- a/lib/workers/repository/updates/branchify.ts
+++ b/lib/workers/repository/updates/branchify.ts
@@ -1,7 +1,7 @@
 import slugify from 'slugify';
 import handlebars from 'handlebars';
 import { clean as cleanGitRef } from 'clean-git-ref';
-import { logger, setMeta } from '../../../logger';
+import { logger, addMeta, removeMeta } from '../../../logger';
 
 import { generateBranchConfig } from './generate';
 import { flattenUpdates } from './flatten';
@@ -88,17 +88,15 @@ export function branchifyUpgrades(
   }
   logger.debug(`Returning ${Object.keys(branchUpgrades).length} branch(es)`);
   for (const branchName of Object.keys(branchUpgrades)) {
-    setMeta({
-      repository: config.repository,
+    // Add branch name to metadata before generating branch config
+    addMeta({
       branch: branchName,
     });
     const branch = generateBranchConfig(branchUpgrades[branchName]);
     branch.branchName = branchName;
     branches.push(branch);
   }
-  setMeta({
-    repository: config.repository,
-  });
+  removeMeta(['branch']);
   logger.debug(`config.repoIsOnboarded=${config.repoIsOnboarded}`);
   const branchList = config.repoIsOnboarded
     ? branches.map(upgrade => upgrade.branchName)
diff --git a/test/logger/index.spec.ts b/test/logger/index.spec.ts
index 30eea4810c1ebac12612fe6aad6e633d0f72375b..003354973970f0d0cf9ec465be503b9d0d92263e 100644
--- a/test/logger/index.spec.ts
+++ b/test/logger/index.spec.ts
@@ -2,6 +2,8 @@ import _fs from 'fs-extra';
 import {
   logger,
   setMeta,
+  addMeta,
+  removeMeta,
   levels,
   getErrors,
   addStream,
@@ -31,6 +33,14 @@ describe('logger', () => {
     setMeta({ any: 'test' });
   });
 
+  it('adds meta', () => {
+    addMeta({ new: 'test' });
+  });
+
+  it('removes meta', () => {
+    removeMeta(['new']);
+  });
+
   it('sets level', () => {
     levels('stdout', 'debug');
   });