diff --git a/.eslintrc.js b/.eslintrc.js
index 33397a5140c4362e826b80dd1c7c925649f1645b..104c5bed6ee77ab46240b70d75e0dc79b2d37351 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,6 +1,7 @@
 module.exports = {
   env: {
     node: true,
+    jest: true,
   },
   extends: [
     'plugin:promise/recommended',
diff --git a/lib/config/decrypt.js b/lib/config/decrypt.js
index c3c9f5667e22ce65bf145df0ce7d0a9290ab522b..8003289316dd99545e476a7c568c71a92593079a 100644
--- a/lib/config/decrypt.js
+++ b/lib/config/decrypt.js
@@ -1,5 +1,6 @@
 const is = require('@sindresorhus/is');
 const crypto = require('crypto');
+const { logger } = require('../logger');
 const { maskToken } = require('../util/mask');
 
 module.exports = {
diff --git a/lib/config/file.js b/lib/config/file.js
index 83c1a70a36476e14f61c1377498f7e595039bbb3..5dbda4be65d32cb56f0a3a0f8b913b7aab687631 100644
--- a/lib/config/file.js
+++ b/lib/config/file.js
@@ -1,4 +1,5 @@
 const path = require('path');
+const { logger } = require('../logger');
 const { migrateConfig } = require('./migration');
 
 module.exports = {
diff --git a/lib/config/index.js b/lib/config/index.js
index 27a05b485cc3b0e47197fc8ea97cfa345940e78d..09f97e7edf0b044e468b6e3933926f9b3df6046c 100644
--- a/lib/config/index.js
+++ b/lib/config/index.js
@@ -1,3 +1,4 @@
+const { logger, levels } = require('../logger');
 const definitions = require('./definitions');
 
 const defaultsParser = require('./defaults');
@@ -55,7 +56,7 @@ async function parseConfigs(env, argv) {
   }
 
   // Set log level
-  logger.levels('stdout', config.logLevel);
+  levels('stdout', config.logLevel);
 
   // Add file logger
   // istanbul ignore if
diff --git a/lib/config/migrate-validate.js b/lib/config/migrate-validate.js
index 1e9e7599ff50aaccaee0270b8af96166b7b18be6..772d02841c022e1645fc6d53a552295202de12ab 100644
--- a/lib/config/migrate-validate.js
+++ b/lib/config/migrate-validate.js
@@ -1,4 +1,5 @@
 const is = require('@sindresorhus/is');
+const { logger } = require('../logger');
 const configMigration = require('./migration');
 const configMassage = require('./massage');
 const configValidation = require('./validation');
diff --git a/lib/config/migration.js b/lib/config/migration.js
index 868dd8598632217f5f9b3635a38b3c2df07a5307..bc4d7175b663e4527a640fedac5a2dd5ab0dcaa4 100644
--- a/lib/config/migration.js
+++ b/lib/config/migration.js
@@ -1,5 +1,6 @@
 const is = require('@sindresorhus/is');
 const later = require('later');
+const { logger } = require('../logger');
 const options = require('./definitions').getOptions();
 
 const clone = input => JSON.parse(JSON.stringify(input));
diff --git a/lib/config/presets.js b/lib/config/presets.js
index 6ddb28750bd1c2182a496e03a465dbf9a839e6a5..f8df3b648722f5cd9ba120ceab904c7db13a6f18 100644
--- a/lib/config/presets.js
+++ b/lib/config/presets.js
@@ -1,4 +1,5 @@
 const is = require('@sindresorhus/is');
+const { logger } = require('../logger');
 const configParser = require('./index');
 const massage = require('./massage');
 const migration = require('./migration');
diff --git a/lib/datasource/cargo/index.js b/lib/datasource/cargo/index.js
index f23a15cc64e48ef573cf0a1578036929b384968e..ccda70e2e93640101db77ba3767740d9f266ae75 100644
--- a/lib/datasource/cargo/index.js
+++ b/lib/datasource/cargo/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 
 module.exports = {
diff --git a/lib/datasource/dart/index.js b/lib/datasource/dart/index.js
index 40e5ce04de64590f96e266b4241ea6cf433c66bf..a8b64f54bb35157a6f67eea8b8d1f3c9f5d85151 100644
--- a/lib/datasource/dart/index.js
+++ b/lib/datasource/dart/index.js
@@ -1,4 +1,5 @@
 const got = require('../../util/got');
+const { logger } = require('../../logger');
 
 async function getPkgReleases({ lookupName }) {
   let result = null;
diff --git a/lib/datasource/docker/index.js b/lib/datasource/docker/index.js
index b3c181aac23c6386bee5d3cc298b90bd719d14ac..5685d7e09f85aefe0495936a1cb430012b957183 100644
--- a/lib/datasource/docker/index.js
+++ b/lib/datasource/docker/index.js
@@ -3,6 +3,7 @@ const URL = require('url');
 const is = require('@sindresorhus/is');
 const parseLinkHeader = require('parse-link-header');
 const wwwAuthenticate = require('www-authenticate');
+const { logger } = require('../../logger');
 
 const got = require('../../util/got');
 const hostRules = require('../../util/host-rules');
diff --git a/lib/datasource/git-tags/index.js b/lib/datasource/git-tags/index.js
index d6374e1b13d1207749043d024f3f3df55056d256..223e356c28b1580031206e9dfe8a0a5ed8b117af 100644
--- a/lib/datasource/git-tags/index.js
+++ b/lib/datasource/git-tags/index.js
@@ -3,6 +3,7 @@ const semver = require('../../versioning/semver');
 
 const cacheNamespace = 'git-tags';
 const cacheMinutes = 10;
+const { logger } = require('../../logger');
 
 // git will prompt for known hosts or passwords, unless we activate BatchMode
 process.env.GIT_SSH_COMMAND = 'ssh -o BatchMode=yes';
diff --git a/lib/datasource/github/index.js b/lib/datasource/github/index.js
index aef7ae9b67fbecfb48d3635d5c86be1f2334f1b4..e88e9cfc80f892a0e27e9a86b4d79017a80bb40d 100644
--- a/lib/datasource/github/index.js
+++ b/lib/datasource/github/index.js
@@ -1,5 +1,6 @@
 import ghGot from '../../platform/github/gh-got-wrapper';
 
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 
 module.exports = {
diff --git a/lib/datasource/gitlab/index.js b/lib/datasource/gitlab/index.js
index d037c0eaa6d7c1b99e58770fff1b6923136803bc..048071a3935f5e1a5384413062312fc6f5dcb151 100644
--- a/lib/datasource/gitlab/index.js
+++ b/lib/datasource/gitlab/index.js
@@ -1,6 +1,7 @@
 const is = require('@sindresorhus/is');
 
 const glGot = require('../../platform/gitlab/gl-got-wrapper').api.get;
+const { logger } = require('../../logger');
 
 module.exports = {
   getPreset,
diff --git a/lib/datasource/go/index.js b/lib/datasource/go/index.js
index c1d541a0261c4b0ba2b90d09e30f0ee10525f20f..1b838a3a42aae93cc996a1c4daedce910187058d 100644
--- a/lib/datasource/go/index.js
+++ b/lib/datasource/go/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 const github = require('../github');
 
diff --git a/lib/datasource/gradle-version/index.js b/lib/datasource/gradle-version/index.js
index 9143cfd2b6b04730161fbeb4e8444b224a2d7705..ae6fc021c1c3e618224d45d5ada6807be7cef87b 100644
--- a/lib/datasource/gradle-version/index.js
+++ b/lib/datasource/gradle-version/index.js
@@ -1,4 +1,5 @@
 const { coerce } = require('semver');
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 
 module.exports = {
diff --git a/lib/datasource/hex/index.js b/lib/datasource/hex/index.js
index 96f3d6cd7cef337d6b249bc2b1d11844841e4fc1..7f5b7ece41751c9f5f8b206d2dbaf97b6848ae82 100644
--- a/lib/datasource/hex/index.js
+++ b/lib/datasource/hex/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 
 module.exports = {
diff --git a/lib/datasource/index.js b/lib/datasource/index.js
index d6a0c3060d8a1eacc1a791ea4bd06e896bb417ef..6400ed8baee9ed7bcee7a98d289552553489bba5 100644
--- a/lib/datasource/index.js
+++ b/lib/datasource/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../logger');
 const { addMetaData } = require('./metadata');
 const versioning = require('../versioning');
 
diff --git a/lib/datasource/maven/index.js b/lib/datasource/maven/index.js
index bba728d3219176d97cc6a49fc4c0eed63216c9d2..6f86f9e0cb8bf563080621dfee8560ed282e9de3 100644
--- a/lib/datasource/maven/index.js
+++ b/lib/datasource/maven/index.js
@@ -2,6 +2,7 @@ const url = require('url');
 const fs = require('fs-extra');
 const { XmlDocument } = require('xmldoc');
 const is = require('@sindresorhus/is');
+const { logger } = require('../../logger');
 
 const { compare } = require('../../versioning/maven/compare');
 const { containsPlaceholder } = require('../../manager/maven/extract');
diff --git a/lib/datasource/maven/util.js b/lib/datasource/maven/util.js
index 5e9ea3204d89daf5859f73d2631b0c55d5f72b4d..171d3576c2e6b87bbdd940a6fa142e956e962abc 100644
--- a/lib/datasource/maven/util.js
+++ b/lib/datasource/maven/util.js
@@ -1,4 +1,5 @@
 const got = require('../../util/got');
+const { logger } = require('../../logger');
 
 module.exports = {
   downloadHttpProtocol,
diff --git a/lib/datasource/npm/get.js b/lib/datasource/npm/get.js
index 1f2943d7f7444cb83d3df9ea402f4094c9f7fddd..a3c5f77733cc196c997100c075bd7043dd538911 100644
--- a/lib/datasource/npm/get.js
+++ b/lib/datasource/npm/get.js
@@ -4,6 +4,7 @@ const getRegistryUrl = require('registry-auth-token/registry-url');
 const registryAuthToken = require('registry-auth-token');
 const parse = require('github-url-from-git');
 const { isBase64 } = require('validator');
+const { logger } = require('../../logger');
 
 const got = require('../../util/got');
 const hostRules = require('../../util/host-rules');
diff --git a/lib/datasource/npm/npmrc.js b/lib/datasource/npm/npmrc.js
index 05f59c1a0f067ac72092586f798f1c9923151063..bd33b9000d6b13392e02884c4f77cd394eca88a6 100644
--- a/lib/datasource/npm/npmrc.js
+++ b/lib/datasource/npm/npmrc.js
@@ -1,6 +1,7 @@
 const is = require('@sindresorhus/is');
 const ini = require('ini');
 const { isBase64 } = require('validator');
+const { logger } = require('../../logger');
 
 let npmrc = null;
 let npmrcRaw;
diff --git a/lib/datasource/npm/presets.js b/lib/datasource/npm/presets.js
index 6f1d9121ab8ad632401d4443f10451fd40e6ca3f..bcab3aa0bbfcff9fda5b6daf3aa46f65e53d39ba 100644
--- a/lib/datasource/npm/presets.js
+++ b/lib/datasource/npm/presets.js
@@ -1,3 +1,5 @@
+import { logger } from '../../logger';
+
 const { getDependency } = require('./get');
 
 module.exports = {
diff --git a/lib/datasource/nuget/index.js b/lib/datasource/nuget/index.js
index 09ed6a8557c6e817105443439744dc8ce34290fc..b4399c564ced0045c5ba9fe61e45927764e69431 100644
--- a/lib/datasource/nuget/index.js
+++ b/lib/datasource/nuget/index.js
@@ -1,4 +1,5 @@
 const urlApi = require('url');
+const { logger } = require('../../logger');
 const v2 = require('./v2');
 const v3 = require('./v3');
 
diff --git a/lib/datasource/nuget/v2.js b/lib/datasource/nuget/v2.js
index d959e1a4e37f43ee13c67e34165fbf8cd1ca2ee3..aed75a5f4497a637d58003891cf430f1100a3ff8 100644
--- a/lib/datasource/nuget/v2.js
+++ b/lib/datasource/nuget/v2.js
@@ -1,5 +1,6 @@
 const parse = require('github-url-from-git');
 const { XmlDocument } = require('xmldoc');
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 
 module.exports = {
diff --git a/lib/datasource/nuget/v3.js b/lib/datasource/nuget/v3.js
index 6068ab200950d43b8f8aeefbafda89284f865beb..18965f52fa768662930fca4dfe260182bf7b022f 100644
--- a/lib/datasource/nuget/v3.js
+++ b/lib/datasource/nuget/v3.js
@@ -1,6 +1,7 @@
 const parse = require('github-url-from-git');
 const semver = require('semver');
 const { XmlDocument } = require('xmldoc');
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 
 module.exports = {
diff --git a/lib/datasource/orb/index.js b/lib/datasource/orb/index.js
index 33cd69481a2103abba5e651689a241e992e4655e..0c912d501f603f1801f40a9ab579134caa41214a 100644
--- a/lib/datasource/orb/index.js
+++ b/lib/datasource/orb/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 
 module.exports = {
diff --git a/lib/datasource/packagist/index.js b/lib/datasource/packagist/index.js
index a0c1bd59197ed89e960cf692fe612e5fe2c7ae7c..42772c6c4e56942e85a4d8bc6fbd0f42d46efa97 100644
--- a/lib/datasource/packagist/index.js
+++ b/lib/datasource/packagist/index.js
@@ -3,6 +3,7 @@ const URL = require('url');
 const delay = require('delay');
 const parse = require('github-url-from-git');
 const pAll = require('p-all');
+const { logger } = require('../../logger');
 
 const got = require('../../util/got');
 const hostRules = require('../../util/host-rules');
diff --git a/lib/datasource/pypi/index.js b/lib/datasource/pypi/index.js
index 80932eb6659002d691e4fe6419929b424cd672f2..63cc85622311f94ecf0a9f25c29239cd82752722 100644
--- a/lib/datasource/pypi/index.js
+++ b/lib/datasource/pypi/index.js
@@ -1,6 +1,7 @@
 const url = require('url');
 const is = require('@sindresorhus/is');
 const { parse } = require('node-html-parser');
+const { logger } = require('../../logger');
 const { matches } = require('../../versioning/pep440');
 const got = require('../../util/got');
 
diff --git a/lib/datasource/ruby-version/index.js b/lib/datasource/ruby-version/index.js
index a32573611c5e81e9e75b437e2aac951b8b6cb542..03598f3440f62f1f98281af0793a6b574f7bdcc1 100644
--- a/lib/datasource/ruby-version/index.js
+++ b/lib/datasource/ruby-version/index.js
@@ -1,4 +1,5 @@
 const { parse } = require('node-html-parser');
+const { logger } = require('../../logger');
 
 const got = require('../../util/got');
 const { isVersion } = require('../../versioning/ruby');
diff --git a/lib/datasource/rubygems/get-rubygems-org.js b/lib/datasource/rubygems/get-rubygems-org.js
index 032818bdaab584a0a45a43a6820bf727ac378856..25eea2834d505ec0aaa5d132829be94e813656c7 100644
--- a/lib/datasource/rubygems/get-rubygems-org.js
+++ b/lib/datasource/rubygems/get-rubygems-org.js
@@ -1,4 +1,5 @@
 const got = require('../../util/got');
+const { logger } = require('../../logger');
 
 module.exports = {
   getRubygemsOrgDependency,
diff --git a/lib/datasource/rubygems/get.js b/lib/datasource/rubygems/get.js
index efce81718527dfebbe06b01516668f04b0f3cbf9..0e2c869bc9549fcdf0c19e0d9bfbef69d2294a95 100644
--- a/lib/datasource/rubygems/get.js
+++ b/lib/datasource/rubygems/get.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const got = require('../../util/got');
 const { maskToken } = require('../../util/mask');
 const retriable = require('./retriable');
diff --git a/lib/datasource/rubygems/retriable.js b/lib/datasource/rubygems/retriable.js
index 217609f1965e245da0f9f3ed5d89849ab56fc23b..dea324b7735ec4d5011de8f463097a04e8be0bb8 100644
--- a/lib/datasource/rubygems/retriable.js
+++ b/lib/datasource/rubygems/retriable.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const {
   UNAUTHORIZED,
   FORBIDDEN,
diff --git a/lib/datasource/sbt/index.js b/lib/datasource/sbt/index.js
index 2bd99e71f51712896aa88c44e95808714da0b1d2..9f8d442dd6dab701beb1fcf6bba5e52f1fe6cd78 100644
--- a/lib/datasource/sbt/index.js
+++ b/lib/datasource/sbt/index.js
@@ -1,6 +1,7 @@
 const { compare } = require('../../versioning/maven/compare');
 const { downloadHttpProtocol } = require('../maven/util');
 const { parseIndexDir, SBT_PLUGINS_REPO } = require('./util');
+const { logger } = require('../../logger');
 
 async function getPkgReleases(config) {
   const { lookupName, depType } = config;
diff --git a/lib/datasource/terraform/index.js b/lib/datasource/terraform/index.js
index b9c7b83bc4d659b3ec80786073be8e0e90003899..0a378b4f02b5cf6f3bc8f6d9850b89213e14fada 100644
--- a/lib/datasource/terraform/index.js
+++ b/lib/datasource/terraform/index.js
@@ -1,5 +1,6 @@
 const parse = require('github-url-from-git');
 const is = require('@sindresorhus/is');
+const { logger } = require('../../logger');
 
 const got = require('../../util/got');
 
diff --git a/lib/logger/__mocks__/index.ts b/lib/logger/__mocks__/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2e09087795b15241b5fa7c80270cf887bc5cd9b6
--- /dev/null
+++ b/lib/logger/__mocks__/index.ts
@@ -0,0 +1,19 @@
+const loggerLevels: string[] = [
+  'trace',
+  'debug',
+  'info',
+  'warn',
+  'error',
+  'fatal',
+  'child',
+];
+const logger: any = {};
+
+loggerLevels.forEach(k => {
+  logger[k] = jest.fn();
+});
+
+export const setMeta = jest.fn();
+export const levels = jest.fn();
+
+export { logger };
diff --git a/lib/logger/cmd-serializer.js b/lib/logger/cmd-serializer.js
index f3fd49fb49be97823f23258b0072fc4f9e680dbf..02950a6a9652925f17910839c68ba1239ac5b0e3 100644
--- a/lib/logger/cmd-serializer.js
+++ b/lib/logger/cmd-serializer.js
@@ -1,4 +1,4 @@
-module.exports = cmdSerializer;
+export default cmdSerializer;
 
 // istanbul ignore next
 function cmdSerializer(cmd) {
diff --git a/lib/logger/index.js b/lib/logger/index.js
deleted file mode 100644
index 2cc943442e69e9e6c4a279852172b41dbf988a3d..0000000000000000000000000000000000000000
--- a/lib/logger/index.js
+++ /dev/null
@@ -1,82 +0,0 @@
-const is = require('@sindresorhus/is');
-const bunyan = require('bunyan');
-const PrettyStdout = require('./pretty-stdout').RenovateStream;
-const configSerializer = require('./config-serializer');
-const errSerializer = require('./err-serializer');
-const cmdSerializer = require('./cmd-serializer');
-
-let bunyanLogger;
-let meta = {};
-
-function initLogger() {
-  const stdout = {
-    name: 'stdout',
-    level: process.env.LOG_LEVEL || 'info',
-    stream: process.stdout,
-  };
-
-  if (process.env.LOG_FORMAT !== 'json') {
-    const prettyStdOut = new PrettyStdout();
-    prettyStdOut.pipe(process.stdout);
-    stdout.type = 'raw';
-    stdout.stream = prettyStdOut;
-  }
-
-  bunyanLogger = bunyan.createLogger({
-    name: 'renovate',
-    serializers: {
-      body: configSerializer,
-      cmd: cmdSerializer,
-      config: configSerializer,
-      migratedConfig: configSerializer,
-      originalConfig: configSerializer,
-      presetConfig: configSerializer,
-      err: errSerializer,
-    },
-    streams: [stdout],
-  });
-
-  global.logger = {};
-
-  const logFunctions = [
-    'trace',
-    'debug',
-    'info',
-    'warn',
-    'error',
-    'fatal',
-    'child',
-  ];
-  logFunctions.forEach(x => {
-    global.logger[x] = (p1, p2) => {
-      global.renovateError =
-        global.renovateError || x === 'error' || x === 'fatal';
-      if (p2) {
-        // meta and msg provided
-        return bunyanLogger[x]({ ...meta, ...p1 }, p2);
-      }
-      if (is.string(p1)) {
-        // only message provided
-        return bunyanLogger[x](meta, p1);
-      }
-      // only meta provided
-      return bunyanLogger[x]({ ...meta, ...p1 });
-    };
-  });
-  global.logger.master = bunyanLogger;
-  global.logger.addStream = stream => {
-    bunyanLogger.addStream(stream);
-  };
-  global.logger.levels = (stream, level) => {
-    bunyanLogger.levels(stream, level);
-  };
-
-  // setMeta overrides existing meta
-  global.logger.setMeta = function setMeta(obj) {
-    meta = { ...obj };
-  };
-}
-
-module.exports = {
-  initLogger,
-};
diff --git a/lib/logger/index.ts b/lib/logger/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7d44d27b988da94f67663f5405a805563778545f
--- /dev/null
+++ b/lib/logger/index.ts
@@ -0,0 +1,93 @@
+import * as bunyan from 'bunyan';
+
+import is from '@sindresorhus/is';
+import { RenovateStream } from './pretty-stdout';
+import configSerializer from './config-serializer';
+import errSerializer from './err-serializer';
+import cmdSerializer from './cmd-serializer';
+
+let meta = {};
+
+const stdout: bunyan.Stream = {
+  name: 'stdout',
+  level: (process.env.LOG_LEVEL as bunyan.LogLevel) || 'info',
+  stream: process.stdout,
+};
+
+if (process.env.LOG_FORMAT !== 'json') {
+  // TODO: typings
+  const prettyStdOut = new RenovateStream() as any;
+  prettyStdOut.pipe(process.stdout);
+  stdout.stream = prettyStdOut;
+  stdout.type = 'raw';
+}
+
+const bunyanLogger = bunyan.createLogger({
+  name: 'renovate',
+  serializers: {
+    body: configSerializer,
+    cmd: cmdSerializer,
+    config: configSerializer,
+    migratedConfig: configSerializer,
+    originalConfig: configSerializer,
+    presetConfig: configSerializer,
+    err: errSerializer,
+  },
+  streams: [stdout],
+});
+
+const logFactory = (level: bunyan.LogLevelString): any => {
+  return (p1: any, p2: any): void => {
+    global.renovateError =
+      global.renovateError || level === 'error' || level === 'fatal';
+    if (p2) {
+      // meta and msg provided
+      bunyanLogger[level]({ ...meta, ...p1 }, p2);
+    } else if (is.string(p1)) {
+      // only message provided
+      bunyanLogger[level](meta, p1);
+    } else {
+      // only meta provided
+      bunyanLogger[level](meta, p1);
+    }
+  };
+};
+
+const loggerLevels: bunyan.LogLevelString[] = [
+  'trace',
+  'debug',
+  'info',
+  'warn',
+  'error',
+  'fatal',
+];
+
+interface Logger {
+  trace(msg: string): void;
+  trace(meta: Record<string, any>, msg?: string): void;
+  debug(msg: string): void;
+  debug(meta: Record<string, any>, msg?: string): void;
+  info(msg: string): void;
+  info(meta: Record<string, any>, msg?: string): void;
+  warn(msg: string): void;
+  warn(meta: Record<string, any>, msg?: string): void;
+  error(msg: string): void;
+  error(meta: Record<string, any>, msg?: string): void;
+  fatal(msg: string): void;
+  fatal(meta: Record<string, any>, msg?: string): void;
+}
+
+export const logger: Logger = {} as any;
+
+loggerLevels.forEach(loggerLevel => {
+  logger[loggerLevel] = logFactory(loggerLevel);
+});
+
+// setMeta overrides existing meta
+export function setMeta(obj: any) {
+  meta = { ...obj };
+}
+
+export function levels(name: string, level: bunyan.LogLevel): void {
+  bunyanLogger.levels(name, level);
+}
diff --git a/lib/logger/pretty-stdout.js b/lib/logger/pretty-stdout.ts
similarity index 68%
rename from lib/logger/pretty-stdout.js
rename to lib/logger/pretty-stdout.ts
index a3b5db56392ad790da4a7d0e5896dec706133098..676c1c345acf86dd7538bc9f9cb0a0ecf5ebc2d8 100644
--- a/lib/logger/pretty-stdout.js
+++ b/lib/logger/pretty-stdout.ts
@@ -1,10 +1,10 @@
 // Code originally derived from https://github.com/hadfieldn/node-bunyan-prettystream but since heavily edited
 // Neither fork nor original repo appear to be maintained
 
-const { Stream } = require('stream');
-const util = require('util');
-const chalk = require('chalk');
-const stringify = require('json-stringify-pretty-compact');
+import * as util from 'util';
+import { Stream } from 'stream';
+import chalk from 'chalk';
+import stringify from 'json-stringify-pretty-compact';
 
 const bunyanFields = [
   'name',
@@ -25,7 +25,7 @@ const metaFields = [
   'branch',
 ];
 
-const levels = {
+const levels: Record<number, string> = {
   10: chalk.gray('TRACE'),
   20: chalk.blue('DEBUG'),
   30: chalk.green(' INFO'),
@@ -34,12 +34,12 @@ const levels = {
   60: chalk.bgRed('FATAL'),
 };
 
-function indent(str, leading = false) {
+export function indent(str: string, leading = false) {
   const prefix = leading ? '       ' : '';
   return prefix + str.split(/\r?\n/).join('\n       ');
 }
 
-function getMeta(rec) {
+export function getMeta(rec: BunyanRecord) {
   if (!rec) {
     return '';
   }
@@ -55,7 +55,7 @@ function getMeta(rec) {
   return chalk.gray(res);
 }
 
-function getDetails(rec) {
+export function getDetails(rec: BunyanRecord) {
   if (!rec) {
     return '';
   }
@@ -75,8 +75,7 @@ function getDetails(rec) {
     .join(',\n')}\n`;
 }
 
-// istanbul ignore next
-function formatRecord(rec) {
+export function formatRecord(rec: BunyanRecord) {
   const level = levels[rec.level];
   const msg = `${indent(rec.msg)}`;
   const meta = getMeta(rec);
@@ -84,24 +83,26 @@ function formatRecord(rec) {
   return util.format('%s: %s%s\n%s', level, msg, meta, details);
 }
 
-function RenovateStream() {
-  this.readable = true;
-  this.writable = true;
-  Stream.call(this);
-}
+export class RenovateStream extends Stream {
+  readable: boolean;
 
-util.inherits(RenovateStream, Stream);
+  writable: boolean;
 
-// istanbul ignore next
-RenovateStream.prototype.write = function write(data) {
-  this.emit('data', formatRecord(data));
-  return true;
-};
+  constructor() {
+    super();
+    this.readable = true;
+    this.writable = true;
+  }
 
-module.exports = {
-  indent,
-  getMeta,
-  getDetails,
-  formatRecord,
-  RenovateStream,
-};
+  // istanbul ignore next
+  write(data: BunyanRecord) {
+    this.emit('data', formatRecord(data));
+    return true;
+  }
+}
+
+export interface BunyanRecord extends Record<string, any> {
+  level: number;
+  msg: string;
+  module?: string;
+}
diff --git a/lib/manager/ansible/extract.js b/lib/manager/ansible/extract.js
index ea3fb83f33475fbd0d858e010b0dd4b61a192cba..78e5951231a2fe57fe400974ea86c3d0956d9f9b 100644
--- a/lib/manager/ansible/extract.js
+++ b/lib/manager/ansible/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getDep } = require('../dockerfile/extract');
 
 module.exports = {
diff --git a/lib/manager/ansible/update.js b/lib/manager/ansible/update.js
index 3a46d71f529c1503da90443d39e88ef931745475..3f7640961a07e098bc2ead17be806d325aca102d 100644
--- a/lib/manager/ansible/update.js
+++ b/lib/manager/ansible/update.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getNewFrom } = require('../dockerfile/update');
 
 module.exports = {
diff --git a/lib/manager/bazel/extract.js b/lib/manager/bazel/extract.js
index 37e8c8f95d4319e09deb5c465ddf2ef22802b236..28c709ef7bb955a70a27758494c47805086c1f90 100644
--- a/lib/manager/bazel/extract.js
+++ b/lib/manager/bazel/extract.js
@@ -1,6 +1,7 @@
 /* eslint no-plusplus: 0 default-case: 0 */
 const parse = require('github-url-from-git');
 const URL = require('url');
+const { logger } = require('../../logger');
 
 module.exports = {
   extractPackageFile,
diff --git a/lib/manager/bazel/update.js b/lib/manager/bazel/update.js
index cb30ad022a0a03f6ab5549618d37539096da8c72..65c7bc31f34211147d73f0a265030bf1a24384a4 100644
--- a/lib/manager/bazel/update.js
+++ b/lib/manager/bazel/update.js
@@ -1,5 +1,6 @@
 const hasha = require('hasha');
 const got = require('../../util/got');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/manager/buildkite/extract.js b/lib/manager/buildkite/extract.js
index 7fd482c0277d4485b057b4d3d76156988c251c92..c31963bdd157ef349c1922c1730f836f290ee63a 100644
--- a/lib/manager/buildkite/extract.js
+++ b/lib/manager/buildkite/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { isVersion } = require('../../versioning/semver');
 
 module.exports = {
diff --git a/lib/manager/buildkite/update.js b/lib/manager/buildkite/update.js
index 8982473ca78250fccdd583506cd3a2bace517cf5..e5f80fc98d2213688b44d2a8714264e8afa491f4 100644
--- a/lib/manager/buildkite/update.js
+++ b/lib/manager/buildkite/update.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   updateDependency,
 };
diff --git a/lib/manager/bundler/artifacts.js b/lib/manager/bundler/artifacts.js
index 1dda3ad85073ce588d23a043667a9eda07cbad5f..8a8574ffe009fecbd3c4261d7be1226829639555 100644
--- a/lib/manager/bundler/artifacts.js
+++ b/lib/manager/bundler/artifacts.js
@@ -2,6 +2,7 @@ const { exec } = require('child-process-promise');
 const fs = require('fs-extra');
 const upath = require('upath');
 const { getChildProcessEnv } = require('../../util/env');
+const { logger } = require('../../logger');
 
 const { getPkgReleases } = require('../../datasource/docker');
 const {
diff --git a/lib/manager/bundler/extract.js b/lib/manager/bundler/extract.js
index 2605811c6d1f3e21f30782ef450ba9be2bc5eb4c..9346a3c13ea92ecb193b4502243f30b8dde42157 100644
--- a/lib/manager/bundler/extract.js
+++ b/lib/manager/bundler/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { isValid } = require('../../versioning/ruby');
 
 module.exports = {
diff --git a/lib/manager/bundler/update.js b/lib/manager/bundler/update.js
index 83a5f292fbe0a1a1fa05c693285c388157c1ca48..2cc14d7864266ccc3627e51bd9000d9eba467291 100644
--- a/lib/manager/bundler/update.js
+++ b/lib/manager/bundler/update.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   updateDependency,
 };
diff --git a/lib/manager/cargo/artifacts.js b/lib/manager/cargo/artifacts.js
index a05817fd961cbcd340df5f174e5bca9ab2a5ab47..66bc5ce4831b6172f6960a7fcf5feb87b8c88ead 100644
--- a/lib/manager/cargo/artifacts.js
+++ b/lib/manager/cargo/artifacts.js
@@ -3,6 +3,7 @@ const process = require('process');
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const { getChildProcessEnv } = require('../../util/env');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateArtifacts,
diff --git a/lib/manager/cargo/extract.js b/lib/manager/cargo/extract.js
index dbff79664bc01afd8852d40946a3b42b46d95bdd..e5af6d468a7b707b6ef00bf35c1e219c003fe25e 100644
--- a/lib/manager/cargo/extract.js
+++ b/lib/manager/cargo/extract.js
@@ -1,4 +1,5 @@
 const toml = require('toml');
+const { logger } = require('../../logger');
 const semver = require('../../versioning/cargo');
 
 module.exports = {
diff --git a/lib/manager/cargo/update.js b/lib/manager/cargo/update.js
index 49dd09978856644f41dcd07938bcc399f0d18172..0aeaaf3bb7db7742ada92dce66fd6e4e1f1cba73 100644
--- a/lib/manager/cargo/update.js
+++ b/lib/manager/cargo/update.js
@@ -1,5 +1,6 @@
 const _ = require('lodash');
 const toml = require('toml');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/manager/circleci/extract.js b/lib/manager/circleci/extract.js
index c731c3d843a48960c45bd27ed588dac2813d181e..461a0fffcc9cb956a6470f449db344f37a25ddb6 100644
--- a/lib/manager/circleci/extract.js
+++ b/lib/manager/circleci/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getDep } = require('../dockerfile/extract');
 
 module.exports = {
diff --git a/lib/manager/circleci/update.js b/lib/manager/circleci/update.js
index 11a38d888c00cf6a1ec49f9cf06ca1ac28120a36..47c523f6297204538a566dde34bcd37c7c4a3fa3 100644
--- a/lib/manager/circleci/update.js
+++ b/lib/manager/circleci/update.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getNewFrom } = require('../dockerfile/update');
 
 module.exports = {
diff --git a/lib/manager/composer/artifacts.js b/lib/manager/composer/artifacts.js
index 7d92fb4d629ea472bcdf90a233168e46be8014c0..9af10932809d2567889b205273e6289347779097 100644
--- a/lib/manager/composer/artifacts.js
+++ b/lib/manager/composer/artifacts.js
@@ -3,6 +3,7 @@ const URL = require('url');
 const { exec } = require('child-process-promise');
 const fs = require('fs-extra');
 const upath = require('upath');
+const { logger } = require('../../logger');
 const hostRules = require('../../util/host-rules');
 const { getChildProcessEnv } = require('../../util/env');
 
diff --git a/lib/manager/composer/extract.js b/lib/manager/composer/extract.js
index 50f39c545dea822cbe0b88fefbb22e032093213b..a650d18f037de3e541c9ac1ad2f5bfb75a6473a5 100644
--- a/lib/manager/composer/extract.js
+++ b/lib/manager/composer/extract.js
@@ -1,4 +1,5 @@
 const is = require('@sindresorhus/is');
+const { logger } = require('../../logger');
 const semverComposer = require('../../versioning/composer');
 
 module.exports = {
diff --git a/lib/manager/composer/range.js b/lib/manager/composer/range.js
index a8e2d2e22ac50ca68fa1de72ccc6e6efe948ba43..0d935ecf98421139ee92d149701d6be2980bc594 100644
--- a/lib/manager/composer/range.js
+++ b/lib/manager/composer/range.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   getRangeStrategy,
 };
diff --git a/lib/manager/docker-compose/extract.js b/lib/manager/docker-compose/extract.js
index f0422c5698b1fcdbc909b5e28647708334a49ee3..aceaef115c857a87ad9236986601b0b9ccc2b694 100644
--- a/lib/manager/docker-compose/extract.js
+++ b/lib/manager/docker-compose/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getDep } = require('../dockerfile/extract');
 
 module.exports = {
diff --git a/lib/manager/docker-compose/update.js b/lib/manager/docker-compose/update.js
index 8e8779633e484f60d224640fade716c58e96a316..0d1f76ac87a1ec3d9ef3ecae0d78d8e6401f3a5e 100644
--- a/lib/manager/docker-compose/update.js
+++ b/lib/manager/docker-compose/update.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getNewFrom } = require('../dockerfile/update');
 
 module.exports = {
diff --git a/lib/manager/dockerfile/extract.js b/lib/manager/dockerfile/extract.js
index 4a7dba49f88b52c84d5af9c586354959bcfaf912..afd04dc1320de8783ef2d75f24f7664d664a57de 100644
--- a/lib/manager/dockerfile/extract.js
+++ b/lib/manager/dockerfile/extract.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   splitImageParts,
   getDep,
diff --git a/lib/manager/dockerfile/update.js b/lib/manager/dockerfile/update.js
index 23b8b19b13d1ad562a0bbb7b7c47d932491f6441..2b9a55036a46789cc4bec2694beffbfa59a95d18 100644
--- a/lib/manager/dockerfile/update.js
+++ b/lib/manager/dockerfile/update.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   getNewFrom,
   updateDependency,
diff --git a/lib/manager/github-actions/extract.js b/lib/manager/github-actions/extract.js
index f4f1f6bc4da447c14bcaa3c58d719da907f7ec1b..6e04847e0711a6584b3c827327a9e1ecd03fb410 100644
--- a/lib/manager/github-actions/extract.js
+++ b/lib/manager/github-actions/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getDep } = require('../dockerfile/extract');
 
 module.exports = {
diff --git a/lib/manager/github-actions/update.js b/lib/manager/github-actions/update.js
index 00dcb6b9ca85debb4fccc9885056fbbcee8b1c12..eab513410363ae87a53310abc0d6a7272a1abfd5 100644
--- a/lib/manager/github-actions/update.js
+++ b/lib/manager/github-actions/update.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getNewFrom } = require('../dockerfile/update');
 
 module.exports = {
diff --git a/lib/manager/gitlabci-include/update.js b/lib/manager/gitlabci-include/update.js
index e8c4413eeca34bfceea60584babdbf8eb288fdfc..cce3b683ab0345d098fcbd58571ceac7f00016b5 100644
--- a/lib/manager/gitlabci-include/update.js
+++ b/lib/manager/gitlabci-include/update.js
@@ -1,4 +1,5 @@
 const YAWN = require('yawn-yaml/cjs');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/manager/gitlabci/extract.js b/lib/manager/gitlabci/extract.js
index 97c06a1b78a8c9a1763e7c74336a1be8e665430b..66dbe232216293b5b95de6383ef198e55fc1e58c 100644
--- a/lib/manager/gitlabci/extract.js
+++ b/lib/manager/gitlabci/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getDep } = require('../dockerfile/extract');
 
 module.exports = {
diff --git a/lib/manager/gitlabci/update.js b/lib/manager/gitlabci/update.js
index 828dc08a671d10d41b8da1d6535319d1a325baec..734ac96838d70e4c8ec5cc2266582a9e1f31e4b4 100644
--- a/lib/manager/gitlabci/update.js
+++ b/lib/manager/gitlabci/update.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getNewFrom } = require('../dockerfile/update');
 
 module.exports = {
diff --git a/lib/manager/gomod/artifacts.js b/lib/manager/gomod/artifacts.js
index 620dc7bc3a68e8208528523911e6f819e3ab6d65..cdae934c3eff99c6516aa1d52d1fdf6c051943b8 100644
--- a/lib/manager/gomod/artifacts.js
+++ b/lib/manager/gomod/artifacts.js
@@ -3,6 +3,7 @@ const fs = require('fs-extra');
 const upath = require('upath');
 const hostRules = require('../../util/host-rules');
 const { getChildProcessEnv } = require('../../util/env');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateArtifacts,
diff --git a/lib/manager/gomod/extract.js b/lib/manager/gomod/extract.js
index f0b5a775b621faff71773c633524f13ed7ece913..c8cd5b1e35b0cba462a5760e99a9f35679d1c3e1 100644
--- a/lib/manager/gomod/extract.js
+++ b/lib/manager/gomod/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { isVersion } = require('../../versioning/semver');
 
 module.exports = {
diff --git a/lib/manager/gomod/update.js b/lib/manager/gomod/update.js
index 24b73fe50b3b22c4d68c48d83217040c8ebd426b..e6b0ca52301436f08dcb2276907e36ed9ca6aa92 100644
--- a/lib/manager/gomod/update.js
+++ b/lib/manager/gomod/update.js
@@ -1,4 +1,5 @@
 const { DateTime } = require('luxon');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/manager/gradle-wrapper/extract.js b/lib/manager/gradle-wrapper/extract.js
index 3136142a8a45b36168fb5f86491ff3b35fbcd130..fb068307a07856667a5b816b13038e04e616c7be 100644
--- a/lib/manager/gradle-wrapper/extract.js
+++ b/lib/manager/gradle-wrapper/extract.js
@@ -1,4 +1,5 @@
 const { coerce } = require('semver');
+const { logger } = require('../../logger');
 
 module.exports = {
   extractPackageFile,
diff --git a/lib/manager/gradle-wrapper/update.js b/lib/manager/gradle-wrapper/update.js
index 171e604cb3597cdca79e9a53d863714e8c7804bb..73427a22baf58d7ff5731b582ab0c1ea8e01bd6d 100644
--- a/lib/manager/gradle-wrapper/update.js
+++ b/lib/manager/gradle-wrapper/update.js
@@ -1,4 +1,5 @@
 const got = require('../../util/got');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/manager/gradle/gradle-updates-report.js b/lib/manager/gradle/gradle-updates-report.js
index 447eab196b0f5e02276f064c9955f457b2447008..674db29ab89c4b1499e7578dbeac80d161846654 100644
--- a/lib/manager/gradle/gradle-updates-report.js
+++ b/lib/manager/gradle/gradle-updates-report.js
@@ -1,5 +1,6 @@
 const path = require('path');
 const fs = require('fs-extra');
+const { logger } = require('../../logger');
 
 const GRADLE_DEPENDENCY_REPORT_FILENAME = 'gradle-renovate-report.json';
 
diff --git a/lib/manager/gradle/index.js b/lib/manager/gradle/index.js
index f1edaa0532b7728c2ac61c74d66a49f4e530632b..bfc1f8c43e94a27bd3b74b5774dc9cec1ca0ac87 100644
--- a/lib/manager/gradle/index.js
+++ b/lib/manager/gradle/index.js
@@ -1,5 +1,6 @@
 const { exec } = require('child-process-promise');
 const fs = require('fs-extra');
+const { logger } = require('../../logger');
 
 const gradle = require('./build-gradle');
 const updatesReport = require('./gradle-updates-report');
diff --git a/lib/manager/homebrew/extract.js b/lib/manager/homebrew/extract.js
index acd417bcd1126f51b62ab060882ee8ca682ea5bc..8f14dc12d00c4e7201d066884eda1ae69eb60b77 100644
--- a/lib/manager/homebrew/extract.js
+++ b/lib/manager/homebrew/extract.js
@@ -1,6 +1,8 @@
 const semver = require('../../versioning/semver');
 const { skip, isSpace, removeComments } = require('./util');
 
+const { logger } = require('../../logger');
+
 module.exports = {
   extractPackageFile,
   parseUrlPath,
diff --git a/lib/manager/homebrew/update.js b/lib/manager/homebrew/update.js
index 1ce7ed43bcfc27d937a8a3115f09d827ca9ad0f2..89b8679674e0cfac0b9bd62ec6d948924a892b9a 100644
--- a/lib/manager/homebrew/update.js
+++ b/lib/manager/homebrew/update.js
@@ -3,6 +3,7 @@ const { coerce } = require('semver');
 const { parseUrlPath } = require('./extract');
 const { skip, isSpace, removeComments } = require('./util');
 const got = require('../../util/got');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/manager/kubernetes/extract.js b/lib/manager/kubernetes/extract.js
index 0bcf24aebabbe6db86d96265aa79db121536ac82..36391926d980a7b0b0e2f8cbc641dbc172413fda 100644
--- a/lib/manager/kubernetes/extract.js
+++ b/lib/manager/kubernetes/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getDep } = require('../dockerfile/extract');
 
 module.exports = {
diff --git a/lib/manager/kubernetes/update.js b/lib/manager/kubernetes/update.js
index dc763631a7704298c64f39eae549627c2cb3a704..e932d380c4cf11be3644a65099c742c844d9f126 100644
--- a/lib/manager/kubernetes/update.js
+++ b/lib/manager/kubernetes/update.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { getNewFrom } = require('../dockerfile/update');
 
 module.exports = {
diff --git a/lib/manager/maven/extract.js b/lib/manager/maven/extract.js
index ce99fff75bc2e11d94f6580959bbb7bfe0fe71b6..9d10255eab9c31dc4248861984989a40d2567035 100644
--- a/lib/manager/maven/extract.js
+++ b/lib/manager/maven/extract.js
@@ -1,6 +1,7 @@
 const path = require('path');
 const { XmlDocument } = require('xmldoc');
 const { isValid } = require('../../versioning/maven');
+const { logger } = require('../../logger');
 
 const DEFAULT_MAVEN_REPO = 'https://repo.maven.apache.org/maven2';
 
diff --git a/lib/manager/meteor/extract.js b/lib/manager/meteor/extract.js
index 0769c8ed007572c908dd3ad547e7e1ae543f8110..e85030876b054ed9e7c2c4fad077d023aff7a369 100644
--- a/lib/manager/meteor/extract.js
+++ b/lib/manager/meteor/extract.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   extractPackageFile,
 };
diff --git a/lib/manager/meteor/update.js b/lib/manager/meteor/update.js
index 16074f08f3e4d16aa7b0e188d373902d1cdc399d..c23d67eb3111d8ab6d48791940c44cab976cb16a 100644
--- a/lib/manager/meteor/update.js
+++ b/lib/manager/meteor/update.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   updateDependency,
 };
diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index f5c3abe71142de25d8c54ce0ac4ddeeeee9f8754..abbcb449a1245d8767e6cd7079ff50b4ce8d88fb 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -2,6 +2,7 @@ const fs = require('fs-extra');
 const path = require('path');
 const upath = require('upath');
 const validateNpmPackageName = require('validate-npm-package-name');
+const { logger } = require('../../../logger');
 
 const { getLockedVersions } = require('./locked-versions');
 const { detectMonorepos } = require('./monorepo');
diff --git a/lib/manager/npm/extract/locked-versions.js b/lib/manager/npm/extract/locked-versions.js
index 934f14fdc659a6a292b0fe50f0b3b88a079432a6..ad2a8a4c6f7c1a40e45b975c25fe931ca17cef9e 100644
--- a/lib/manager/npm/extract/locked-versions.js
+++ b/lib/manager/npm/extract/locked-versions.js
@@ -1,4 +1,5 @@
 const { valid } = require('semver');
+const { logger } = require('../../../logger');
 const { getNpmLock } = require('./npm');
 const { getYarnLock } = require('./yarn');
 
diff --git a/lib/manager/npm/extract/monorepo.js b/lib/manager/npm/extract/monorepo.js
index a978511973ce4b6ba30311c81020590fff9b042c..1f9cdbf112bd01686236e4631fb65001b05e5771 100644
--- a/lib/manager/npm/extract/monorepo.js
+++ b/lib/manager/npm/extract/monorepo.js
@@ -2,6 +2,7 @@ const is = require('@sindresorhus/is');
 const minimatch = require('minimatch');
 const path = require('path');
 const upath = require('upath');
+const { logger } = require('../../../logger');
 
 module.exports = {
   detectMonorepos,
diff --git a/lib/manager/npm/extract/npm.js b/lib/manager/npm/extract/npm.js
index 045a8f5c3b7dd42041df0be0c2f23ecae63e0355..447683d2a8a159ced08930515a15f12e328d7a7b 100644
--- a/lib/manager/npm/extract/npm.js
+++ b/lib/manager/npm/extract/npm.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../../logger');
+
 module.exports = {
   getNpmLock,
 };
diff --git a/lib/manager/npm/extract/yarn.js b/lib/manager/npm/extract/yarn.js
index e5ae91eb51fe900094a94eaee86e2aefdd968c62..b3dceef1f4f6718bcac1cf0d3a736aa37305dd0f 100644
--- a/lib/manager/npm/extract/yarn.js
+++ b/lib/manager/npm/extract/yarn.js
@@ -1,4 +1,5 @@
 const yarnLockParser = require('@yarnpkg/lockfile');
+const { logger } = require('../../../logger');
 
 module.exports = {
   getYarnLock,
diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js
index 32ef316b82d56428af5556ac8f768b6c13e21890..97a62370af5f0a7c1b1d5c16efdb37cd724ada50 100644
--- a/lib/manager/npm/post-update/index.js
+++ b/lib/manager/npm/post-update/index.js
@@ -2,7 +2,7 @@ const fs = require('fs-extra');
 const path = require('path');
 const upath = require('upath');
 const is = require('@sindresorhus/is');
-
+const { logger } = require('../../../logger');
 const npm = require('./npm');
 const lerna = require('./lerna');
 const yarn = require('./yarn');
diff --git a/lib/manager/npm/post-update/lerna.js b/lib/manager/npm/post-update/lerna.js
index 319f670c8434a2e4b42b3231190c802283564128..6794a2a70329865a2a1faa4afc267cf5016b91b8 100644
--- a/lib/manager/npm/post-update/lerna.js
+++ b/lib/manager/npm/post-update/lerna.js
@@ -1,4 +1,5 @@
 const { exec } = require('child-process-promise');
+const { logger } = require('../../../logger');
 
 module.exports = {
   generateLockFiles,
diff --git a/lib/manager/npm/post-update/npm.js b/lib/manager/npm/post-update/npm.js
index 500dbf34afd86663e0e8f06e917c66593fdb7621..c92a99e2e28625e7cdd2205123afa4e65d9d6fe3 100644
--- a/lib/manager/npm/post-update/npm.js
+++ b/lib/manager/npm/post-update/npm.js
@@ -2,6 +2,7 @@ const fs = require('fs-extra');
 const upath = require('upath');
 const { getInstalledPath } = require('get-installed-path');
 const { exec } = require('child-process-promise');
+const { logger } = require('../../../logger');
 
 module.exports = {
   generateLockFile,
diff --git a/lib/manager/npm/post-update/pnpm.js b/lib/manager/npm/post-update/pnpm.js
index 883c36c427b08cbef656d188649773843704ba80..e5815ceba1d9cb9eac1bbdcacfbaacd021ad9cf1 100644
--- a/lib/manager/npm/post-update/pnpm.js
+++ b/lib/manager/npm/post-update/pnpm.js
@@ -2,6 +2,7 @@ const fs = require('fs-extra');
 const upath = require('upath');
 const { getInstalledPath } = require('get-installed-path');
 const { exec } = require('child-process-promise');
+const { logger } = require('../../../logger');
 
 module.exports = {
   generateLockFile,
diff --git a/lib/manager/npm/post-update/yarn.js b/lib/manager/npm/post-update/yarn.js
index 6979ea9601b07a59533438ddf963666c64ce76c6..2c58a1711c71cc45e933ffa8444bb09d83586079 100644
--- a/lib/manager/npm/post-update/yarn.js
+++ b/lib/manager/npm/post-update/yarn.js
@@ -2,6 +2,7 @@ const fs = require('fs-extra');
 const upath = require('upath');
 const { getInstalledPath } = require('get-installed-path');
 const { exec } = require('child-process-promise');
+const { logger } = require('../../../logger');
 
 module.exports = {
   generateLockFile,
diff --git a/lib/manager/npm/range.js b/lib/manager/npm/range.js
index b71e73f1c1abb028392e05de32dc608b6994c169..89083aa749434cd78f4a70e9309e6ee5aff28b7f 100644
--- a/lib/manager/npm/range.js
+++ b/lib/manager/npm/range.js
@@ -1,4 +1,5 @@
 const { parseRange } = require('semver-utils');
+const { logger } = require('../../logger');
 
 module.exports = {
   getRangeStrategy,
diff --git a/lib/manager/npm/update.js b/lib/manager/npm/update.js
index bf81a6914bb1d356e0c62d00721b668ce06e53c6..8db1ea4f4f8d381501c04de052cadc13f063d459 100644
--- a/lib/manager/npm/update.js
+++ b/lib/manager/npm/update.js
@@ -1,5 +1,6 @@
 const _ = require('lodash');
 const semver = require('semver');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/manager/nuget/extract.js b/lib/manager/nuget/extract.js
index 47304f072d955f86daf32c6fa252622462459af4..0f7010bc38cfad79b8231a26f23b6f5d83b5958c 100644
--- a/lib/manager/nuget/extract.js
+++ b/lib/manager/nuget/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const versioning = require('../../versioning');
 
 module.exports = {
diff --git a/lib/manager/nuget/update.js b/lib/manager/nuget/update.js
index 7def06d743d83f9f0d86c0cf5f0a192bf0238e07..e0dc2edbc0150ea793196d346da6514964c92ea7 100644
--- a/lib/manager/nuget/update.js
+++ b/lib/manager/nuget/update.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   updateDependency,
 };
diff --git a/lib/manager/nvm/update.js b/lib/manager/nvm/update.js
index a9ecea5fe021d7ebe855f2d564ef4152c3dabd93..5de15329f5d2bb1e82b0ff3c70f05a6ca5b396c1 100644
--- a/lib/manager/nvm/update.js
+++ b/lib/manager/nvm/update.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   updateDependency,
 };
diff --git a/lib/manager/pip_requirements/extract.js b/lib/manager/pip_requirements/extract.js
index 99c1274fafe9e405c9a1d7edd1217ee3b8d9f2cf..77e480013a0818fd09f784bd7510e405a19bc805 100644
--- a/lib/manager/pip_requirements/extract.js
+++ b/lib/manager/pip_requirements/extract.js
@@ -3,6 +3,7 @@ const packagePattern = '[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]';
 const extrasPattern = '(?:\\s*\\[[^\\]]+\\])?';
 const rangePattern = require('@renovate/pep440/lib/specifier').RANGE_PATTERN;
 
+const { logger } = require('../../logger');
 const { isSkipComment } = require('../../util/ignore');
 
 const specifierPartPattern = `\\s*${rangePattern.replace(/\?<\w+>/g, '?:')}`;
diff --git a/lib/manager/pip_requirements/update.js b/lib/manager/pip_requirements/update.js
index 7abccae162cb3943d8c815ff6c6ae2228c59d123..0c8783352f7da2df8f3ced1aa7c35ebebc97e134 100644
--- a/lib/manager/pip_requirements/update.js
+++ b/lib/manager/pip_requirements/update.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { dependencyPattern } = require('./extract');
 
 module.exports = {
diff --git a/lib/manager/pip_setup/extract.js b/lib/manager/pip_setup/extract.js
index 29c6d472f7e1f4694e0ee69dfdacf43007a38a8f..b085288e6ca88e8c74003e355813eebc0c5cd877 100644
--- a/lib/manager/pip_setup/extract.js
+++ b/lib/manager/pip_setup/extract.js
@@ -1,5 +1,6 @@
 const { exec } = require('child-process-promise');
 const { join } = require('upath');
+const { logger } = require('../../logger');
 const { isSkipComment } = require('../../util/ignore');
 const { dependencyPattern } = require('../pip_requirements/extract');
 
diff --git a/lib/manager/pipenv/artifacts.js b/lib/manager/pipenv/artifacts.js
index b595cf5ee4e0cd86df649a4ea8a3708ed1f43fab..e4dd140f21a7f003969c158081e0f5d52df3fd94 100644
--- a/lib/manager/pipenv/artifacts.js
+++ b/lib/manager/pipenv/artifacts.js
@@ -2,6 +2,7 @@ const { exec } = require('child-process-promise');
 const fs = require('fs-extra');
 const upath = require('upath');
 const { getChildProcessEnv } = require('../../util/env');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateArtifacts,
diff --git a/lib/manager/pipenv/extract.js b/lib/manager/pipenv/extract.js
index a4ce2a6121cc3c95c291995ea757f38a74e8dee0..4c81528f153758a60fa2b295073ab0d802698333 100644
--- a/lib/manager/pipenv/extract.js
+++ b/lib/manager/pipenv/extract.js
@@ -4,6 +4,7 @@ const is = require('@sindresorhus/is');
 // based on https://www.python.org/dev/peps/pep-0508/#names
 const packageRegex = /^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$/i;
 const rangePattern = require('@renovate/pep440/lib/specifier').RANGE_PATTERN;
+const { logger } = require('../../logger');
 
 const specifierPartPattern = `\\s*${rangePattern.replace(
   /\?<\w+>/g,
diff --git a/lib/manager/pipenv/update.js b/lib/manager/pipenv/update.js
index 995d71e33357551bdb826761a1bad7a145f3de1f..8d5829ea017b7552b37e60d6ea7c5b79d893944f 100644
--- a/lib/manager/pipenv/update.js
+++ b/lib/manager/pipenv/update.js
@@ -1,5 +1,6 @@
 const _ = require('lodash');
 const toml = require('toml');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/manager/poetry/artifacts.js b/lib/manager/poetry/artifacts.js
index b2999a16335820f44ca58db566d1ac3f6973e925..47c9c5198d3d8f24e3e6c50b4c9cbf6ff33931c2 100644
--- a/lib/manager/poetry/artifacts.js
+++ b/lib/manager/poetry/artifacts.js
@@ -4,6 +4,8 @@ const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const { getChildProcessEnv } = require('../../util/env');
 
+const { logger } = require('../../logger');
+
 module.exports = {
   updateArtifacts,
 };
diff --git a/lib/manager/poetry/extract.js b/lib/manager/poetry/extract.js
index 85153ceb2e3fbf29502515287ca66c46ef3bcb74..3835e71875f285edc969bd449953d05e46814ddf 100644
--- a/lib/manager/poetry/extract.js
+++ b/lib/manager/poetry/extract.js
@@ -1,5 +1,6 @@
 const toml = require('toml');
 const semver = require('../../versioning/poetry');
+const { logger } = require('../../logger');
 
 module.exports = {
   extractPackageFile,
diff --git a/lib/manager/poetry/update.js b/lib/manager/poetry/update.js
index 1536899a858431f82a5bffc2b563d0386411092b..0c8b0e6d0f98c850482d80256cc10d4760ab39f9 100644
--- a/lib/manager/poetry/update.js
+++ b/lib/manager/poetry/update.js
@@ -1,6 +1,8 @@
 const _ = require('lodash');
 const toml = require('toml');
 
+const { logger } = require('../../logger');
+
 module.exports = {
   updateDependency,
 };
diff --git a/lib/manager/pub/extract.js b/lib/manager/pub/extract.js
index 8a5e1e335ce63d1a95dce477f946c73d18f48019..5dcac29ade29878a752b01b7e54361ae09f666a2 100644
--- a/lib/manager/pub/extract.js
+++ b/lib/manager/pub/extract.js
@@ -1,5 +1,6 @@
 const yaml = require('js-yaml');
 const npm = require('../../versioning/npm/index');
+const { logger } = require('../../logger');
 
 module.exports = {
   extractPackageFile,
diff --git a/lib/manager/ruby-version/extract.js b/lib/manager/ruby-version/extract.js
index 72f9c5a7ba591268e01e16ea3595075b7d280c28..f999ecbc598e56014b7623f9ac53ca7aafbf0289 100644
--- a/lib/manager/ruby-version/extract.js
+++ b/lib/manager/ruby-version/extract.js
@@ -1,4 +1,5 @@
 const ruby = require('../../versioning/ruby');
+const { logger } = require('../../logger');
 
 module.exports = {
   extractPackageFile,
diff --git a/lib/manager/ruby-version/update.js b/lib/manager/ruby-version/update.js
index 0398939e25b9a4e9ed2b6e516f19fd36452b0efa..d751a8ba347040746a18eb784199dcd204cd44d0 100644
--- a/lib/manager/ruby-version/update.js
+++ b/lib/manager/ruby-version/update.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   updateDependency,
 };
diff --git a/lib/manager/terraform/extract.js b/lib/manager/terraform/extract.js
index f63c185dcf485bdee6aef8107af7921ed37d5c17..b7969ed0a27f86bb157bec7a515a3924387fd5e4 100644
--- a/lib/manager/terraform/extract.js
+++ b/lib/manager/terraform/extract.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { isValid, isVersion } = require('../../versioning/hashicorp');
 
 module.exports = {
diff --git a/lib/manager/terraform/update.js b/lib/manager/terraform/update.js
index a6a830251f652c5c041ffa0f4f94004cd0b00ec4..c96cd04c4654c8e2c1ff16d18b44657521aa1f96 100644
--- a/lib/manager/terraform/update.js
+++ b/lib/manager/terraform/update.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   updateDependency,
 };
diff --git a/lib/manager/travis/package.js b/lib/manager/travis/package.js
index 541266b562859b403c2407c5a616f33f4bc70033..78c00e7caedef8c71d73231e18c17e660deea7c4 100644
--- a/lib/manager/travis/package.js
+++ b/lib/manager/travis/package.js
@@ -2,6 +2,7 @@ const is = require('@sindresorhus/is');
 const { isEqual } = require('lodash');
 const { getPkgReleases } = require('../../datasource');
 const { isVersion, maxSatisfyingVersion } = require('../../versioning/semver');
+const { logger } = require('../../logger');
 const nodeJsSchedule = require('../../../data/node-js-schedule.json');
 
 module.exports = {
diff --git a/lib/manager/travis/update.js b/lib/manager/travis/update.js
index ef86cd780484fd285b1598cdcba529af097d610d..f3c94aca9ccd70d7f57f3913417c250b0beb13e2 100644
--- a/lib/manager/travis/update.js
+++ b/lib/manager/travis/update.js
@@ -1,5 +1,6 @@
 const detectIndent = require('detect-indent');
 const is = require('@sindresorhus/is');
+const { logger } = require('../../logger');
 
 module.exports = {
   updateDependency,
diff --git a/lib/platform/azure/azure-helper.ts b/lib/platform/azure/azure-helper.ts
index 7f65c90b591e96b701115da12d514d34ed3e7f62..4e019b845b5d0935f112864fbfbd650b6e754515 100644
--- a/lib/platform/azure/azure-helper.ts
+++ b/lib/platform/azure/azure-helper.ts
@@ -1,4 +1,5 @@
 import * as azureApi from './azure-got-wrapper';
+import { logger } from '../../logger';
 
 /**
  *
diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts
index 135ba3254678cfbba5a0e46d04d92459ac5af4b8..2ec2d577b399edb59c77238a12c9f9d46253629b 100644
--- a/lib/platform/azure/index.ts
+++ b/lib/platform/azure/index.ts
@@ -3,6 +3,7 @@ import * as azureApi from './azure-got-wrapper';
 import * as hostRules from '../../util/host-rules';
 import { appSlug } from '../../config/app-strings';
 import GitStorage from '../git/storage';
+import { logger } from '../../logger';
 
 interface RepoConfig {
   storage: GitStorage;
diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts
index 650e14b4808dd53c5e2908d4dccbb1e47109645e..85bf5a975ede0234b0c9b2544d362da7e435c176 100644
--- a/lib/platform/bitbucket-server/index.ts
+++ b/lib/platform/bitbucket-server/index.ts
@@ -5,6 +5,7 @@ import { api } from './bb-got-wrapper';
 import * as utils from './utils';
 import * as hostRules from '../../util/host-rules';
 import GitStorage from '../git/storage';
+import { logger } from '../../logger';
 
 interface BbsConfig {
   baseBranch: string;
diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts
index f4bca52cac608101630fd1acbb41444a1bc3aa34..4f3a8f818929b6fb7c75442116fbe4fa6a68c7a0 100644
--- a/lib/platform/bitbucket/index.ts
+++ b/lib/platform/bitbucket/index.ts
@@ -2,6 +2,7 @@ import parseDiff from 'parse-diff';
 import { api } from './bb-got-wrapper';
 import * as utils from './utils';
 import * as hostRules from '../../util/host-rules';
+import { logger } from '../../logger';
 import GitStorage from '../git/storage';
 import { readOnlyIssueBody } from '../utils/read-only-issue-body';
 import { appSlug } from '../../config/app-strings';
diff --git a/lib/platform/git/storage.ts b/lib/platform/git/storage.ts
index cd53c9d9abb35027af6fd880039843c06fde8a02..96bafa256d9bd63e77f4b729bb8780900ce1b389 100644
--- a/lib/platform/git/storage.ts
+++ b/lib/platform/git/storage.ts
@@ -3,6 +3,7 @@ import fs from 'fs-extra';
 import { join } from 'path';
 import Git from 'simple-git/promise';
 import URL from 'url';
+import { logger } from '../../logger';
 
 declare module 'fs-extra' {
   // eslint-disable-next-line import/prefer-default-export
diff --git a/lib/platform/github/gh-got-wrapper.ts b/lib/platform/github/gh-got-wrapper.ts
index 8b8662a925e098472c035881c7fe3677624ea87b..c13adbe49be7ffbec50ba34f7a7fd5bb35d0c798 100644
--- a/lib/platform/github/gh-got-wrapper.ts
+++ b/lib/platform/github/gh-got-wrapper.ts
@@ -5,6 +5,7 @@ import pAll from 'p-all';
 import got from '../../util/got';
 import { maskToken } from '../../util/mask';
 import { GotApi } from '../common';
+import { logger } from '../../logger';
 
 const hostType = 'github';
 let baseUrl = 'https://api.github.com/';
diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts
index c90bdde9f9fdad4571866fc91688d383acd2b147..fe56b4e271011c6d1e82a4c47e1816376bbe61cf 100644
--- a/lib/platform/github/index.ts
+++ b/lib/platform/github/index.ts
@@ -3,6 +3,7 @@ import delay from 'delay';
 import semver from 'semver';
 import URL from 'url';
 
+import { logger } from '../../logger';
 import { api } from './gh-got-wrapper';
 import * as hostRules from '../../util/host-rules';
 import GitStorage from '../git/storage';
diff --git a/lib/platform/gitlab/gl-got-wrapper.ts b/lib/platform/gitlab/gl-got-wrapper.ts
index d256961f12dde5f2281a8d3d141c9863fdcbb1e2..7303026650266de3b36db69d3003ee850759a216 100644
--- a/lib/platform/gitlab/gl-got-wrapper.ts
+++ b/lib/platform/gitlab/gl-got-wrapper.ts
@@ -2,6 +2,7 @@ import parseLinkHeader from 'parse-link-header';
 
 import { GotApi } from '../common';
 import got from '../../util/got';
+import { logger } from '../../logger';
 
 const hostType = 'gitlab';
 let baseUrl = 'https://gitlab.com/api/v4/';
diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts
index 4dd429a43e8f75fe6adc85c4ab0f54ccb6803111..12dd166cc4fc9868aa41a6ba4790479b6d6a36e9 100644
--- a/lib/platform/gitlab/index.ts
+++ b/lib/platform/gitlab/index.ts
@@ -6,6 +6,7 @@ import * as hostRules from '../../util/host-rules';
 import GitStorage from '../git/storage';
 import { PlatformConfig } from '../common';
 import { configFileNames } from '../../config/app-strings';
+import { logger } from '../../logger';
 
 const defaultConfigFile = configFileNames[0];
 let config: {
diff --git a/lib/platform/index.ts b/lib/platform/index.ts
index 2edaeaa9e13452eeab2a059348fed85da4734edd..485b6554be7b39391d69bf2032a1aabc339aa17a 100644
--- a/lib/platform/index.ts
+++ b/lib/platform/index.ts
@@ -1,6 +1,7 @@
 import URL from 'url';
 import addrs from 'email-addresses';
 import * as hostRules from '../util/host-rules';
+import { logger } from '../logger';
 
 // TODO: move to definitions: platform.allowedValues
 /* eslint-disable global-require */
diff --git a/lib/types.d.ts b/lib/types.d.ts
index f36ce43cf5cc97d47da875fa2dbab7a4c73e012b..3ce19ad72db1945d62e5fedd04555ba047830f66 100644
--- a/lib/types.d.ts
+++ b/lib/types.d.ts
@@ -1,20 +1,4 @@
-declare namespace Renovate {
-  // TODO: refactor logger
-  interface Logger {
-    trace(...args: any[]): void;
-    debug(...args: any[]): void;
-    info(...args: any[]): void;
-    warn(...args: any[]): void;
-    error(...args: any[]): void;
-    fatal(...args: any[]): void;
-    child(...args: any[]): void;
-
-    setMeta(obj: any): void;
-  }
-}
-
-// eslint-disable-next-line no-var, vars-on-top
-declare var logger: Renovate.Logger;
+declare namespace Renovate {}
 
 declare interface Error {
   validationError?: string;
@@ -25,8 +9,7 @@ declare namespace NodeJS {
   interface Global {
     appMode?: boolean;
     gitAuthor?: { name: string; email: string };
-    logger: Renovate.Logger;
-
+    renovateError?: boolean;
     renovateVersion: string;
     // TODO: declare interface for all platforms
     platform: typeof import('./platform/github');
diff --git a/lib/util/got/auth.js b/lib/util/got/auth.js
index ad2b833a3e23c498769efa5ef298b6c55be37583..77311e45cc748abd7f7d24bc89872b6b5115e918 100644
--- a/lib/util/got/auth.js
+++ b/lib/util/got/auth.js
@@ -1,4 +1,5 @@
 const got = require('got');
+const { logger } = require('../../logger');
 
 // istanbul ignore next
 module.exports = got.create({
diff --git a/lib/util/got/host-rules.js b/lib/util/got/host-rules.js
index e52382c97d2de632c6498f7f6fc2e8e7f3ee4e89..bed682ab0a69a5b629e5d024fea497f69c065c08 100644
--- a/lib/util/got/host-rules.js
+++ b/lib/util/got/host-rules.js
@@ -1,5 +1,6 @@
 /* eslint-disable no-param-reassign */
 const got = require('got');
+const { logger } = require('../../logger');
 const hostRules = require('../host-rules');
 
 // Apply host rules to requests
diff --git a/lib/util/got/stats.js b/lib/util/got/stats.js
index c64b73b7cd69e895c5e1da20b9c7754e8c6a0f46..cf723302d713690badb6312554d13d296fa87425 100644
--- a/lib/util/got/stats.js
+++ b/lib/util/got/stats.js
@@ -1,4 +1,5 @@
 const got = require('got');
+const { logger } = require('../../logger');
 
 let stats = {};
 
diff --git a/lib/util/host-rules.ts b/lib/util/host-rules.ts
index e9352c2dc0b586d97965b89599928d9da8b99003..5299e163a36a8e72517663fde585377af9bb6f63 100644
--- a/lib/util/host-rules.ts
+++ b/lib/util/host-rules.ts
@@ -1,5 +1,6 @@
 import URL from 'url';
 import merge from 'deepmerge';
+import { logger } from '../logger';
 
 export interface HostRule {
   hostType?: string;
diff --git a/lib/util/ignore.js b/lib/util/ignore.js
index dfb2b60a8abadff412cab932166d989569416258..5c7fb557bfe71de033d3e2e89c2aa563964ca091 100644
--- a/lib/util/ignore.js
+++ b/lib/util/ignore.js
@@ -1,3 +1,5 @@
+const { logger } = require('../logger');
+
 module.exports = {
   isSkipComment,
 };
diff --git a/lib/util/package-rules.js b/lib/util/package-rules.js
index 56109ccf03d874eb2c112dfcfc9315c429e77524..ea8341cef9ecc70e421cb5ad310ad5178d1b5719 100644
--- a/lib/util/package-rules.js
+++ b/lib/util/package-rules.js
@@ -1,5 +1,6 @@
 const minimatch = require('minimatch');
 
+const { logger } = require('../logger');
 const versioning = require('../versioning');
 const { mergeChildConfig } = require('../config');
 
diff --git a/lib/versioning/composer/index.js b/lib/versioning/composer/index.js
index 29d35e616149ef0d9c84ac24a1cca027c0cfd043..2e3c00991777c7e00a4aa4578754c45a8fe26296 100644
--- a/lib/versioning/composer/index.js
+++ b/lib/versioning/composer/index.js
@@ -1,4 +1,5 @@
 const { coerce } = require('semver');
+const { logger } = require('../../logger');
 const npm = require('../npm');
 
 function padZeroes(input) {
diff --git a/lib/versioning/index.js b/lib/versioning/index.js
index 2d5ca56a299dbb4cbd3900e2a97957a5778a0cab..55ff6ff4a87e992f0ad95b6a35d23a8689675fac 100644
--- a/lib/versioning/index.js
+++ b/lib/versioning/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../logger');
 const supportedSchemes = require('../config/definitions')
   .getOptions()
   .find(option => option.name === 'versionScheme').allowedValues;
diff --git a/lib/versioning/npm/range.js b/lib/versioning/npm/range.js
index c2a03dc8022214f0a6f851b3972c7ccf94cdc984..adfd7591c3ca059169ee03ef1e8ba67cad8399b4 100644
--- a/lib/versioning/npm/range.js
+++ b/lib/versioning/npm/range.js
@@ -8,6 +8,7 @@ const {
   valid: isVersion,
 } = require('semver');
 const { parseRange } = require('semver-utils');
+const { logger } = require('../../logger');
 
 module.exports = {
   getNewValue,
diff --git a/lib/versioning/pep440/range.js b/lib/versioning/pep440/range.js
index 063b705b69c86bc39c314b378e5224adef282e64..6d78fe39209d7bd601e044dbec3944ce78827865 100644
--- a/lib/versioning/pep440/range.js
+++ b/lib/versioning/pep440/range.js
@@ -2,6 +2,7 @@ const { gte, lte, satisfies } = require('@renovate/pep440');
 
 const { parse: parseVersion } = require('@renovate/pep440/lib/version');
 const { parse: parseRange } = require('@renovate/pep440/lib/specifier');
+const { logger } = require('../../logger');
 
 module.exports = {
   getNewValue,
diff --git a/lib/versioning/ruby/index.js b/lib/versioning/ruby/index.js
index d65d338d3c0aca2d61155c8fd81054bb7513601e..36036c9d4d8afa1969083b34511d762b94fd8645 100644
--- a/lib/versioning/ruby/index.js
+++ b/lib/versioning/ruby/index.js
@@ -6,6 +6,7 @@ const {
   maxSatisfying,
   minSatisfying,
 } = require('@snyk/ruby-semver');
+const { logger } = require('../../logger');
 const { parse: parseVersion } = require('./version');
 const { parse: parseRange, ltr } = require('./range');
 const { isSingleOperator, isValidOperator } = require('./operator');
diff --git a/lib/versioning/ruby/range.js b/lib/versioning/ruby/range.js
index 7aa8b6a6cfc94af4235290c147c425851e7876ca..bfcc1fcb2f4578c95768867eff7e9b8fba1230d1 100644
--- a/lib/versioning/ruby/range.js
+++ b/lib/versioning/ruby/range.js
@@ -1,5 +1,6 @@
 const GemVersion = require('@snyk/ruby-semver/lib/ruby/gem-version');
 const GemRequirement = require('@snyk/ruby-semver/lib/ruby/gem-requirement');
+const { logger } = require('../../logger');
 const { EQUAL, NOT_EQUAL, GT, LT, GTE, LTE, PGTE } = require('./operator');
 
 const parse = range => {
diff --git a/lib/versioning/ruby/strategies/bump.js b/lib/versioning/ruby/strategies/bump.js
index 28fe77f4c9c8a93c8d045a36d14507b2bc1c1c43..39b2549cd00703777967e0e835a084a72e185d31 100644
--- a/lib/versioning/ruby/strategies/bump.js
+++ b/lib/versioning/ruby/strategies/bump.js
@@ -1,4 +1,5 @@
 const { gte, lte } = require('@snyk/ruby-semver');
+const { logger } = require('../../../logger');
 const { EQUAL, NOT_EQUAL, GT, LT, GTE, LTE, PGTE } = require('../operator');
 const { floor, increment, decrement } = require('../version');
 const { parse: parseRange } = require('../range');
diff --git a/lib/workers/branch/automerge.js b/lib/workers/branch/automerge.js
index 2e878306d4103816a085d696f12114cdfa04c488..ce0363e7422e98419e69bc7cf12f1efc0356262c 100644
--- a/lib/workers/branch/automerge.js
+++ b/lib/workers/branch/automerge.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   tryBranchAutomerge,
 };
diff --git a/lib/workers/branch/check-existing.js b/lib/workers/branch/check-existing.js
index 144525d611fcc5cbfce7096514fc216592f88fcf..5195af21a8dd2209271117aa5f2d924d9a7552f5 100644
--- a/lib/workers/branch/check-existing.js
+++ b/lib/workers/branch/check-existing.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../logger');
+
 module.exports = {
   prAlreadyExisted,
 };
diff --git a/lib/workers/branch/commit.js b/lib/workers/branch/commit.js
index b8fe8fcb97dc51f1c253a9e2638d68a4d0a04b41..85aaffdf79e0e6771b56ec5505052b9e70189278 100644
--- a/lib/workers/branch/commit.js
+++ b/lib/workers/branch/commit.js
@@ -1,5 +1,6 @@
 const is = require('@sindresorhus/is');
 const minimatch = require('minimatch');
+const { logger } = require('../../logger');
 
 module.exports = {
   commitFilesToBranch,
diff --git a/lib/workers/branch/get-updated.js b/lib/workers/branch/get-updated.js
index fe955912295b9c44935089ccf69214fb0c6a86bf..7265e2aa69b11ccb8e67e610b70525648054a469 100644
--- a/lib/workers/branch/get-updated.js
+++ b/lib/workers/branch/get-updated.js
@@ -1,4 +1,5 @@
 const is = require('@sindresorhus/is');
+const { logger } = require('../../logger');
 const { get } = require('../../manager');
 
 module.exports = {
diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js
index 1c308e430cb34bf7dcdba3289c8e3129eba6bbf4..af4e26b4edf6bd9dfb4df16a563f3109815fb0f1 100644
--- a/lib/workers/branch/index.js
+++ b/lib/workers/branch/index.js
@@ -1,5 +1,6 @@
 const { DateTime } = require('luxon');
 
+const { logger, setMeta } = require('../../logger');
 const schedule = require('./schedule');
 const { getUpdatedPackageFiles } = require('./get-updated');
 const { getAdditionalFiles } = require('../../manager/npm/post-update');
@@ -23,7 +24,7 @@ async function processBranch(branchConfig, prHourlyLimitReached, packageFiles) {
     .map(upgrade => upgrade.depName)
     .filter(v => v) // remove nulls (happens for lock file maintenance)
     .filter((value, i, list) => list.indexOf(value) === i); // remove duplicates
-  logger.setMeta({
+  setMeta({
     repository: config.repository,
     branch: config.branchName,
     dependencies,
diff --git a/lib/workers/branch/parent.js b/lib/workers/branch/parent.js
index 5f3c0e544fae57ea658897071d121f2233800123..19e6950477642f03d83dede82da43013d8fe44df 100644
--- a/lib/workers/branch/parent.js
+++ b/lib/workers/branch/parent.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { appSlug } = require('../../config/app-strings');
 
 module.exports = {
diff --git a/lib/workers/branch/schedule.js b/lib/workers/branch/schedule.js
index a210423a02df48e53aed8d0e649407d4c450a805..5a1d37d67f7132ec654a81a0c921e88a155041ba 100644
--- a/lib/workers/branch/schedule.js
+++ b/lib/workers/branch/schedule.js
@@ -1,6 +1,7 @@
 const is = require('@sindresorhus/is');
 const later = require('later');
 const moment = require('moment-timezone');
+const { logger } = require('../../logger');
 
 module.exports = {
   hasValidTimezone,
diff --git a/lib/workers/branch/status-checks.js b/lib/workers/branch/status-checks.js
index b1280969fe386b25092592df41ee73e704e8eb27..5afd2829045c9e2d19338831105b7f6affe7cafe 100644
--- a/lib/workers/branch/status-checks.js
+++ b/lib/workers/branch/status-checks.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { appSlug, urls } = require('../../config/app-strings');
 
 module.exports = {
diff --git a/lib/workers/global/autodiscover.js b/lib/workers/global/autodiscover.js
index a07796dac0c9f4baf0cd64a4b5dc0ebafcc73a63..1eeb4d25370db38bb9606118579bbefd4493930d 100644
--- a/lib/workers/global/autodiscover.js
+++ b/lib/workers/global/autodiscover.js
@@ -1,5 +1,6 @@
 const is = require('@sindresorhus/is');
 const minimatch = require('minimatch');
+const { logger } = require('../../logger');
 
 module.exports = {
   autodiscoverRepositories,
diff --git a/lib/workers/global/cache.js b/lib/workers/global/cache.js
index 3843682d69c4455df2ee294d566be2465737c44b..62379c1400df6687132ed1930d51cdc553f09cee 100644
--- a/lib/workers/global/cache.js
+++ b/lib/workers/global/cache.js
@@ -1,6 +1,7 @@
 const cacache = require('cacache/en');
 const path = require('path');
 const { DateTime } = require('luxon');
+const { logger } = require('../../logger');
 
 module.exports = {
   init,
diff --git a/lib/workers/global/index.js b/lib/workers/global/index.js
index b691550d93691f7baba4240504a3f8fd754b398c..8c16d80249ad58e1df45f26a7b3f686797c4974a 100644
--- a/lib/workers/global/index.js
+++ b/lib/workers/global/index.js
@@ -2,7 +2,7 @@ const fs = require('fs-extra');
 const os = require('os');
 const is = require('@sindresorhus/is');
 const path = require('path');
-const { initLogger } = require('../../logger');
+const { logger, setMeta } = require('../../logger');
 const configParser = require('../../config');
 const repositoryWorker = require('../repository');
 const cache = require('./cache');
@@ -18,7 +18,6 @@ module.exports = {
 };
 
 async function start() {
-  initLogger();
   try {
     cache.init(os.tmpdir());
     let config = await configParser.parseConfigs(process.env, process.argv);
@@ -68,7 +67,7 @@ async function start() {
       }
       await repositoryWorker.renovateRepository(repoConfig);
     }
-    logger.setMeta({});
+    setMeta({});
     printStats();
     logger.info(`${appName} finished`);
   } catch (err) /* istanbul ignore next */ {
diff --git a/lib/workers/pr/changelog/index.js b/lib/workers/pr/changelog/index.js
index 9c62ec936bb57a724aa0fe7a3b4fe124fed639d5..2d3d3976df492720a459cfd55df69658ad0b95b2 100644
--- a/lib/workers/pr/changelog/index.js
+++ b/lib/workers/pr/changelog/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../logger');
 const versioning = require('../../../versioning');
 
 const sourceGithub = require('./source-github');
diff --git a/lib/workers/pr/changelog/release-notes.js b/lib/workers/pr/changelog/release-notes.js
index 3e5b935853b851197e324b29d357d08790464cb4..2a85c223baa724e71a80f936ca3233efec155f4f 100644
--- a/lib/workers/pr/changelog/release-notes.js
+++ b/lib/workers/pr/changelog/release-notes.js
@@ -3,6 +3,7 @@ import ghGot from '../../../platform/github/gh-got-wrapper';
 const changelogFilenameRegex = require('changelog-filename-regex');
 const { linkify } = require('linkify-markdown');
 const MarkdownIt = require('markdown-it');
+const { logger } = require('../../../logger');
 
 const markdown = new MarkdownIt('zero');
 markdown.enable(['heading', 'lheading']);
diff --git a/lib/workers/pr/changelog/source-github.js b/lib/workers/pr/changelog/source-github.js
index 0162daacc44e97d72a9e2d97da2148da663aacc3..214e478490a2bd5e2f4e356cec1b5ae218bce831 100644
--- a/lib/workers/pr/changelog/source-github.js
+++ b/lib/workers/pr/changelog/source-github.js
@@ -1,6 +1,7 @@
 import ghGot from '../../../platform/github/gh-got-wrapper';
 
 const URL = require('url');
+const { logger } = require('../../../logger');
 const hostRules = require('../../../util/host-rules');
 const versioning = require('../../../versioning');
 const { addReleaseNotes } = require('./release-notes');
diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js
index 199a99e1cd5f007ec741c644590ab6506b168529..bacb09a698e43dbdaf7bbb2fe78454e1cea92ea0 100644
--- a/lib/workers/pr/index.js
+++ b/lib/workers/pr/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const changelogHelper = require('./changelog');
 const { getPrBody } = require('./pr-body');
 
diff --git a/lib/workers/pr/pr-body.js b/lib/workers/pr/pr-body.js
index fdd3b7211c3c694c515af92329fe0d72a23657e3..c03bc443566865609b0b44676c6b0364d64e5d4d 100644
--- a/lib/workers/pr/pr-body.js
+++ b/lib/workers/pr/pr-body.js
@@ -1,5 +1,6 @@
 const is = require('@sindresorhus/is');
 const handlebars = require('handlebars');
+const { logger } = require('../../logger');
 const releaseNotesHbs = require('./changelog/hbs-template');
 const { getPrConfigDescription } = require('./pr-body-config');
 
diff --git a/lib/workers/repository/error-config.js b/lib/workers/repository/error-config.js
index 62712a6a526ad34922e3650c99fca1529e8af644..11ac39443d6901045aec905eb02316a1904e3ba6 100644
--- a/lib/workers/repository/error-config.js
+++ b/lib/workers/repository/error-config.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const {
   appName,
   onboardingBranch,
diff --git a/lib/workers/repository/error.js b/lib/workers/repository/error.js
index a4fabfb95668b7f25762092427e7f0208a51fe00..614fb62e9ce6d49c68f1072be1a6ada722d4aac8 100644
--- a/lib/workers/repository/error.js
+++ b/lib/workers/repository/error.js
@@ -1,13 +1,11 @@
-const { raiseConfigWarningIssue } = require('./error-config');
+import { logger, setMeta } from '../../logger';
+import { raiseConfigWarningIssue } from './error-config';
 
-module.exports = {
-  handleError,
-};
-
-async function handleError(config, err) {
-  logger.setMeta({
+export default async function handleError(config, err) {
+  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/extract/file-match.js b/lib/workers/repository/extract/file-match.js
index 3aeaab804e3d246b53bfa2371baad4a0e966c614..3939b61f339f0e5daaa815f22835319a3457b431 100644
--- a/lib/workers/repository/extract/file-match.js
+++ b/lib/workers/repository/extract/file-match.js
@@ -1,4 +1,5 @@
 const minimatch = require('minimatch');
+const { logger } = require('../../../logger');
 
 module.exports = {
   getIncludedFiles,
diff --git a/lib/workers/repository/extract/index.js b/lib/workers/repository/extract/index.js
index 4b5e97aff3114efa8088cefbb1715c35cfc699ba..a794b89933b996b96725971c2157ddc9444a8b64 100644
--- a/lib/workers/repository/extract/index.js
+++ b/lib/workers/repository/extract/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../logger');
 const { getManagerList } = require('../../../manager');
 const { getManagerConfig } = require('../../../config');
 const { getManagerPackageFiles } = require('./manager-files');
diff --git a/lib/workers/repository/extract/manager-files.js b/lib/workers/repository/extract/manager-files.js
index 6452ec9e24aa448b1d364da5cbde99410b5bad51..433ac3aa5b4021baca660770e0e991ca0d466104 100644
--- a/lib/workers/repository/extract/manager-files.js
+++ b/lib/workers/repository/extract/manager-files.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../../logger');
+
 module.exports = {
   getManagerPackageFiles,
 };
diff --git a/lib/workers/repository/finalise/prune.js b/lib/workers/repository/finalise/prune.js
index 9afd19b1ef8e1c8c65b71ff67e5eeed516048777..bb858fb72e4836996cbd65309cad43672ceb4b48 100644
--- a/lib/workers/repository/finalise/prune.js
+++ b/lib/workers/repository/finalise/prune.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../../logger');
+
 module.exports = {
   pruneStaleBranches,
 };
diff --git a/lib/workers/repository/finalise/validate.js b/lib/workers/repository/finalise/validate.js
index 34e7d323fd3c5b04d7b0c7efe4fe528316515a83..dd26a2e31315e07faf9aa247d0fc3f80a2b79714 100644
--- a/lib/workers/repository/finalise/validate.js
+++ b/lib/workers/repository/finalise/validate.js
@@ -1,4 +1,5 @@
 const JSON5 = require('json5');
+const { logger, setMeta } = require('../../../logger');
 const { migrateAndValidate } = require('../../../config/migrate-validate');
 const { configFileNames } = require('../../../config/app-strings');
 const { appName, appSlug } = require('../../../config/app-strings');
@@ -23,7 +24,7 @@ async function validatePrs(config) {
   ) {
     return;
   }
-  logger.setMeta({ repository: config.repository });
+  setMeta({ repository: config.repository });
   logger.debug('branchPrefix: ' + config.branchPrefix);
   const renovatePrs = await getRenovatePrs(config.branchPrefix);
   logger.debug({ renovatePrs }, `Found ${renovatePrs.length} ${appName} PRs`);
diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js
index a5914145bfb41e4c87ea8cca5681f9d5bb5078d6..c206adc3f1a7521dd5ab469ac29676d0da18e327 100644
--- a/lib/workers/repository/index.js
+++ b/lib/workers/repository/index.js
@@ -1,8 +1,10 @@
+import handleError from './error';
+
 const fs = require('fs-extra');
 
+const { logger, setMeta } = require('../../logger');
 const { initRepo } = require('./init');
 const { ensureOnboardingPr } = require('./onboarding/pr');
-const { handleError } = require('./error');
 const { processResult } = require('./result');
 const { processRepo } = require('./process');
 const { finaliseRepo } = require('./finalise');
@@ -15,7 +17,7 @@ module.exports = {
 // istanbul ignore next
 async function renovateRepository(repoConfig) {
   let config = { ...repoConfig };
-  logger.setMeta({ repository: config.repository });
+  setMeta({ repository: config.repository });
   logger.info('Renovating repository');
   logger.trace({ config });
   let repoResult;
diff --git a/lib/workers/repository/init/base.js b/lib/workers/repository/init/base.js
index 16a7c09a7293c35aad79ece8cee6b57d00f3e9bb..a2913a3f3999c7f84f5c18e93cc7f144badda32a 100644
--- a/lib/workers/repository/init/base.js
+++ b/lib/workers/repository/init/base.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../../logger');
+
 async function checkBaseBranch(config) {
   logger.debug('checkBaseBranch()');
   logger.debug(`config.repoIsOnboarded=${config.repoIsOnboarded}`);
diff --git a/lib/workers/repository/init/config.js b/lib/workers/repository/init/config.js
index a5a24887685830ddda5b046b9e935420626fd1d0..07ded19677e8dddf430308f74cba8c52af3a22ba 100644
--- a/lib/workers/repository/init/config.js
+++ b/lib/workers/repository/init/config.js
@@ -2,6 +2,7 @@ const jsonValidator = require('json-dup-key-validator');
 const JSON5 = require('json5');
 const path = require('path');
 
+const { logger } = require('../../../logger');
 const { mergeChildConfig } = require('../../../config');
 const { migrateAndValidate } = require('../../../config/migrate-validate');
 const { decryptConfig } = require('../../../config/decrypt');
diff --git a/lib/workers/repository/init/flatten.js b/lib/workers/repository/init/flatten.js
index 364a82824959f080aa4d3b3135a691c2e3152d1e..e52af19fef2f06810e818c1791f058c59c805c15 100644
--- a/lib/workers/repository/init/flatten.js
+++ b/lib/workers/repository/init/flatten.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../logger');
 const { mergeChildConfig } = require('../../../config');
 
 function flattenPackageRules(packageRules) {
diff --git a/lib/workers/repository/init/index.js b/lib/workers/repository/init/index.js
index 18a5a73b75aec34568c821e7859ac70fba60cc07..9870527218fd64736dfc8ce368f4a1ca87471e93 100644
--- a/lib/workers/repository/init/index.js
+++ b/lib/workers/repository/init/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../logger');
 const { checkOnboardingBranch } = require('../onboarding/branch');
 const { checkIfConfigured } = require('../configured');
 const { initApis } = require('../init/apis');
diff --git a/lib/workers/repository/init/semantic.js b/lib/workers/repository/init/semantic.js
index 942f52836cf429471987e5c752ba618321082601..da3d8c839d779b21cd6745df0616b578b5788435 100644
--- a/lib/workers/repository/init/semantic.js
+++ b/lib/workers/repository/init/semantic.js
@@ -1,4 +1,5 @@
 const conventionalCommitsDetector = require('conventional-commits-detector');
+const { logger } = require('../../../logger');
 
 async function detectSemanticCommits(config) {
   logger.debug('detectSemanticCommits()');
diff --git a/lib/workers/repository/init/vulnerability.js b/lib/workers/repository/init/vulnerability.js
index f556c2d86d340fe81e20998361e223f7d1939019..0b81bffe1efdfed7e7f96fc51a0f37e4eeba8c83 100644
--- a/lib/workers/repository/init/vulnerability.js
+++ b/lib/workers/repository/init/vulnerability.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../logger');
 const versioning = require('../../../versioning');
 
 module.exports = {
diff --git a/lib/workers/repository/master-issue.js b/lib/workers/repository/master-issue.js
index 93806459f890770422c8f28208c0dff81937e4f0..d4af88d2611d1ec55fd9d8addf16b86a48a23658 100644
--- a/lib/workers/repository/master-issue.js
+++ b/lib/workers/repository/master-issue.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../logger');
 const { appName } = require('../../config/app-strings');
 
 module.exports = {
diff --git a/lib/workers/repository/onboarding/branch/check.js b/lib/workers/repository/onboarding/branch/check.js
index ddfa215c4d88c25f5140e5cef8d440eeab5c7ec7..cd6e0058280f1f419df0315546479cc5fcbd8f86 100644
--- a/lib/workers/repository/onboarding/branch/check.js
+++ b/lib/workers/repository/onboarding/branch/check.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const {
   appName,
   appSlug,
diff --git a/lib/workers/repository/onboarding/branch/config.js b/lib/workers/repository/onboarding/branch/config.js
index eef34e4e372b16718880c929f43acaed9b7d5091..899d482fccfd86eb404d9240a6e7edf4d3842cd8 100644
--- a/lib/workers/repository/onboarding/branch/config.js
+++ b/lib/workers/repository/onboarding/branch/config.js
@@ -1,4 +1,5 @@
 const is = require('@sindresorhus/is');
+const { logger } = require('../../../../logger');
 
 const { appSlug } = require('../../../../config/app-strings');
 
diff --git a/lib/workers/repository/onboarding/branch/create.js b/lib/workers/repository/onboarding/branch/create.js
index 61d17f36be1e794db4c078fd92c2634cf13f71e2..02d140526b7713e2bbd48dc2794396863c244481 100644
--- a/lib/workers/repository/onboarding/branch/create.js
+++ b/lib/workers/repository/onboarding/branch/create.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const { getOnboardingConfig } = require('./config');
 const {
   configFileNames,
diff --git a/lib/workers/repository/onboarding/branch/index.js b/lib/workers/repository/onboarding/branch/index.js
index 88a9b1db211dbf0434acc39d439d2e0743b953ca..1b0707422b99e05032d47e2c0a161d40e77466c6 100644
--- a/lib/workers/repository/onboarding/branch/index.js
+++ b/lib/workers/repository/onboarding/branch/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const { extractAllDependencies } = require('../../extract');
 const { createOnboardingBranch } = require('./create');
 const { rebaseOnboardingBranch } = require('./rebase');
diff --git a/lib/workers/repository/onboarding/branch/rebase.js b/lib/workers/repository/onboarding/branch/rebase.js
index 4e1ed81b52d0c433bd9a2ffc3e3aecd8fe6ed003..2eb960cf109258d9c153e4cfd05b9a3cd78b512c 100644
--- a/lib/workers/repository/onboarding/branch/rebase.js
+++ b/lib/workers/repository/onboarding/branch/rebase.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const { getOnboardingConfig } = require('./config');
 const {
   configFileNames,
diff --git a/lib/workers/repository/onboarding/pr/config-description.js b/lib/workers/repository/onboarding/pr/config-description.js
index dec94f99264351f474ab4caae8836b4aac057041..2e8adecb875555a343d94555457ffb197ac2102d 100644
--- a/lib/workers/repository/onboarding/pr/config-description.js
+++ b/lib/workers/repository/onboarding/pr/config-description.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const {
   appName,
   configFileNames,
diff --git a/lib/workers/repository/onboarding/pr/errors-warnings.js b/lib/workers/repository/onboarding/pr/errors-warnings.js
index b1a783fb5ce3ccfe1bc72234473b8f744d6b3992..a351ac060a4f28f44482bfc1eca42c717df80199 100644
--- a/lib/workers/repository/onboarding/pr/errors-warnings.js
+++ b/lib/workers/repository/onboarding/pr/errors-warnings.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const { appName } = require('../../../../config/app-strings');
 
 function getWarnings(config) {
diff --git a/lib/workers/repository/onboarding/pr/index.js b/lib/workers/repository/onboarding/pr/index.js
index d3f26dd8e14a228266d55bef10dd9699b47b7894..d8aad933094586ac225f398d47a6054622cacc68 100644
--- a/lib/workers/repository/onboarding/pr/index.js
+++ b/lib/workers/repository/onboarding/pr/index.js
@@ -1,4 +1,5 @@
 const is = require('@sindresorhus/is');
+const { logger } = require('../../../../logger');
 const { getConfigDesc } = require('./config-description');
 const { getErrors, getWarnings, getDepWarnings } = require('./errors-warnings');
 const { getBaseBranchDesc } = require('./base-branch');
diff --git a/lib/workers/repository/onboarding/pr/pr-list.js b/lib/workers/repository/onboarding/pr/pr-list.js
index 08d503e8f3f2d286f5a023738fc845552d1608c3..86dc537c3c335de3fd9c62d656a37a7049d04086 100644
--- a/lib/workers/repository/onboarding/pr/pr-list.js
+++ b/lib/workers/repository/onboarding/pr/pr-list.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const { appName } = require('../../../../config/app-strings');
 
 function getPrList(config, branches) {
diff --git a/lib/workers/repository/process/deprecated.js b/lib/workers/repository/process/deprecated.js
index 585c4f3c26a9c1fdf9c785991fe34812f525f625..ee7a829adaba4aec7bd74a1ff07ba1f544ad9c97 100644
--- a/lib/workers/repository/process/deprecated.js
+++ b/lib/workers/repository/process/deprecated.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../../logger');
+
 module.exports = {
   raiseDeprecationWarnings,
 };
diff --git a/lib/workers/repository/process/extract-update.js b/lib/workers/repository/process/extract-update.js
index edec07af96ee0f870f76fc21c779cf5494cd296f..0352e1b43c5419e4f23fc0731ef8444a842d4507 100644
--- a/lib/workers/repository/process/extract-update.js
+++ b/lib/workers/repository/process/extract-update.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../logger');
 const { writeUpdates } = require('./write');
 const { sortBranches } = require('./sort');
 const { fetchUpdates } = require('./fetch');
diff --git a/lib/workers/repository/process/fetch.js b/lib/workers/repository/process/fetch.js
index 86ef289705823a3610f79f48d0be1b0c890976d5..ca483171291b59f1d520aac08ee22caaa259acb9 100644
--- a/lib/workers/repository/process/fetch.js
+++ b/lib/workers/repository/process/fetch.js
@@ -1,5 +1,6 @@
 const is = require('@sindresorhus/is');
 const pAll = require('p-all');
+const { logger } = require('../../../logger');
 
 const { getPackageUpdates } = require('../../../manager');
 const { mergeChildConfig } = require('../../../config');
diff --git a/lib/workers/repository/process/index.js b/lib/workers/repository/process/index.js
index 86d49b7c79b3e67120ee12e0c14bc371a5394201..dd7a9e28cf80560dfc2efb0c32d09c5494b68ee1 100644
--- a/lib/workers/repository/process/index.js
+++ b/lib/workers/repository/process/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../logger');
 const { mergeChildConfig } = require('../../../config');
 const { extractAndUpdate } = require('./extract-update');
 const { appName } = require('../../../config/app-strings');
diff --git a/lib/workers/repository/process/limits.js b/lib/workers/repository/process/limits.js
index 14b4c205edc23e9f22a56a97411aa995364517b8..e058fe8e6eda5a00e61a6379a44e5dbc244f4f58 100644
--- a/lib/workers/repository/process/limits.js
+++ b/lib/workers/repository/process/limits.js
@@ -1,4 +1,5 @@
 const moment = require('moment');
+const { logger } = require('../../../logger');
 
 const { onboardingBranch } = require('../../../config/app-strings');
 
diff --git a/lib/workers/repository/process/lookup/filter.js b/lib/workers/repository/process/lookup/filter.js
index c78a68d9edb381b2251d373e508bdcdcb73e88a0..6cd3a42d9cb5995fddab767906342206e25b4d72 100644
--- a/lib/workers/repository/process/lookup/filter.js
+++ b/lib/workers/repository/process/lookup/filter.js
@@ -1,4 +1,5 @@
 const semver = require('semver');
+const { logger } = require('../../../../logger');
 const versioning = require('../../../../versioning');
 
 module.exports = {
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 2acbaf5c4144940bc715473dc8936b79c8ed1e6d..64ddd9d669d357c3b73552c0bdd59d0ddab98a50 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const versioning = require('../../../../versioning');
 const { getRollbackUpdate } = require('./rollback');
 const { getRangeStrategy } = require('../../../../manager');
diff --git a/lib/workers/repository/process/lookup/rollback.js b/lib/workers/repository/process/lookup/rollback.js
index 8755350b2ccf5d16f2ccd157fa339ab33f2683e0..83d657e55210ed3bd75515dcf53278370b1d78c0 100644
--- a/lib/workers/repository/process/lookup/rollback.js
+++ b/lib/workers/repository/process/lookup/rollback.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../../logger');
 const versioning = require('../../../../versioning');
 
 module.exports = {
diff --git a/lib/workers/repository/process/sort.js b/lib/workers/repository/process/sort.js
index 6932c9dad05f314b6430b989e2c96f3248176366..807101f240aeea9b38b6703f2a759159e167ef29 100644
--- a/lib/workers/repository/process/sort.js
+++ b/lib/workers/repository/process/sort.js
@@ -1,3 +1,5 @@
+const { logger } = require('../../../logger');
+
 module.exports = { sortBranches };
 
 function sortBranches(branches) {
diff --git a/lib/workers/repository/process/write.js b/lib/workers/repository/process/write.js
index 8382ad90c299df452bbeb04e10aef65f07afe715..f72d032f745e8c1f11b6d1ccbbc7e207969f9bfe 100644
--- a/lib/workers/repository/process/write.js
+++ b/lib/workers/repository/process/write.js
@@ -1,3 +1,4 @@
+const { logger } = require('../../../logger');
 const branchWorker = require('../../branch');
 const { getPrsRemaining } = require('./limits');
 
diff --git a/lib/workers/repository/updates/branchify.js b/lib/workers/repository/updates/branchify.js
index 22355369aee9cd2038b72935a6ca567ab975588c..0f916163ec5ff6cd03e07cdf43833940caea810d 100644
--- a/lib/workers/repository/updates/branchify.js
+++ b/lib/workers/repository/updates/branchify.js
@@ -1,6 +1,7 @@
 const handlebars = require('handlebars');
 const slugify = require('slugify');
 const cleanGitRef = require('clean-git-ref').clean;
+const { logger, setMeta } = require('../../../logger');
 
 const { generateBranchConfig } = require('./generate');
 const { flattenUpdates } = require('./flatten');
@@ -81,7 +82,7 @@ function branchifyUpgrades(config, packageFiles) {
   }
   logger.debug(`Returning ${Object.keys(branchUpgrades).length} branch(es)`);
   for (const branchName of Object.keys(branchUpgrades)) {
-    logger.setMeta({
+    setMeta({
       repository: config.repository,
       branch: branchName,
     });
@@ -89,7 +90,7 @@ function branchifyUpgrades(config, packageFiles) {
     branch.branchName = branchName;
     branches.push(branch);
   }
-  logger.setMeta({
+  setMeta({
     repository: config.repository,
   });
   logger.debug(`config.repoIsOnboarded=${config.repoIsOnboarded}`);
diff --git a/lib/workers/repository/updates/generate.js b/lib/workers/repository/updates/generate.js
index d92b4d1caf5dfb9e6ab7a5056663e86f3e5cbdea..2ad6f86dbe0094e7128d798333fa462a3f402e36 100644
--- a/lib/workers/repository/updates/generate.js
+++ b/lib/workers/repository/updates/generate.js
@@ -2,6 +2,7 @@ const handlebars = require('handlebars');
 const { DateTime } = require('luxon');
 const semver = require('semver');
 const mdTable = require('markdown-table');
+const { logger } = require('../../../logger');
 const { mergeChildConfig } = require('../../../config');
 
 function ifTypesGroup(depNames, hasGroupName, branchUpgrades) {
diff --git a/test/datasource/maven.spec.js b/test/datasource/maven.spec.js
index d366f25fee0bedc82fea63e6bb0528e70ccf7f48..5f5792b60d626e3b0b5c80a627a3251239752d8d 100644
--- a/test/datasource/maven.spec.js
+++ b/test/datasource/maven.spec.js
@@ -2,9 +2,6 @@ const nock = require('nock');
 const fs = require('fs');
 
 const datasource = require('../../lib/datasource');
-const { initLogger } = require('../../lib/logger');
-
-initLogger();
 
 const MYSQL_VERSIONS = [
   '6.0.5',
diff --git a/test/datasource/sbt/index.spec.js b/test/datasource/sbt/index.spec.js
index b8bc294b74bf8ded64cfbbc3a13dcad2eb68b29b..df354dd29d7fe3e984f70dafbc46b965a3a78cdd 100644
--- a/test/datasource/sbt/index.spec.js
+++ b/test/datasource/sbt/index.spec.js
@@ -3,9 +3,6 @@ const fs = require('fs');
 const nock = require('nock');
 
 const { getPkgReleases } = require('../../../lib/datasource/sbt');
-const { initLogger } = require('../../../lib/logger');
-
-initLogger();
 
 const { DEFAULT_MAVEN_REPO } = require('../../../lib/manager/maven/extract');
 const {
diff --git a/test/globals.js b/test/globals.js
index 6fd4ea9d9053e3371b67ee7c3ac0e370eadca981..d9b8cd0ef9dd556e885220ea7f5f287f404071a7 100644
--- a/test/globals.js
+++ b/test/globals.js
@@ -4,7 +4,7 @@ const os = require('os');
 const cache = require('../lib/workers/global/cache');
 
 global.platform = jest.genMockFromModule('../lib/platform/github');
-global.logger = require('./logger/_fixtures');
+jest.mock('../lib/logger');
 
 global.repoCache = {};
 
diff --git a/test/logger/__snapshots__/pretty-stdout.spec.js.snap b/test/logger/__snapshots__/pretty-stdout.spec.ts.snap
similarity index 51%
rename from test/logger/__snapshots__/pretty-stdout.spec.js.snap
rename to test/logger/__snapshots__/pretty-stdout.spec.ts.snap
index f00fbfb156fd4b264107398d7198382205de6b57..1a944e5b5f5aeb70cfbd6a1d754d811f740a2a0b 100644
--- a/test/logger/__snapshots__/pretty-stdout.spec.js.snap
+++ b/test/logger/__snapshots__/pretty-stdout.spec.ts.snap
@@ -1,5 +1,11 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`logger/pretty-stdout formatRecord(rec) formats record 1`] = `
+"TRACE: test message
+       \\"config\\": {\\"a\\": \\"b\\", \\"d\\": [\\"e\\", \\"f\\"]}
+"
+`;
+
 exports[`logger/pretty-stdout getDetails(rec) supports a config 1`] = `
 "       \\"config\\": {\\"a\\": \\"b\\", \\"d\\": [\\"e\\", \\"f\\"]}
 "
diff --git a/test/logger/_fixtures/index.js b/test/logger/_fixtures/index.js
deleted file mode 100644
index 9a77f8e0be2016b70037eb4a633221a1f105fde4..0000000000000000000000000000000000000000
--- a/test/logger/_fixtures/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
-  fatal: jest.fn(),
-  error: jest.fn(),
-  warn: jest.fn(),
-  info: jest.fn(),
-  debug: jest.fn(),
-  trace: jest.fn(),
-  setMeta: jest.fn(),
-  levels: jest.fn(),
-  addStream: jest.fn(),
-};
diff --git a/test/logger/index.spec.js b/test/logger/index.spec.js
deleted file mode 100644
index 38e3d9584e25d5663442904dd31c8aadc94d8bef..0000000000000000000000000000000000000000
--- a/test/logger/index.spec.js
+++ /dev/null
@@ -1,32 +0,0 @@
-const { initLogger } = require('../../lib/logger');
-
-describe('logger', () => {
-  it('inits', () => {
-    delete global.logger;
-    delete process.env.LOG_LEVEL;
-    initLogger();
-    expect(global.logger).toBeDefined();
-  });
-  it('supports logging with metadata', () => {
-    global.logger.debug({ some: 'meta' }, 'some meta');
-  });
-  it('supports logging with only metadata', () => {
-    global.logger.debug({ some: 'meta' });
-  });
-  it('supports logging without metadata', () => {
-    global.logger.debug('some meta');
-  });
-  it('sets levels', () => {
-    global.logger.levels('stdout', 'DEBUG');
-  });
-  it('sets meta', () => {
-    global.logger.setMeta({ some: 'meta', and: 'more' });
-  });
-  it('adds stream', () => {
-    global.logger.addStream({
-      name: 'logfile',
-      path: 'fatal.log',
-      level: 'fatal',
-    });
-  });
-});
diff --git a/test/logger/index.spec.ts b/test/logger/index.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2521befed3acaddf5af91e4e642afca496062d67
--- /dev/null
+++ b/test/logger/index.spec.ts
@@ -0,0 +1,26 @@
+import { logger, setMeta, levels } from '../../lib/logger';
+
+jest.unmock('../../lib/logger');
+
+describe('logger', () => {
+  it('inits', () => {
+    expect(logger).toBeDefined();
+  });
+  it('supports logging with metadata', () => {
+    logger.debug({ some: 'meta' }, 'some meta');
+  });
+  it('supports logging with only metadata', () => {
+    logger.debug({ some: 'meta' });
+  });
+  it('supports logging without metadata', () => {
+    logger.debug('some meta');
+  });
+
+  it('sets meta', () => {
+    setMeta({ any: 'test' });
+  });
+
+  it('sets level', () => {
+    levels('stdout', 'debug');
+  });
+});
diff --git a/test/logger/pretty-stdout.spec.js b/test/logger/pretty-stdout.spec.ts
similarity index 50%
rename from test/logger/pretty-stdout.spec.js
rename to test/logger/pretty-stdout.spec.ts
index 41f350b5b33a8b5661f1b1829dbac1b763074742..f38dd600195b3fb6941cb90f6e07d539d63279e8 100644
--- a/test/logger/pretty-stdout.spec.js
+++ b/test/logger/pretty-stdout.spec.ts
@@ -1,26 +1,26 @@
-const chalk = require('chalk');
-const prettyStdout = require('../../lib/logger/pretty-stdout');
+import chalk from 'chalk';
+import * as prettyStdout from '../../lib/logger/pretty-stdout';
 
 describe('logger/pretty-stdout', () => {
   describe('getMeta(rec)', () => {
     it('returns empty string if null rec', () => {
-      expect(prettyStdout.getMeta(null)).toEqual('');
+      expect(prettyStdout.getMeta(null as any)).toEqual('');
     });
     it('returns empty string if empty rec', () => {
-      expect(prettyStdout.getMeta({})).toEqual('');
+      expect(prettyStdout.getMeta({} as any)).toEqual('');
     });
     it('returns empty string if no meta fields', () => {
       const rec = {
         foo: 'bar',
       };
-      expect(prettyStdout.getMeta(rec)).toEqual('');
+      expect(prettyStdout.getMeta(rec as any)).toEqual('');
     });
     it('supports single meta', () => {
       const rec = {
         foo: 'bar',
         repository: 'a/b',
       };
-      expect(prettyStdout.getMeta(rec)).toEqual(
+      expect(prettyStdout.getMeta(rec as any)).toEqual(
         chalk.gray(' (repository=a/b)')
       );
     });
@@ -29,25 +29,26 @@ describe('logger/pretty-stdout', () => {
         foo: 'bar',
         branch: 'c',
         repository: 'a/b',
+        module: 'test',
       };
-      expect(prettyStdout.getMeta(rec)).toEqual(
-        chalk.gray(' (repository=a/b, branch=c)')
+      expect(prettyStdout.getMeta(rec as any)).toEqual(
+        chalk.gray(' (repository=a/b, branch=c) [test]')
       );
     });
   });
   describe('getDetails(rec)', () => {
     it('returns empty string if null rec', () => {
-      expect(prettyStdout.getDetails(null)).toEqual('');
+      expect(prettyStdout.getDetails(null as any)).toEqual('');
     });
     it('returns empty string if empty rec', () => {
-      expect(prettyStdout.getDetails({})).toEqual('');
+      expect(prettyStdout.getDetails({} as any)).toEqual('');
     });
     it('returns empty string if all are meta fields', () => {
       const rec = {
         branch: 'bar',
         v: 0,
       };
-      expect(prettyStdout.getDetails(rec)).toEqual('');
+      expect(prettyStdout.getDetails(rec as any)).toEqual('');
     });
     it('supports a config', () => {
       const rec = {
@@ -57,7 +58,21 @@ describe('logger/pretty-stdout', () => {
           d: ['e', 'f'],
         },
       };
-      expect(prettyStdout.getDetails(rec)).toMatchSnapshot();
+      expect(prettyStdout.getDetails(rec as any)).toMatchSnapshot();
+    });
+  });
+  describe('formatRecord(rec)', () => {
+    it('formats record', () => {
+      const rec: prettyStdout.BunyanRecord = {
+        level: 10,
+        msg: 'test message',
+        v: 0,
+        config: {
+          a: 'b',
+          d: ['e', 'f'],
+        },
+      };
+      expect(prettyStdout.formatRecord(rec)).toMatchSnapshot();
     });
   });
 });
diff --git a/test/manager/gradle/index.spec.js b/test/manager/gradle/index.spec.js
index 51af463737f3b335c47ae9a7a6c7b0aeff0c07de..6575cb2e48b7e830f39edf5e4455f233e8d9da60 100644
--- a/test/manager/gradle/index.spec.js
+++ b/test/manager/gradle/index.spec.js
@@ -5,9 +5,6 @@ const { toUnix } = require('upath');
 const fs = require('fs-extra');
 const fsReal = require('fs');
 const { exec } = require('child-process-promise');
-const { initLogger } = require('../../../lib/logger');
-
-initLogger();
 
 const manager = require('../../../lib/manager/gradle/index');
 
diff --git a/test/workers/repository/error.spec.js b/test/workers/repository/error.spec.js
index 9615dc505d40d856d57b4adaf02836bcbd2d7ed9..504c41b26dcca036becd89aec05d93fa8cd29d13 100644
--- a/test/workers/repository/error.spec.js
+++ b/test/workers/repository/error.spec.js
@@ -1,4 +1,4 @@
-const { handleError } = require('../../../lib/workers/repository/error');
+import handleError from '../../../lib/workers/repository/error';
 
 jest.mock('../../../lib/workers/repository/error-config');
 
diff --git a/tsconfig.json b/tsconfig.json
index 75953254b3827bd9d26160fa66befb0f4c7fc438..814df428d8b5f35449ca183fd0e9cd4ac7151e06 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -15,5 +15,5 @@
     "types": ["node", "jest"]
   },
   "include": ["lib/**/*", "test/**/*"],
-  "exclude": ["node_modules", "./.cache", "./dist"]
+  "exclude": ["node_modules", "./.cache", "./dist", "**/__mocks__/*"]
 }