task: metadata: install: pip install -e .[dev]
patch: diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 0a95646..b9dbfab 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -26,6 +26,10 @@ Changes:
 
 - ``structlog.stdlib.add_logger_name()`` now works in ``structlog.stdlib.ProcessorFormatter``'s ``foreign_pre_chain``.
   `#112 <https://github.com/hynek/structlog/issues/112>`_
+- Clear log record args in ``structlog.stdlib.ProcessorFormatter`` after rendering.
+  This fix is for you if you tried to use it and got ``TypeError: not all arguments converted during string formatting`` exceptions.
+  `#116 <https://github.com/hynek/structlog/issues/116>`_
+  `#117 <https://github.com/hynek/structlog/issues/117>`_
 
 
 ----
diff --git a/src/structlog/stdlib.py b/src/structlog/stdlib.py
index 4529e84..fb7ad04 100644
--- a/src/structlog/stdlib.py
+++ b/src/structlog/stdlib.py
@@ -420,6 +420,7 @@ class ProcessorFormatter(logging.Formatter):
             logger = None
             meth_name = record.levelname.lower()
             ed = {"event": record.getMessage(), "_record": record}
+            record.args = ()
 
             # Non-structlog allows to run through a chain to prepare it for the
             # final processor (e.g. adding timestamps and log levels).

problem_statement: Suggested configurations leads to exceptions for third party libs.
Hi,

Python 2.7.5
CentOS Linux release 7.2.1511 (Core)

I tried the suggestion named:

> Rendering Using structlog-based Formatters Within logging

From:
[http://www.structlog.org/en/stable/standard-library.html#rendering-using-structlog-based-formatters-within-logging](http://www.structlog.org/en/stable/standard-library.html#rendering-using-structlog-based-formatters-within-logging)

The only thing I added was:

```
import boto3  
ec2 = boto3.client('ec2')
response = ec2.describe_regions()
print('Regions:', response['Regions'])
response = ec2.describe_availability_zones()
print('Availability Zones:', response['AvailabilityZones'])
```
(This issue is not related to the third party lib used, I got the same thing with other third party libs, just needed one as a minimal repro case.)

This leads to a ton of exception that ends with:

> File "/usr/lib64/python2.7/logging/__init__.py", line 328, in getMessage
    msg = msg % self.args
TypeError: not all arguments converted during string formatting

My goal is to use structlog to get all my logs and those from imported third party libs to be formatted in JSON with a basic set of common keys. But I started with using the documentation as is first to understand how it works.

I was expecting boto3 logs to be formatted and it worked, somewhere in the console output (and the log file) there is:

> 2017-05-12 19:57:08 [info     ] Starting new HTTP connection (1): 169.254.169.254

What I don't understand are all the Exception thrown from inside the logging library that are in visible in the std err output. Should the suggested config work in this scenario?

Attached are the source code file used, the log file from the WatchedFileHandler and console output file where the exceptions are visible. It was generated with:
`python issue.py &> console_output.txt`

[console_output.txt](https://github.com/hynek/structlog/files/997889/console_output.txt)
[filehandler_output.txt](https://github.com/hynek/structlog/files/997891/filehandler_output.txt)
[source_code.txt](https://github.com/hynek/structlog/files/997890/source_code.txt)

Martin
repo: hynek/structlog
test_cmd: pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
test_patch: diff --git a/tests/test_stdlib.py b/tests/test_stdlib.py
index 423760e..548ccfa 100644
--- a/tests/test_stdlib.py
+++ b/tests/test_stdlib.py
@@ -432,6 +432,22 @@ class TestProcessorFormatter(object):
             "foo [in test_foreign_delegate]\n",
         ) == capsys.readouterr()
 
+    def test_clears_args(self, capsys, configure_for_pf):
+        """
+        We render our log records before sending it back to logging.  Therefore
+        we must clear `LogRecord.args` otherwise the user gets an
+        `TypeError: not all arguments converted during string formatting.` if
+        they use positional formatting in stdlib logging.
+        """
+        configure_logging(None)
+
+        logging.getLogger().warning("hello %s.", "world")
+
+        assert (
+            "",
+            "hello world. [in test_clears_args]\n",
+        ) == capsys.readouterr()
+
     def test_foreign_pre_chain(self, configure_for_pf, capsys):
         """
         If foreign_pre_chain is an iterable, it's used to pre-process