diff --git a/.gitignore b/.gitignore
index f19d2281f4757bc1af31ca422e9c8844219e11d9..b0ce50ee330b11485ca8fa03fa767e722a70e2c5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -47,5 +47,6 @@ app/lib/dal/sqliteDAL/*.js*
 app/lib/dal/sqliteDAL/index/*.js*
 app/lib/dal/fileDALs/*.js*
 app/lib/dal/fileDAL.js*
+app/lib/logger*js*
 app/service/*.js*
 app/lib/wot.js*
\ No newline at end of file
diff --git a/app/lib/computation/BlockchainContext.ts b/app/lib/computation/BlockchainContext.ts
index 2b267ece25fe826a23ac92814d2a7fc0dd5b7c9d..9f4e2b3899f9b49407b2896a678f05a0415d5243 100644
--- a/app/lib/computation/BlockchainContext.ts
+++ b/app/lib/computation/BlockchainContext.ts
@@ -98,7 +98,7 @@ export class BlockchainContext {
     this.conf = newConf;
     this.blockchain = theBlockchain
     this.quickSynchronizer = theQuickSynchronizer
-    this.logger = require('../logger')(this.dal.profile);
+    this.logger = require('../logger').NewLogger(this.dal.profile);
   }
 
   checkBlock(block: BlockDTO, withPoWAndSignature = true): Promise<any> {
diff --git a/app/lib/dal/drivers/SQLiteDriver.ts b/app/lib/dal/drivers/SQLiteDriver.ts
index e2af704fa145086173d042b1a1b27ba14224d2c5..3a47dd1b9fb0b5e649e63f515aebea397faffce0 100644
--- a/app/lib/dal/drivers/SQLiteDriver.ts
+++ b/app/lib/dal/drivers/SQLiteDriver.ts
@@ -11,7 +11,7 @@ export class SQLiteDriver {
   constructor(
     private path:string
   ) {
-    this.logger = require('../../logger')('driver')
+    this.logger = require('../../logger').NewLogger('driver')
   }
 
   getDB(): Promise<any> {
diff --git a/app/lib/dal/fileDAL.ts b/app/lib/dal/fileDAL.ts
index b2f5f0ca318cbbcae88ef939e078e1b284636702..43dcd1b4fad309bbfa10fc819c15e58e710d6766 100644
--- a/app/lib/dal/fileDAL.ts
+++ b/app/lib/dal/fileDAL.ts
@@ -20,7 +20,7 @@ const readline = require('readline')
 const _       = require('underscore');
 const common = require('duniter-common');
 const indexer = require('../indexer').Indexer
-const logger = require('../logger')('filedal');
+const logger = require('../logger').NewLogger('filedal');
 const Configuration = require('../entity/configuration');
 const Merkle = require('../entity/merkle');
 const Transaction = require('../entity/transaction');
diff --git a/app/lib/dal/fileDALs/ConfDAL.ts b/app/lib/dal/fileDALs/ConfDAL.ts
index 590ae8d414c3e34a4502e4d9fe6038157fe4fcc7..4ae01250212b0ab82bde948f36c70ac9ad3ab398 100644
--- a/app/lib/dal/fileDALs/ConfDAL.ts
+++ b/app/lib/dal/fileDALs/ConfDAL.ts
@@ -11,7 +11,7 @@ export class ConfDAL extends AbstractCFS {
 
   constructor(rootPath:string, qioFS:any) {
     super(rootPath, qioFS)
-    this.logger = require('../../logger')()
+    this.logger = require('../../logger').NewLogger()
   }
 
   init() {
diff --git a/app/lib/dal/sqliteDAL/AbstractSQLite.ts b/app/lib/dal/sqliteDAL/AbstractSQLite.ts
index b74dcf022941ce40417ae182723ae09dd769f67c..f888f168ea752b0ad831d97ef5a3f5251f681409 100644
--- a/app/lib/dal/sqliteDAL/AbstractSQLite.ts
+++ b/app/lib/dal/sqliteDAL/AbstractSQLite.ts
@@ -6,7 +6,7 @@ import {SQLiteDriver} from "../drivers/SQLiteDriver"
 const _ = require('underscore');
 const co = require('co');
 const colors = require('colors');
-const logger = require('../../logger')('sqlite');
+const logger = require('../../logger').NewLogger('sqlite');
 
 export interface BeforeSaveHook<T> {
   (t:T): void
diff --git a/app/lib/dal/sqliteDAL/MetaDAL.ts b/app/lib/dal/sqliteDAL/MetaDAL.ts
index f19f58acf23910fef537be6104ace4b00d89f320..83d175dcc68f8b1ef0fbca5804caf9d436592e12 100644
--- a/app/lib/dal/sqliteDAL/MetaDAL.ts
+++ b/app/lib/dal/sqliteDAL/MetaDAL.ts
@@ -11,7 +11,7 @@ import {WalletDAL} from "./WalletDAL";
 import {MIndexDAL} from "./index/MIndexDAL";
 
 const _ = require('underscore')
-const logger = require('../../logger')('metaDAL');
+const logger = require('../../logger').NewLogger('metaDAL');
 const common = require('duniter-common');
 const rawer = require('duniter-common').rawer;
 const constants = require('./../../constants');
diff --git a/app/lib/logger/index.js b/app/lib/logger.ts
similarity index 71%
rename from app/lib/logger/index.js
rename to app/lib/logger.ts
index 11b5189d47f7dfb0afde0ee464e78032bc11893b..74fda628f263c88a2ab283ebc9793c4e1bdc7fa0 100644
--- a/app/lib/logger/index.js
+++ b/app/lib/logger.ts
@@ -2,7 +2,31 @@
 const moment = require('moment');
 const path = require('path');
 const winston = require('winston');
-const cbLogger = require('./callbackLogger');
+
+/***************
+ * CALLBACK LOGGER
+ ***************/
+
+const util = require('util');
+
+const CallbackLogger = winston.transports.CallbackLogger = function (options:any) {
+
+  this.name = 'customLogger';
+  this.level = options.level || 'info';
+  this.callback = options.callback;
+  this.timestamp = options.timestamp;
+};
+
+util.inherits(CallbackLogger, winston.Transport);
+
+CallbackLogger.prototype.log = function (level:string, msg:string, meta:any, callback:any) {
+  this.callback(level, msg, this.timestamp());
+  callback(null, true);
+};
+
+/***************
+ * NORMAL LOGGER
+ ***************/
 
 const customLevels = {
   levels: {
@@ -45,10 +69,10 @@ const logger = new (winston.Logger)({
 
 // Singletons
 let loggerAttached = false;
-logger.addCallbackLogs = (callbackForLog) => {
+logger.addCallbackLogs = (callbackForLog:any) => {
   if (!loggerAttached) {
     loggerAttached = true;
-    logger.add(cbLogger, {
+    logger.add(CallbackLogger, {
       callback: callbackForLog,
       level: 'trace',
       levels: customLevels.levels,
@@ -63,7 +87,7 @@ logger.addCallbackLogs = (callbackForLog) => {
 
 // Singletons
 let loggerHomeAttached = false;
-logger.addHomeLogs = (home, level) => {
+logger.addHomeLogs = (home:string, level:string) => {
   if (!muted) {
     if (loggerHomeAttached) {
       logger.remove(winston.transports.File);
@@ -98,4 +122,6 @@ logger.mute = () => {
 /**
 * Convenience function to get logger directly
 */
-module.exports = () => logger;
+export function NewLogger() {
+  return logger
+}
diff --git a/app/lib/logger/callbackLogger.js b/app/lib/logger/callbackLogger.js
deleted file mode 100644
index 08de074c318fad28742480df142617be9d1ef4be..0000000000000000000000000000000000000000
--- a/app/lib/logger/callbackLogger.js
+++ /dev/null
@@ -1,21 +0,0 @@
-"use strict";
-
-const util = require('util');
-const winston = require('winston');
-
-const CallbackLogger = winston.transports.CallbackLogger = function (options) {
-  
-  this.name = 'customLogger';
-  this.level = options.level || 'info';
-  this.callback = options.callback;
-  this.timestamp = options.timestamp;
-};
-
-util.inherits(CallbackLogger, winston.Transport);
-
-CallbackLogger.prototype.log = function (level, msg, meta, callback) {
-  this.callback(level, msg, this.timestamp());
-  callback(null, true);
-};
-
-module.exports = CallbackLogger;
diff --git a/app/lib/streams/multicaster.js b/app/lib/streams/multicaster.js
index 250bac781d06e0dc5df7de533c01906ba46c705b..9cbc4d74fe13ed1b8017de63fbd83fe8a6e9e064 100644
--- a/app/lib/streams/multicaster.js
+++ b/app/lib/streams/multicaster.js
@@ -12,7 +12,7 @@ const Revocation = require('../../lib/entity/revocation');
 const Membership = require('../../lib/entity/membership');
 const Block = require('../../lib/entity/block');
 const Transaction = require('../../lib/entity/transaction');
-const logger  = require('../logger')('multicaster');
+const logger  = require('../logger').NewLogger('multicaster');
 
 const WITH_ISOLATION = true;
 
diff --git a/app/lib/streams/router.js b/app/lib/streams/router.js
index f97138ab45475699673b2ab8c37fd141c84459aa..b8c75a01fab31e80af7d059d4fe83bf83edc24dd 100644
--- a/app/lib/streams/router.js
+++ b/app/lib/streams/router.js
@@ -16,7 +16,7 @@ function Router (PeeringService, dal) {
     dal = theDAL;
   };
 
-  const logger   = require('../logger')('router');
+  const logger   = require('../logger').NewLogger('router');
 
   stream.Transform.call(this, { objectMode: true });
 
diff --git a/app/lib/wizard.js b/app/lib/wizard.js
index 61b50985462beb5ab6b69baf7331e45ff7b25d9f..4c113a8d955baf8347a589c56ab73b7df01df01e 100644
--- a/app/lib/wizard.js
+++ b/app/lib/wizard.js
@@ -3,7 +3,7 @@ const co        = require('co');
 const constants = require('./constants');
 const async     = require('async');
 const inquirer  = require('inquirer');
-const logger    = require('./logger')('wizard');
+const logger    = require('./logger').NewLogger('wizard');
 
 module.exports = function () {
   return new Wizard();
diff --git a/app/modules/check-config.js b/app/modules/check-config.js
index 614f6e37bbb3c6219415fa44257b661406a07031..7605ebd1d6d1cc108fae2d43f8fa2f2c150c4990 100644
--- a/app/modules/check-config.js
+++ b/app/modules/check-config.js
@@ -3,7 +3,7 @@
 const co = require('co');
 const constants = require('../lib/constants');
 const wizard = require('../lib/wizard');
-const logger = require('../lib/logger')('wizard');
+const logger = require('../lib/logger').NewLogger('wizard');
 
 module.exports = {
   duniter: {
diff --git a/app/modules/reset.js b/app/modules/reset.js
index 5786f37a3f06394483ae773b6f428997d223106b..cf6e08ffd4d1914f8f20447eea2a3ca877a83250 100644
--- a/app/modules/reset.js
+++ b/app/modules/reset.js
@@ -3,7 +3,7 @@
 const co = require('co');
 const constants = require('../lib/constants');
 const wizard = require('../lib/wizard');
-const logger = require('../lib/logger')('wizard');
+const logger = require('../lib/logger').NewLogger('wizard');
 
 module.exports = {
   duniter: {
diff --git a/app/modules/wizard.js b/app/modules/wizard.js
index 6786a16ed9efdc9437264b97bd45f9fb685f8f5d..014451cab065a123015bc51395fb4c14129d976e 100644
--- a/app/modules/wizard.js
+++ b/app/modules/wizard.js
@@ -3,7 +3,7 @@
 const Q = require('q');
 const co = require('co');
 const wizard = require('../lib/wizard');
-const logger = require('../lib/logger')('wizard');
+const logger = require('../lib/logger').NewLogger('wizard');
 
 module.exports = {
   duniter: {
diff --git a/app/service/BlockchainService.ts b/app/service/BlockchainService.ts
index 2c874f7d7bd05904597769cf82f0a23edc476b3a..fb9a28c987785d9894f5339a09f6df3576cf5ddd 100644
--- a/app/service/BlockchainService.ts
+++ b/app/service/BlockchainService.ts
@@ -40,7 +40,7 @@ export class BlockchainService {
   setConfDAL(newConf:ConfDTO, newDAL:FileDAL, newKeyPair:any) {
     this.dal = newDAL;
     this.conf = newConf;
-    this.logger = require('../lib/logger')(this.dal.profile)
+    this.logger = require('../lib/logger').NewLogger(this.dal.profile)
     this.quickSynchronizer = new QuickSynchronizer(this.server.blockchain, this.conf, this.dal, this.logger)
     this.mainContext.setConfDAL(this.conf, this.dal, this.server.blockchain, this.quickSynchronizer)
     this.selfPubkey = newKeyPair.publicKey;
diff --git a/app/service/IdentityService.ts b/app/service/IdentityService.ts
index 97a7d9657081a91bced82aa7944f6cab2cf0066a..25c3519712a98719c7c0c5590e05cb9f835b7d52 100644
--- a/app/service/IdentityService.ts
+++ b/app/service/IdentityService.ts
@@ -26,7 +26,7 @@ export class IdentityService {
   setConfDAL(newConf:ConfDTO, newDAL:FileDAL) {
     this.dal = newDAL;
     this.conf = newConf;
-    this.logger = require('../lib/logger')(this.dal.profile);
+    this.logger = require('../lib/logger').NewLogger(this.dal.profile);
   }
 
   searchIdentities(search:string) {
diff --git a/app/service/MembershipService.ts b/app/service/MembershipService.ts
index 5fa1defa18c41164b0c23578441921ad4042b687..f825e18b3f7a019cc5a7cc51356bfe16b5fa1cc9 100644
--- a/app/service/MembershipService.ts
+++ b/app/service/MembershipService.ts
@@ -17,7 +17,7 @@ export class MembershipService {
   setConfDAL(newConf:ConfDTO, newDAL:FileDAL) {
     this.dal = newDAL;
     this.conf = newConf;
-    this.logger = require('../lib/logger')(this.dal.profile);
+    this.logger = require('../lib/logger').NewLogger(this.dal.profile);
   }
 
   current() {
diff --git a/app/service/PeeringService.ts b/app/service/PeeringService.ts
index 31de19ac06a253fbacfbc48aec6f096a00b09507..c9305c637b2ed20b80ec79b4280e74ee798e09d8 100644
--- a/app/service/PeeringService.ts
+++ b/app/service/PeeringService.ts
@@ -11,7 +11,7 @@ const events         = require('events');
 const rp             = require('request-promise');
 const multicaster    = require('../lib/streams/multicaster');
 const keyring        = require('duniter-common').keyring;
-const logger         = require('../lib/logger')('peering');
+const logger         = require('../lib/logger').NewLogger('peering');
 const dos2unix       = require('duniter-common').dos2unix;
 const hashf          = require('duniter-common').hashf;
 const rawer          = require('duniter-common').rawer;
diff --git a/app/service/TransactionsService.ts b/app/service/TransactionsService.ts
index d987d811f652c5715f9d61a2e36a1156d9704474..4dc613b1612b44deeca0c0a24af19a90cb6b4574 100644
--- a/app/service/TransactionsService.ts
+++ b/app/service/TransactionsService.ts
@@ -20,7 +20,7 @@ export class TransactionService {
   setConfDAL(newConf:ConfDTO, newDAL:FileDAL) {
     this.dal = newDAL;
     this.conf = newConf;
-    this.logger = require('../lib/logger')(this.dal.profile);
+    this.logger = require('../lib/logger').NewLogger(this.dal.profile);
   }
 
   processTx(txObj:any) {
diff --git a/index.js b/index.js
index 974d5531b9e14831c9435a926dea3a19b014c14a..a7bb57d051edaf82a76ea65121cca2b8eb083ee5 100644
--- a/index.js
+++ b/index.js
@@ -9,7 +9,7 @@ const Server = require('./server');
 const directory = require('./app/lib/system/directory');
 const constants = require('./app/lib/constants');
 const wizard = require('./app/lib/wizard');
-const logger = require('./app/lib/logger')('duniter');
+const logger = require('./app/lib/logger').NewLogger('duniter');
 
 const configDependency    = require('./app/modules/config');
 const wizardDependency    = require('./app/modules/wizard');
diff --git a/server.js b/server.js
index d07d87c2fc300609fec41959f71d1507a61abf40..4c23e1e65fb10e8ae25db451521c323953e79bda 100644
--- a/server.js
+++ b/server.js
@@ -24,7 +24,7 @@ function Server (home, memoryOnly, overrideConf) {
   stream.Duplex.call(this, { objectMode: true });
 
   const paramsP = directory.getHomeParams(memoryOnly, home);
-  const logger = require('./app/lib/logger')('server');
+  const logger = require('./app/lib/logger').NewLogger('server');
   const that = this;
   that.home = home;
   that.conf = null;
diff --git a/test/fast/prover/pow-1-cluster.js b/test/fast/prover/pow-1-cluster.js
index 9f1a20b63278ca6675fc5a7c3ab62a4d9b4c7667..130dffe2f6650a6262100b9d464f8c64d9f61b92 100644
--- a/test/fast/prover/pow-1-cluster.js
+++ b/test/fast/prover/pow-1-cluster.js
@@ -3,7 +3,7 @@
 const co = require('co')
 const should = require('should')
 const powCluster = require('../../../app/modules/prover/lib/powCluster')
-const logger = require('../../../app/lib/logger')()
+const logger = require('../../../app/lib/logger').NewLogger()
 
 let master
 
diff --git a/test/fast/prover/pow-2-engine.js b/test/fast/prover/pow-2-engine.js
index f9b189905576dd36576a70836d5fc6c789fb1640..2a2d301eebe537f8b0c05962716b9a9bb8d342ff 100644
--- a/test/fast/prover/pow-2-engine.js
+++ b/test/fast/prover/pow-2-engine.js
@@ -3,7 +3,7 @@
 const co = require('co');
 const should = require('should');
 const engine = require('../../../app/modules/prover/lib/engine');
-const logger = require('../../../app/lib/logger')()
+const logger = require('../../../app/lib/logger').NewLogger()
 
 describe('PoW Engine', () => {
 
diff --git a/test/integration/branches2.js b/test/integration/branches2.js
index 30d8bd4fed230dc4a377259166f296ea230270c2..9aeb656ff18e47d77946d1260adedc9e8a933b15 100644
--- a/test/integration/branches2.js
+++ b/test/integration/branches2.js
@@ -15,7 +15,7 @@ const expectJSON     = httpTest.expectJSON;
 const expectHttpCode = httpTest.expectHttpCode;
 
 if (constants.MUTE_LOGS_DURING_UNIT_TESTS) {
-  require('../../app/lib/logger')().mute();
+  require('../../app/lib/logger').NewLogger().mute();
 }
 
 // Trace these errors
diff --git a/test/integration/forwarding.js b/test/integration/forwarding.js
index 6d5d7a7e9eb063d74ec05305fae3c46085253cd1..3ab062accc330dcd4a6464376bd39dbb8ec73492 100644
--- a/test/integration/forwarding.js
+++ b/test/integration/forwarding.js
@@ -13,7 +13,7 @@ const MEMORY_MODE = true;
 require('duniter-bma').duniter.methods.noLimit(); // Disables the HTTP limiter
 
 if (constants.MUTE_LOGS_DURING_UNIT_TESTS) {
-  require('../../app/lib/logger')().mute();
+  require('../../app/lib/logger').NewLogger().mute();
 }
 
 describe("Forwarding", function() {
diff --git a/test/integration/proof-of-work.js b/test/integration/proof-of-work.js
index 9488ed3e18190e0ecaf146a132b8c3bab6a494d4..70ce187f20ef53b74394362eeb3a9e2e1642c2ad 100644
--- a/test/integration/proof-of-work.js
+++ b/test/integration/proof-of-work.js
@@ -5,7 +5,7 @@ const should    = require('should');
 const toolbox   = require('./tools/toolbox');
 const Block = require('../../app/lib/entity/block');
 const constants = require('../../app/lib/constants');
-const logger = require('../../app/lib/logger')();
+const logger = require('../../app/lib/logger').NewLogger();
 const blockProver = require('../../app/modules/prover').duniter.methods.blockProver;
 
 /***
diff --git a/test/integration/tools/commit.js b/test/integration/tools/commit.js
index 046e59756ffaa8ba891967538f56fa9ea8465c35..6b308127f68e84cad5aa063e18595622d703a5c2 100644
--- a/test/integration/tools/commit.js
+++ b/test/integration/tools/commit.js
@@ -3,7 +3,7 @@
 var _  = require('underscore');
 var co = require('co');
 var rp = require('request-promise');
-var logger = require('../../../app/lib/logger')('test');
+var logger = require('../../../app/lib/logger').NewLogger('test');
 
 module.exports = function makeBlockAndPost(theServer, extraProps) {
   return function(manualValues) {
diff --git a/test/integration/tools/node.js b/test/integration/tools/node.js
index fd25c02f4c8faead7ed3d0b04194f93ed6d17b93..a1fc07e964f1f8589d5aa1a6c9eb54a4e2aaf163 100644
--- a/test/integration/tools/node.js
+++ b/test/integration/tools/node.js
@@ -25,7 +25,7 @@ var UNTIL_TIMEOUT = 115000;
 
 function Node (dbName, options) {
 
-  var logger = require('../../../app/lib/logger')(dbName);
+  var logger = require('../../../app/lib/logger').NewLogger(dbName);
   var that = this;
   var started = false;
   that.server = null;
diff --git a/test/integration/tools/toolbox.js b/test/integration/tools/toolbox.js
index e9fbc3b92603aa7efb3d32160cd9ebf6629fa292..b464d5c73a1effc41aad86f19331487510b74a8b 100644
--- a/test/integration/tools/toolbox.js
+++ b/test/integration/tools/toolbox.js
@@ -16,7 +16,7 @@ const bma         = require('duniter-bma').duniter.methods.bma;
 const multicaster = require('../../../app/lib/streams/multicaster');
 const dtos        = require('duniter-bma').duniter.methods.dtos;
 const duniter     = require('../../../index');
-const logger      = require('../../../app/lib/logger')('toolbox');
+const logger      = require('../../../app/lib/logger').NewLogger('toolbox');
 
 require('duniter-bma').duniter.methods.noLimit(); // Disables the HTTP limiter