Index: binary-improvements2/WebServer/src/OpenID.cs
===================================================================
--- binary-improvements2/WebServer/src/OpenID.cs	(revision 398)
+++ binary-improvements2/WebServer/src/OpenID.cs	(revision 399)
@@ -39,5 +39,5 @@
 				if (_errors == SslPolicyErrors.None) {
 					if (verboseSsl) {
-						Log.Out ("Steam certificate: No error (1)");
+						Log.Out ("[OpenID] Steam certificate: No error (1)");
 					}
 
@@ -94,5 +94,5 @@
 
 						// This status is an error, print information
-						Log.Warning ("Steam certificate error: " + chainEl.Certificate.Subject + " ### Error: " +
+						Log.Warning ("[OpenID] Steam certificate error: " + chainEl.Certificate.Subject + " ### Error: " +
 						             chainStatus.Status);
 						privateChain.Reset ();
@@ -104,5 +104,5 @@
 					if (chainStatus.Status != X509ChainStatusFlags.NoError &&
 					    chainStatus.Status != X509ChainStatusFlags.UntrustedRoot) {
-						Log.Warning ("Steam certificate error: " + chainStatus.Status);
+						Log.Warning ("[OpenID] Steam certificate error: " + chainStatus.Status);
 						privateChain.Reset ();
 						return false;
@@ -113,5 +113,5 @@
 				privateChain.Reset ();
 				if (verboseSsl) {
-					Log.Out ("Steam certificate: No error (4)");
+					Log.Out ("[OpenID] Steam certificate: No error (4)");
 				}
 
@@ -136,10 +136,10 @@
 			string mode = getValue (_req, "openid.mode");
 			if (mode == "cancel") {
-				Log.Warning ("Steam OpenID login canceled");
+				Log.Warning ("[OpenID] Steam OpenID login canceled");
 				return 0;
 			}
 
 			if (mode == "error") {
-				Log.Warning ("Steam OpenID login error: " + getValue (_req, "openid.error"));
+				Log.Warning ("[OpenID] Steam OpenID login error: " + getValue (_req, "openid.error"));
 				if (debugOpenId) {
 					PrintOpenIdResponse (_req);
@@ -155,5 +155,5 @@
 				steamId = ulong.Parse (steamIdMatch.Groups [1].Value);
 			} else {
-				Log.Warning ("Steam OpenID login result did not give a valid SteamID");
+				Log.Warning ("[OpenID] Steam OpenID login result did not give a valid SteamID");
 				if (debugOpenId) {
 					PrintOpenIdResponse (_req);
@@ -201,5 +201,5 @@
 			}
 
-			Log.Warning ("Steam OpenID login failed: {0}", responseString);
+			Log.Warning ("[OpenID] Steam OpenID login failed: {0}", responseString);
 			return 0;
 		}
@@ -218,5 +218,5 @@
 			NameValueCollection nvc = _req.QueryString;
 			if (nvc [_name] == null) {
-				throw new MissingMemberException ("OpenID parameter \"" + _name + "\" missing");
+				throw new MissingMemberException ("[OpenID] OpenID parameter \"" + _name + "\" missing");
 			}
 
Index: binary-improvements2/WebServer/src/SSE/AbsEvent.cs
===================================================================
--- binary-improvements2/WebServer/src/SSE/AbsEvent.cs	(revision 398)
+++ binary-improvements2/WebServer/src/SSE/AbsEvent.cs	(revision 399)
@@ -132,6 +132,6 @@
 		protected void logError (string _message, bool _printConnections) {
 			Log.Error (_printConnections
-				? $"SSE ({Name}): {_message} (Left open: {currentlyOpen}, total opened: {totalOpened}, closed: {totalClosed})"
-				: $"SSE ({Name}): {_message}");
+				? $"[Web] [SSE] '{Name}': {_message} (Left open: {currentlyOpen}, total opened: {totalOpened}, closed: {totalClosed})"
+				: $"[Web] [SSE] '{Name}': {_message}");
 		}
 
Index: binary-improvements2/WebServer/src/UrlHandlers/ApiHandler.cs
===================================================================
--- binary-improvements2/WebServer/src/UrlHandlers/ApiHandler.cs	(revision 398)
+++ binary-improvements2/WebServer/src/UrlHandlers/ApiHandler.cs	(revision 399)
@@ -64,5 +64,5 @@
 			
 			if (!apis.TryGetValue (apiName, out AbsWebAPI api)) {
-				Log.Out ($"Error in {nameof(ApiHandler)}.HandleRequest(): No handler found for API \"{apiName}\"");
+				Log.Warning ($"[Web] In {nameof(ApiHandler)}.HandleRequest(): No handler found for API \"{apiName}\"");
 				_context.Response.StatusCode = (int) HttpStatusCode.NotFound;
 				return;
@@ -85,5 +85,5 @@
 				apiHandlerSampler.End ();
 			} catch (Exception e) {
-				Log.Error ($"Error in {nameof(ApiHandler)}.HandleRequest(): Handler {api.Name} threw an exception:");
+				Log.Error ($"[Web] In {nameof(ApiHandler)}.HandleRequest(): Handler {api.Name} threw an exception:");
 				Log.Exception (e);
 				_context.Response.StatusCode = (int) HttpStatusCode.InternalServerError;
Index: binary-improvements2/WebServer/src/UrlHandlers/ItemIconHandler.cs
===================================================================
--- binary-improvements2/WebServer/src/UrlHandlers/ItemIconHandler.cs	(revision 398)
+++ binary-improvements2/WebServer/src/UrlHandlers/ItemIconHandler.cs	(revision 399)
@@ -28,5 +28,5 @@
 			if (!loaded) {
 				_context.Response.StatusCode = (int) HttpStatusCode.InternalServerError;
-				Log.Out ("Web:IconHandler: Icons not loaded");
+				Log.Out ("[Web] IconHandler: Icons not loaded");
 				return;
 			}
@@ -45,5 +45,5 @@
 				_context.Response.StatusCode = (int) HttpStatusCode.NotFound;
 				if (logMissingFiles) {
-					Log.Out ("Web:IconHandler:FileNotFound: \"" + _context.RequestPath + "\" ");
+					Log.Out ("[Web] IconHandler: FileNotFound: \"" + _context.RequestPath + "\" ");
 				}
 			}
@@ -83,5 +83,5 @@
 					loadIconsFromFolder (GameIO.GetGameDir ("Data/ItemIcons"), tintedIcons);
 				} catch (Exception e) {
-					Log.Error ("Failed loading icons from base game");
+					Log.Error ("[Web] Failed loading icons from base game");
 					Log.Exception (e);
 				}
@@ -93,5 +93,5 @@
 						loadIconsFromFolder (modIconsPath, tintedIcons);
 					} catch (Exception e) {
-						Log.Error ("Failed loading icons from mod " + mod.ModInfo.Name.Value);
+						Log.Error ("[Web] Failed loading icons from mod " + mod.ModInfo.Name.Value);
 						Log.Exception (e);
 					}
@@ -99,5 +99,5 @@
 
 				loaded = true;
-				Log.Out ("Web:IconHandler: Icons loaded - {0} ms", microStopwatch.ElapsedMilliseconds);
+				Log.Out ("[Web] IconHandler: Icons loaded - {0} ms", microStopwatch.ElapsedMilliseconds);
 
 				return true;
Index: binary-improvements2/WebServer/src/UrlHandlers/SessionHandler.cs
===================================================================
--- binary-improvements2/WebServer/src/UrlHandlers/SessionHandler.cs	(revision 398)
+++ binary-improvements2/WebServer/src/UrlHandlers/SessionHandler.cs	(revision 399)
@@ -70,5 +70,5 @@
 					WebConnection con = connectionHandler.LogIn (id, _context.Request.RemoteEndPoint.Address);
 					int level = GameManager.Instance.adminTools.GetUserPermissionLevel (con.UserId);
-					Log.Out ("Steam OpenID login from {0} with ID {1}, permission level {2}",
+					Log.Out ("[Web] Steam OpenID login from {0} with ID {1}, permission level {2}",
 						remoteEndpointString, con.UserId, level);
 
@@ -85,9 +85,9 @@
 				}
 			} catch (Exception e) {
-				Log.Error ("Error validating login:");
+				Log.Error ("[Web] Error validating Steam login:");
 				Log.Exception (e);
 			}
 
-			Log.Out ($"Steam OpenID login failed from {remoteEndpointString}");
+			Log.Out ($"[Web] Steam OpenID login failed from {remoteEndpointString}");
 			_context.Response.Redirect (pageErrorPath + "SteamLoginFailed");
 		}
Index: binary-improvements2/WebServer/src/UrlHandlers/SseHandler.cs
===================================================================
--- binary-improvements2/WebServer/src/UrlHandlers/SseHandler.cs	(revision 398)
+++ binary-improvements2/WebServer/src/UrlHandlers/SseHandler.cs	(revision 399)
@@ -58,5 +58,5 @@
 
 			if (!events.TryGetValue (eventName, out AbsEvent eventInstance)) {
-				Log.Out ($"Error in {nameof (SseHandler)}.HandleRequest(): No handler found for event \"{eventName}\"");
+				Log.Warning ($"[Web] [SSE] In {nameof (SseHandler)}.HandleRequest(): No handler found for event \"{eventName}\"");
 				_context.Response.StatusCode = (int)HttpStatusCode.NotFound;
 				return;
@@ -81,5 +81,5 @@
 				_context.Response.OutputStream.Flush ();
 			} catch (Exception e) {
-				Log.Error ($"Error in {nameof (SseHandler)}.HandleRequest(): Handler {eventInstance.Name} threw an exception:");
+				Log.Error ($"[Web] [SSE] In {nameof (SseHandler)}.HandleRequest(): Handler {eventInstance.Name} threw an exception:");
 				Log.Exception (e);
 				_context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
@@ -99,5 +99,5 @@
 						eventHandler.ProcessSendQueue ();
 					} catch (Exception e) {
-						Log.Error ($"SSE ({eventName}): Error processing send queue");
+						Log.Error ($"[Web] [SSE] '{eventName}': Error processing send queue");
 						Log.Exception (e);
 					}
Index: binary-improvements2/WebServer/src/UrlHandlers/StaticHandler.cs
===================================================================
--- binary-improvements2/WebServer/src/UrlHandlers/StaticHandler.cs	(revision 398)
+++ binary-improvements2/WebServer/src/UrlHandlers/StaticHandler.cs	(revision 399)
@@ -28,5 +28,5 @@
 				_context.Response.StatusCode = (int) HttpStatusCode.NotFound;
 				if (logMissingFiles) {
-					Log.Out ("Web:Static:FileNotFound: \"" + _context.RequestPath + "\" @ \"" + datapath + fn + "\"");
+					Log.Warning ("[Web] Static: FileNotFound: \"" + _context.RequestPath + "\" @ \"" + datapath + fn + "\"");
 				}
 			}
Index: binary-improvements2/WebServer/src/WebAPI/GetPlayerList.cs
===================================================================
--- binary-improvements2/WebServer/src/WebAPI/GetPlayerList.cs	(revision 398)
+++ binary-improvements2/WebServer/src/WebAPI/GetPlayerList.cs	(revision 399)
@@ -199,5 +199,5 @@
 			}
 
-			Log.Out ("GetPlayerList: ignoring invalid filter for number-column '{0}': '{1}'", _filterCol, _filterVal);
+			Log.Out ("[Web] GetPlayerList: ignoring invalid filter for number-column '{0}': '{1}'", _filterCol, _filterVal);
 			return _list;
 		}
Index: binary-improvements2/WebServer/src/WebCommandResult.cs
===================================================================
--- binary-improvements2/WebServer/src/WebCommandResult.cs	(revision 398)
+++ binary-improvements2/WebServer/src/WebCommandResult.cs	(revision 399)
@@ -58,11 +58,10 @@
 			} catch (IOException e) {
 				if (e.InnerException is SocketException) {
-					Log.Out ("Error in WebCommandResult.SendLines(): Remote host closed connection: " +
-					         e.InnerException.Message);
+					Log.Warning ("[Web] Error in WebCommandResult.SendLines(): Remote host closed connection: " + e.InnerException.Message);
 				} else {
-					Log.Out ("Error (IO) in WebCommandResult.SendLines(): " + e);
+					Log.Warning ("[Web] Error (IO) in WebCommandResult.SendLines(): " + e);
 				}
 			} catch (Exception e) {
-				Log.Out ("Error in WebCommandResult.SendLines(): " + e);
+				Log.Warning ("[Web] Error in WebCommandResult.SendLines(): " + e);
 			} finally {
 				response?.Close ();
Index: binary-improvements2/WebServer/src/WebPermissions.cs
===================================================================
--- binary-improvements2/WebServer/src/WebPermissions.cs	(revision 398)
+++ binary-improvements2/WebServer/src/WebPermissions.cs	(revision 399)
@@ -184,5 +184,5 @@
 
 		private void OnFileChanged (object _source, FileSystemEventArgs _e) {
-			Log.Out ("Reloading " + SettingsFileName);
+			Log.Out ("[Web] [Perms] Reloading " + SettingsFileName);
 			Load ();
 		}
@@ -193,10 +193,10 @@
 
 			if (!File.Exists (SettingsFullPath)) {
-				Log.Out ($"Permissions file '{SettingsFileName}' not found, creating.");
+				Log.Out ($"[Web] [Perms] Permissions file '{SettingsFileName}' not found, creating.");
 				Save ();
 				return;
 			}
 
-			Log.Out ($"Loading permissions file at '{SettingsFullPath}'");
+			Log.Out ($"[Web] [Perms] Loading permissions file at '{SettingsFullPath}'");
 
 			XmlDocument xmlDoc = new XmlDocument ();
@@ -205,5 +205,5 @@
 				xmlDoc.Load (SettingsFullPath);
 			} catch (XmlException e) {
-				Log.Error ("Failed loading permissions file: " + e.Message);
+				Log.Error ("[Web] [Perms] Failed loading permissions file: " + e.Message);
 				return;
 			}
@@ -212,5 +212,5 @@
 
 			if (adminToolsNode == null) {
-				Log.Error ("Failed loading permissions file: No DocumentElement found");
+				Log.Error ("[Web] [Perms] Failed loading permissions file: No DocumentElement found");
 				return;
 			}
@@ -227,5 +227,5 @@
 			}
 
-			Log.Out ("Loading permissions file done.");
+			Log.Out ("[Web] [Perms] Loading permissions file done.");
 		}
 
@@ -237,5 +237,5 @@
 
 				if (subChild.NodeType != XmlNodeType.Element) {
-					Log.Warning ($"Unexpected XML node found in 'admintokens' section: {subChild.OuterXml}");
+					Log.Warning ($"[Web] [Perms] Unexpected XML node found in 'admintokens' section: {subChild.OuterXml}");
 					continue;
 				}
@@ -244,15 +244,15 @@
 
 				if (!lineItem.HasAttribute ("name")) {
-					Log.Warning ($"Ignoring admintoken-entry because of missing 'name' attribute: {subChild.OuterXml}");
+					Log.Warning ($"[Web] [Perms] Ignoring admintoken-entry because of missing 'name' attribute: {subChild.OuterXml}");
 					continue;
 				}
 
 				if (!lineItem.HasAttribute ("token")) {
-					Log.Warning ($"Ignoring admintoken-entry because of missing 'token' attribute: {subChild.OuterXml}");
+					Log.Warning ($"[Web] [Perms] Ignoring admintoken-entry because of missing 'token' attribute: {subChild.OuterXml}");
 					continue;
 				}
 
 				if (!lineItem.HasAttribute ("permission_level")) {
-					Log.Warning ($"Ignoring admintoken-entry because of missing 'permission_level' attribute: {subChild.OuterXml}");
+					Log.Warning ($"[Web] [Perms] Ignoring admintoken-entry because of missing 'permission_level' attribute: {subChild.OuterXml}");
 					continue;
 				}
@@ -262,5 +262,5 @@
 				if (!int.TryParse (lineItem.GetAttribute ("permission_level"), out int permissionLevel)) {
 					Log.Warning (
-						$"Ignoring admintoken-entry because of invalid (non-numeric) value for 'permission_level' attribute: {subChild.OuterXml}");
+						$"[Web] [Perms] Ignoring admintoken-entry because of invalid (non-numeric) value for 'permission_level' attribute: {subChild.OuterXml}");
 					continue;
 				}
@@ -277,5 +277,5 @@
 
 				if (subChild.NodeType != XmlNodeType.Element) {
-					Log.Warning ($"Unexpected XML node found in 'permissions' section: {subChild.OuterXml}");
+					Log.Warning ($"[Web] [Perms] Unexpected XML node found in 'permissions' section: {subChild.OuterXml}");
 					continue;
 				}
@@ -284,10 +284,10 @@
 
 				if (!lineItem.HasAttribute ("module")) {
-					Log.Warning ($"Ignoring permission-entry because of missing 'module' attribute: {subChild.OuterXml}");
+					Log.Warning ($"[Web] [Perms] Ignoring permission-entry because of missing 'module' attribute: {subChild.OuterXml}");
 					continue;
 				}
 
 				if (!lineItem.HasAttribute ("permission_level")) {
-					Log.Warning ($"Ignoring permission-entry because of missing 'permission_level' attribute: {subChild.OuterXml}");
+					Log.Warning ($"[Web] [Perms] Ignoring permission-entry because of missing 'permission_level' attribute: {subChild.OuterXml}");
 					continue;
 				}
@@ -295,5 +295,5 @@
 				if (!int.TryParse (lineItem.GetAttribute ("permission_level"), out int permissionLevel)) {
 					Log.Warning (
-						$"Ignoring permission-entry because of invalid (non-numeric) value for 'permission_level' attribute: {subChild.OuterXml}");
+						$"[Web] [Perms] Ignoring permission-entry because of invalid (non-numeric) value for 'permission_level' attribute: {subChild.OuterXml}");
 					continue;
 				}
