diff --git a/src/structlog/stdlib.py b/src/structlog/stdlib.py
index 86ada28..601a302 100644
--- a/src/structlog/stdlib.py
+++ b/src/structlog/stdlib.py
@@ -469,12 +469,14 @@ class ProcessorFormatter(logging.Formatter):
     :param logger: Logger which we want to push through the ``structlog``
         processor chain. This parameter is necessary for some of the
         processors like `filter_by_level`. (default: None)
-
+    :param bool pass_foreign_args: If `True`, pass a foreign log record's
+        `args` to the event_dict under `positional_args` key. (default: False)
     :rtype: str
 
     .. versionadded:: 17.1.0
     .. versionadded:: 17.2.0 *keep_exc_info* and *keep_stack_info*
     .. versionadded:: 19.2.0 *logger*
+    .. versionadded:: 19.2.0 *pass_foreign_args*
     """
 
     def __init__(
@@ -484,6 +486,7 @@ class ProcessorFormatter(logging.Formatter):
         keep_exc_info=False,
         keep_stack_info=False,
         logger=None,
+        pass_foreign_args=False,
         *args,
         **kwargs
     ):
@@ -495,6 +498,7 @@ class ProcessorFormatter(logging.Formatter):
         # The and clause saves us checking for PY3 in the formatter.
         self.keep_stack_info = keep_stack_info and PY3
         self.logger = logger
+        self.pass_foreign_args = pass_foreign_args
 
     def format(self, record):
         """
@@ -516,6 +520,10 @@ class ProcessorFormatter(logging.Formatter):
             logger = self.logger
             meth_name = record.levelname.lower()
             ed = {"event": record.getMessage(), "_record": record}
+
+            if self.pass_foreign_args:
+                ed["positional_args"] = record.args
+
             record.args = ()
 
             # Add stack-related attributes to event_dict and unset them

diff --git a/tests/test_stdlib.py b/tests/test_stdlib.py
index e9abb08..b34e21a 100644
--- a/tests/test_stdlib.py
+++ b/tests/test_stdlib.py
@@ -455,7 +455,7 @@ def configure_for_pf():
     reset_defaults()
 
 
-def configure_logging(pre_chain, logger=None):
+def configure_logging(pre_chain, logger=None, pass_foreign_args=False):
     """
     Configure logging to use ProcessorFormatter.
     """
@@ -470,6 +470,7 @@ def configure_logging(pre_chain, logger=None):
                     "foreign_pre_chain": pre_chain,
                     "format": "%(message)s [in %(funcName)s]",
                     "logger": logger,
+                    "pass_foreign_args": pass_foreign_args,
                 }
             },
             "handlers": {
@@ -527,6 +528,29 @@ class TestProcessorFormatter(object):
             "hello world. [in test_clears_args]\n",
         ) == capsys.readouterr()
 
+    def test_pass_foreign_args_true_sets_positional_args_key(
+        self, configure_for_pf, capsys
+    ):
+        """
+        Test that when `pass_foreign_args` is `True` we set the
+        `positional_args` key in the `event_dict` before clearing args.
+        """
+        test_processor = call_recorder(lambda l, m, event_dict: event_dict)
+        configure_logging((test_processor,), pass_foreign_args=True)
+        configure(
+            processors=[ProcessorFormatter.wrap_for_formatter],
+            logger_factory=LoggerFactory(),
+            wrapper_class=BoundLogger,
+        )
+
+        positional_args = {"foo": "bar"}
+        logging.getLogger().info("okay %(foo)s", positional_args)
+
+        event_dict = test_processor.calls[0].args[2]
+
+        assert "positional_args" in event_dict
+        assert positional_args == event_dict["positional_args"]
+
     def test_log_dict(self, configure_for_pf, capsys):
         """
         Test that dicts can be logged with std library loggers.

Strip LogRecord.args Attribute After foreign_pre_chain Processors Run in ProcessorFormatter
First off, thank you to everyone involved in maintaining this project!

I love the chained approach it provides to building up a log message context. Great work!

I want to start using a structlog-based formatter to output logs as json for several small to medium size code bases I manage.

In particular, I want to be able to write a `processor` that takes the *keys* from the `LogRecord.args` attribute and insert them into my `event_dict`.

Right now, when the `ProcessorFormatter` class receives a log record from `logging` rather than `structlib`, it sets `LogRecord.args = ()` after generating a message [here](https://github.com/hynek/structlog/blob/0e209d95652c0f9b2943bf0334d74f4964fc7f13/src/structlog/stdlib.py#L519).

This means that none of my downstream processors defined in `foreign_pre_chain` can work with the original `LogRecord.args` keys.

Would the maintainers be open to moving the `record.args = ()` setting to *after* the `foreign_pre_chain` processors run? I have a working version locally and can add a test if it's a PR you would accept.

Speaking more broadly, would you be open to me adding some kind of `migration` docs for projects that currently use the stdlib `logging` package but would like to switch to `structlog`?
tests/test_stdlib.py::TestProcessorFormatter::test_foreign_delegate tests/test_stdlib.py::TestProcessorFormatter::test_clears_args tests/test_stdlib.py::TestProcessorFormatter::test_pass_foreign_args_true_sets_positional_args_key tests/test_stdlib.py::TestProcessorFormatter::test_log_dict tests/test_stdlib.py::TestProcessorFormatter::test_foreign_pre_chain tests/test_stdlib.py::TestProcessorFormatter::test_foreign_pre_chain_add_logger_name tests/test_stdlib.py::TestProcessorFormatter::test_foreign_chain_can_pass_dictionaries_without_excepting tests/test_stdlib.py::TestProcessorFormatter::test_foreign_pre_chain_gets_exc_info tests/test_stdlib.py::TestProcessorFormatter::test_other_handlers_get_original_record tests/test_stdlib.py::TestProcessorFormatter::test_formatter_unsets_exc_info[True] tests/test_stdlib.py::TestProcessorFormatter::test_formatter_unsets_exc_info[False] tests/test_stdlib.py::TestProcessorFormatter::test_formatter_unsets_stack_info[True] tests/test_stdlib.py::TestProcessorFormatter::test_formatter_unsets_stack_info[False] tests/test_stdlib.py::TestProcessorFormatter::test_native tests/test_stdlib.py::TestProcessorFormatter::test_foreign_pre_chain_filter_by_level
tests/test_stdlib.py::TestLoggerFactory::test_deduces_correct_name tests/test_stdlib.py::TestLoggerFactory::test_ignores_frames tests/test_stdlib.py::TestLoggerFactory::test_deduces_correct_caller tests/test_stdlib.py::TestLoggerFactory::test_stack_info tests/test_stdlib.py::TestLoggerFactory::test_no_stack_info_by_default tests/test_stdlib.py::TestLoggerFactory::test_find_caller tests/test_stdlib.py::TestLoggerFactory::test_sets_correct_logger tests/test_stdlib.py::TestLoggerFactory::test_positional_argument_avoids_guessing tests/test_stdlib.py::TestFilterByLevel::test_filters_lower_levels tests/test_stdlib.py::TestFilterByLevel::test_passes_higher_levels tests/test_stdlib.py::TestBoundLogger::test_proxies_to_correct_method[debug] tests/test_stdlib.py::TestBoundLogger::test_proxies_to_correct_method[info] tests/test_stdlib.py::TestBoundLogger::test_proxies_to_correct_method[warning] tests/test_stdlib.py::TestBoundLogger::test_proxies_to_correct_method[error] tests/test_stdlib.py::TestBoundLogger::test_proxies_to_correct_method[critical] tests/test_stdlib.py::TestBoundLogger::test_proxies_exception tests/test_stdlib.py::TestBoundLogger::test_proxies_log tests/test_stdlib.py::TestBoundLogger::test_positional_args_proxied tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_attributes[name] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_attributes[level] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_attributes[parent] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_attributes[propagate] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_attributes[handlers] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_attributes[disabled] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[addHandler-method_args0] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[removeHandler-method_args1] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[hasHandlers-None] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[callHandlers-method_args3] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[handle-method_args4] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[setLevel-method_args5] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[getEffectiveLevel-None] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[isEnabledFor-method_args7] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[findCaller-None] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[makeRecord-method_args9] tests/test_stdlib.py::TestBoundLogger::test_stdlib_passthrough_methods[getChild-method_args10] tests/test_stdlib.py::TestBoundLogger::test_exception_exc_info tests/test_stdlib.py::TestBoundLogger::test_exception_exc_info_override tests/test_stdlib.py::TestPositionalArgumentsFormatter::test_formats_tuple tests/test_stdlib.py::TestPositionalArgumentsFormatter::test_formats_dict tests/test_stdlib.py::TestPositionalArgumentsFormatter::test_positional_args_retained tests/test_stdlib.py::TestPositionalArgumentsFormatter::test_nop_no_args tests/test_stdlib.py::TestPositionalArgumentsFormatter::test_args_removed_if_empty tests/test_stdlib.py::TestAddLogLevelNumber::test_log_level_number_added[critical-50] tests/test_stdlib.py::TestAddLogLevelNumber::test_log_level_number_added[exception-40] tests/test_stdlib.py::TestAddLogLevelNumber::test_log_level_number_added[error-40] tests/test_stdlib.py::TestAddLogLevelNumber::test_log_level_number_added[warn-30] tests/test_stdlib.py::TestAddLogLevelNumber::test_log_level_number_added[warning-30] tests/test_stdlib.py::TestAddLogLevelNumber::test_log_level_number_added[info-20] tests/test_stdlib.py::TestAddLogLevelNumber::test_log_level_number_added[debug-10] tests/test_stdlib.py::TestAddLogLevelNumber::test_log_level_number_added[notset-0] tests/test_stdlib.py::TestAddLogLevel::test_log_level_added tests/test_stdlib.py::TestAddLogLevel::test_log_level_alias_normalized tests/test_stdlib.py::TestAddLoggerName::test_logger_name_added tests/test_stdlib.py::TestAddLoggerName::test_logger_name_added_with_record tests/test_stdlib.py::TestRenderToLogKW::test_default tests/test_stdlib.py::TestRenderToLogKW::test_add_extra_event_dict