terminal.js:  Fixed a bug (that I created a commit or two ago) where the text highlight function wasn't working properly, creating broken spans all over the place in certain situations.
utils.py:  Added a little check to `utils.killall()` to ensure you don't get an exception if you run `gateone.py --kill` more than once.
gateone.py:  Added a new global logger:  `client_log`.  It will log messages to 'log/gateone-client.log'.  It also gets assigned to `ApplicationWebSocket.client_log()` inside of `ApplicationWebSocket.__init__()` and re-assigned inside of `ApplicationWebSocket.open()` (to add the client IP address metadata) as well as `ApplicationWebSocket.authenticate()` (to add the user's UPN to the metadata).
gateone.py:  Added a new WebSocket action: "go:log".  It is attached to a new function, `ApplicationWebSocket.log_message()` which will log incoming messages (sent via that WebSocket action) to 'logs/gateone-client.log'.
gateone.js:  Changed a few strings around here and there to improve clarity (and remove redunancy in some cases).  Also wrapped lots of strings (that could be localized) with the `GateOne.i18n.gettext()` function.  Still lots more string to wrap though.
gateone.js:  Added a docstring to `GateOne.Logging.init()`.
gateone.js:  Added `GateOne.Logging.logToServer()` and added it as a default log destination in `GateOne.Logging.destinations`.  This will ensure that client-side logs get recorded on the server in 'logs/gateone-client.log'.  I suspect this is going to be very useful in debugging!
gateone.js:  Added `GateOne.Net.onClose()`.  It replaces the closure function that gets assigned to the WebSocket's onclose function inside of `GateOne.Net.connect()`.  It fires the "go:disconnected" event.
gateone.js:  Added `GateOne.Net.disconnect()`.  It just closes the WebSocket and turns off any pings/keepalives/whatever that watch for connection problems.  It is primarily for embedded use.
gateone.js:  `GateOne.Visual.displayMessage()` will now strip HTML before logging messages.  Much easier to read the logs this way.
font.css:  Added an extra try/except block to catch the situation where a 'font_size' isn't provided to the template (e.g. when using `utils.combine_css()`).
logviewer.py:  Fixed a couple of bugs that prevented the '--html' option from working Python 3.
Convenience plugin:  All conveniences are now registered after all JavaScript has loaded (i.e. on the "go:js_loaded" event).
Convenience plugin:  Added checks to `GateOne.Convenience.registerIPConvenience()` and `GateOne.Convenience.registerLSConvenience()`to neglect adding features that depend on the SSH plugin if that plugin is disabled/missing.
Notice plugin:  Added a `self.notice_log` logger that logs to 'logs/gateone-notice.log'.  All notices will now be logged.
onoff.py:  Enhanced the try/except stuff with exception saving:  It will not raise the original exception (with traceback!) if all else fails at trying to call that darned callback.
app_terminal.py:  Added a `term_log` and `self.term_log` loggers (same thing but the second one gets extra user metadata) that logs to 'logs/gateone-terminal.log'.  Everything has been updated to use the new functions appropriately.
app_terminal.py:  The logging messages for terminals opening/closing/killed have been modified from 'debug' to 'info' since this information is useful all-around (not just for debugging).  Also added lots of extra metadata.
app_terminal.py:  The "command" (short version) is now stored in the `TerminalApplication.loc_terms` dict.
golog.py:  Added support to `JSONAdapter()` for including extra 'metadata' when logging messages.