Index: src/ch/MainWnd.cpp
===================================================================
diff -u -N -r6f8b891b60eb0f33199fd29db75d4d9f4a22c248 -r62d767936f1675e1db51174f53c91484fe691937
--- src/ch/MainWnd.cpp	(.../MainWnd.cpp)	(revision 6f8b891b60eb0f33199fd29db75d4d9f4a22c248)
+++ src/ch/MainWnd.cpp	(.../MainWnd.cpp)	(revision 62d767936f1675e1db51174f53c91484fe691937)
@@ -80,7 +80,8 @@
 /////////////////////////////////////////////////////////////////////////////
 // CMainWnd construction/destruction
 CMainWnd::CMainWnd() :
-	m_spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot)
+	m_spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot),
+	m_spLog(GetLogFactory()->CreateLogger(L"MainWnd"))
 {
 }
 
@@ -188,7 +189,7 @@
 
 		if(!LoadTaskManager())
 		{
-			LOG_ERROR(GetLogger()) << _T("Couldn't load task manager data. User did not allow re-creation of the database.");
+			LOG_ERROR(m_spLog) << _T("Couldn't load task manager data. User did not allow re-creation of the database.");
 			return -1;
 		}
 
@@ -200,7 +201,7 @@
 		m_spTasks->TasksRetryProcessing();
 
 		// start clipboard monitoring
-		LOG_INFO(GetLogger()) << _T("Starting clipboard monitor...");
+		LOG_INFO(m_spLog) << _T("Starting clipboard monitor...");
 		CClipboardMonitor::StartMonitor(m_spTasks);
 
 		CheckForUpdates();
@@ -229,7 +230,7 @@
 
 	if(bCaughtError)
 	{
-		LOG_ERROR(GetLogger()) << szErrInfo.get();
+		LOG_ERROR(m_spLog) << szErrInfo.get();
 		return -1;
 	}
 	return 0;
@@ -243,10 +244,11 @@
 	CString strTasksDir = GetTasksDirectory();
 	TSQLiteSerializerFactoryPtr spSerializerFactory(new TSQLiteSerializerFactory(PathFromString(strTasksDir)));
 	IFeedbackHandlerFactoryPtr spFeedbackFactory(new CFeedbackHandlerFactory);
+	TMultiLoggerConfigPtr spLoggerConfig = std::make_shared<TMultiLoggerConfig>();	// #todo
 
 	try
 	{
-		m_spTasks.reset(new chcore::TTaskManager(spSerializerFactory, spFeedbackFactory, PathFromString(strTasksDir)));
+		m_spTasks.reset(new chcore::TTaskManager(spSerializerFactory, spFeedbackFactory, PathFromString(strTasksDir), spLoggerConfig));
 	}
 	catch(const std::exception& e)
 	{
@@ -257,14 +259,14 @@
 	{
 		if(MsgBox(IDS_TASKMANAGER_LOAD_FAILED, MB_ICONERROR | MB_OKCANCEL) == IDOK)
 		{
-			m_spTasks.reset(new chcore::TTaskManager(spSerializerFactory, spFeedbackFactory, PathFromString(strTasksDir), true));
+			m_spTasks.reset(new chcore::TTaskManager(spSerializerFactory, spFeedbackFactory, PathFromString(strTasksDir), spLoggerConfig, true));
 		}
 		else
 			return false;
 	}
 
 	// load last state
-	LOG_INFO(GetLogger()) << _T("Loading existing tasks...");
+	LOG_INFO(m_spLog) << _T("Loading existing tasks...");
 
 	// load tasks
 	m_spTasks->Load();
@@ -405,7 +407,7 @@
 
 	if(!strMessage.IsEmpty())
 	{
-		LOG_ERROR(GetLogger()) << L"Failed to finalize tasks before exiting Copy Handler. Error: " + strMessage;
+		LOG_ERROR(m_spLog) << L"Failed to finalize tasks before exiting Copy Handler. Error: " + strMessage;
 
 		ictranslate::CFormat fmt;
 
@@ -437,7 +439,7 @@
 				fmt.SetFormat(_T("Failed to autosave task. Error: %err."));
 				fmt.SetParam(_T("%err"), (PCTSTR)strError);
 
-				LOG_ERROR(GetLogger()) << fmt;
+				LOG_ERROR(m_spLog) << fmt;
 			}
 
 			SetTimer(1023, GetPropValue<PP_PAUTOSAVEINTERVAL>(GetConfig()), nullptr);
@@ -518,7 +520,7 @@
 				fmt.SetParam(_T("%xml"), wstrData.c_str());
 				fmt.SetParam(_T("%err"), (PCTSTR)strError);
 
-				LOG_ERROR(GetLogger()) << fmt;
+				LOG_ERROR(m_spLog) << fmt;
 
 				fmt.SetFormat(GetResManager().LoadString(IDS_SHELLEXT_XML_IMPORT_FAILED));
 				fmt.SetParam(_T("%err"), (PCTSTR)strError);
@@ -628,7 +630,7 @@
 				fmt.SetParam(_T("%path"), strPath.ToString());
 				fmt.SetParam(_T("%err"), szBuffer.get());
 
-				LOG_ERROR(GetLogger()) << fmt;
+				LOG_ERROR(m_spLog) << fmt;
 
 				fmt.SetFormat(GetResManager().LoadString(IDS_TASK_IMPORT_FAILED));
 				fmt.SetParam(_T("%path"), strPath.ToString());
@@ -899,7 +901,7 @@
 				_ASSERTE(FALSE);
 				CString strMsg;
 				strMsg.Format(L"Encountered problem trying to retrieve shell ext configuration.\nReason: %S", e.what());
-				LOG_ERROR(GetLogger()) << strMsg;
+				LOG_ERROR(m_spLog) << strMsg;
 
 				return FALSE;
 			}
@@ -1062,7 +1064,7 @@
 		// perform checking for updates only when the minimal interval has passed
 		if(ullCurrentStamp - ullTimestamp >= ullMinInterval)
 		{
-			LOG_INFO(GetLogger()) << _T("Checking for updates...");
+			LOG_INFO(m_spLog) << _T("Checking for updates...");
 
 			CUpdaterDlg* pDlg = new CUpdaterDlg(true);
 			pDlg->m_bAutoDelete = true;
@@ -1076,7 +1078,7 @@
 			}
 			catch(const std::exception& /*e*/)
 			{
-				LOG_ERROR(GetLogger()) << _T("Storing last update check timestamp in configuration failed");
+				LOG_ERROR(m_spLog) << _T("Storing last update check timestamp in configuration failed");
 			}
 		}
 	}