aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2016-10-04 13:00:15 +1100
committerAldo Cortesi <aldo@nullcube.com>2016-10-04 13:00:15 +1100
commit7fe09f4d26e604db9d3e7f9868b3f0da0b3a6406 (patch)
tree9749b5b1477eb8638d2e649328583af59d094b8e /mitmproxy
parent2bd868662937b504cccd825e9e24e3cb6a142708 (diff)
downloadmitmproxy-7fe09f4d26e604db9d3e7f9868b3f0da0b3a6406.tar.gz
mitmproxy-7fe09f4d26e604db9d3e7f9868b3f0da0b3a6406.tar.bz2
mitmproxy-7fe09f4d26e604db9d3e7f9868b3f0da0b3a6406.zip
Consolidate logging
- Make log event handler work - Move terminal event log into an addon - Clean various log related errors and duplications
Diffstat (limited to 'mitmproxy')
-rw-r--r--mitmproxy/builtins/termlog.py23
-rw-r--r--mitmproxy/controller.py20
-rw-r--r--mitmproxy/dump.py19
-rw-r--r--mitmproxy/flow/master.py2
-rw-r--r--mitmproxy/proxy/__init__.py4
-rw-r--r--mitmproxy/proxy/root_context.py9
-rw-r--r--mitmproxy/proxy/server.py3
7 files changed, 50 insertions, 30 deletions
diff --git a/mitmproxy/builtins/termlog.py b/mitmproxy/builtins/termlog.py
new file mode 100644
index 00000000..c8259f0c
--- /dev/null
+++ b/mitmproxy/builtins/termlog.py
@@ -0,0 +1,23 @@
+from __future__ import absolute_import, print_function, division
+
+import click
+
+from mitmproxy import utils
+
+
+class TermLog:
+ def __init__(self):
+ self.options = None
+
+ def configure(self, options, updated):
+ self.options = options
+
+ def log(self, e):
+ if self.options.verbosity >= utils.log_tier(e.level):
+ click.secho(
+ e.msg,
+ file=self.options.tfile,
+ fg=dict(error="red", warn="yellow").get(e.level),
+ dim=(e.level == "debug"),
+ err=(e.level == "error")
+ )
diff --git a/mitmproxy/controller.py b/mitmproxy/controller.py
index 51a9b146..1a8801e1 100644
--- a/mitmproxy/controller.py
+++ b/mitmproxy/controller.py
@@ -28,21 +28,26 @@ Events = frozenset([
"requestheaders",
"response",
"responseheaders",
+ "error",
"websocket_handshake",
"next_layer",
- "error",
- "log",
-
- "start",
"configure",
"done",
+ "log",
+ "start",
"tick",
])
+class LogEntry(object):
+ def __init__(self, msg, level):
+ self.msg = msg
+ self.level = level
+
+
class Log(object):
def __init__(self, master):
self.master = master
@@ -90,11 +95,16 @@ class Master(object):
mitmproxy_ctx.master = None
mitmproxy_ctx.log = None
+ def tell(self, mtype, m):
+ m.reply = DummyReply()
+ self.event_queue.put((mtype, m))
+
def add_log(self, e, level):
"""
level: debug, info, warn, error
"""
- pass
+ with self.handlecontext():
+ self.addons("log", LogEntry(e, level))
def add_server(self, server):
# We give a Channel to the server which can be used to communicate with the master
diff --git a/mitmproxy/dump.py b/mitmproxy/dump.py
index 6bed8fcc..0e942eac 100644
--- a/mitmproxy/dump.py
+++ b/mitmproxy/dump.py
@@ -3,15 +3,12 @@ from __future__ import absolute_import, print_function, division
from typing import Optional # noqa
import typing # noqa
-import click
-
from mitmproxy import controller
from mitmproxy import exceptions
from mitmproxy import flow
from mitmproxy import builtins
-from mitmproxy import utils
from mitmproxy import options
-from mitmproxy.builtins import dumper
+from mitmproxy.builtins import dumper, termlog
from netlib import tcp
@@ -42,6 +39,7 @@ class DumpMaster(flow.FlowMaster):
self.has_errored = False
self.addons.add(*builtins.default_addons())
self.addons.add(dumper.Dumper())
+ self.addons.add(termlog.TermLog())
# This line is just for type hinting
self.options = self.options # type: Options
self.set_stream_large_bodies(options.stream_large_bodies)
@@ -79,17 +77,10 @@ class DumpMaster(flow.FlowMaster):
except exceptions.FlowReadException as e:
raise DumpError(str(e))
- def add_log(self, e, level="info"):
- if level == "error":
+ @controller.handler
+ def log(self, e):
+ if e.level == "error":
self.has_errored = True
- if self.options.verbosity >= utils.log_tier(level):
- click.secho(
- e,
- file=self.options.tfile,
- fg=dict(error="red", warn="yellow").get(level),
- dim=(level == "debug"),
- err=(level == "error")
- )
@controller.handler
def request(self, f):
diff --git a/mitmproxy/flow/master.py b/mitmproxy/flow/master.py
index 7149fec9..a2b225b8 100644
--- a/mitmproxy/flow/master.py
+++ b/mitmproxy/flow/master.py
@@ -190,7 +190,7 @@ class FlowMaster(controller.Master):
@controller.handler
def log(self, l):
- self.add_log(l.msg, l.level)
+ pass
@controller.handler
def clientconnect(self, root_layer):
diff --git a/mitmproxy/proxy/__init__.py b/mitmproxy/proxy/__init__.py
index ada9fa12..e3d249fa 100644
--- a/mitmproxy/proxy/__init__.py
+++ b/mitmproxy/proxy/__init__.py
@@ -1,11 +1,11 @@
from __future__ import absolute_import, print_function, division
from .config import ProxyConfig
-from .root_context import RootContext, Log
+from .root_context import RootContext
from .server import ProxyServer, DummyServer
__all__ = [
"ProxyServer", "DummyServer",
"ProxyConfig",
- "RootContext", "Log",
+ "RootContext"
]
diff --git a/mitmproxy/proxy/root_context.py b/mitmproxy/proxy/root_context.py
index 9827ef74..cfa04bdf 100644
--- a/mitmproxy/proxy/root_context.py
+++ b/mitmproxy/proxy/root_context.py
@@ -5,6 +5,7 @@ import sys
import six
import netlib.exceptions
+from mitmproxy import controller
from mitmproxy import exceptions
from mitmproxy import protocol
from mitmproxy.proxy import modes
@@ -118,7 +119,7 @@ class RootContext(object):
for i in subs:
full_msg.append(" -> " + i)
full_msg = "\n".join(full_msg)
- self.channel.tell("log", Log(full_msg, level))
+ self.channel.tell("log", controller.LogEntry(full_msg, level))
@property
def layers(self):
@@ -126,9 +127,3 @@ class RootContext(object):
def __repr__(self):
return "RootContext"
-
-
-class Log(object):
- def __init__(self, msg, level="info"):
- self.msg = msg
- self.level = level
diff --git a/mitmproxy/proxy/server.py b/mitmproxy/proxy/server.py
index c5fd5f9e..182f4602 100644
--- a/mitmproxy/proxy/server.py
+++ b/mitmproxy/proxy/server.py
@@ -9,6 +9,7 @@ import six
import netlib.exceptions
from mitmproxy import exceptions
from mitmproxy import models
+from mitmproxy import controller
from mitmproxy.proxy import modes
from mitmproxy.proxy import root_context
from netlib import tcp
@@ -155,4 +156,4 @@ class ConnectionHandler(object):
def log(self, msg, level):
msg = "{}: {}".format(repr(self.client_conn.address), msg)
- self.channel.tell("log", root_context.Log(msg, level))
+ self.channel.tell("log", controller.LogEntry(msg, level))