# Changelog - 2014

::: note
::: title
Note
:::

Please see `news`{.interpreted-text role="doc"} for the latest changes.
:::

## 19.1.1 / 2014-08-16

### Changes

#### Core

-   fix `835`{.interpreted-text role="issue"}: display correct pid of
    already running instance
-   fix `833`{.interpreted-text role="pr"}: fix [PyTest]{.title-ref}
    class in setup.py.

#### Logging

-   fix `838`{.interpreted-text role="issue"}: statsd logger, send
    statsd timing metrics in milliseconds
-   fix `839`{.interpreted-text role="issue"}: statsd logger, allows for
    empty log message while pushing metrics and restore worker number in
    DEBUG logs
-   fix `850`{.interpreted-text role="issue"}: add timezone to logging
-   fix `853`{.interpreted-text role="issue"}: Respect logger_class
    setting unless statsd is on

#### AioHttp worker

-   fix `830`{.interpreted-text role="issue"} make sure gaiohttp worker
    is shipped with gunicorn.

## 19.1 / 2014-07-26

### Changes

#### Core

-   fix `785`{.interpreted-text role="issue"}: handle binary type
    address given to a client socket address
-   fix graceful shutdown. make sure QUIT and TERMS signals are switched
    everywhere.
-   `799`{.interpreted-text role="issue"}: fix support loading config
    from module
-   `805`{.interpreted-text role="issue"}: fix check for file-like
    objects
-   fix `815`{.interpreted-text role="issue"}: args validation in
    WSGIApplication.init
-   fix `787`{.interpreted-text role="issue"}: check if we load a pyc
    file or not.

#### Tornado worker

-   fix `771`{.interpreted-text role="issue"}: support tornado 4.0
-   fix `783`{.interpreted-text role="issue"}: x_headers error. The
    x-forwarded-headers option has been removed in
    [c4873681299212d6082cd9902740eef18c2f14f1](https://github.com/benoitc/gunicorn/commit/c4873681299212d6082cd9902740eef18c2f14f1).
    The discussion is available on `633`{.interpreted-text role="pr"}.

#### AioHttp worker

-   fix: fetch all body in input. fix `803`{.interpreted-text
    role="issue"}
-   fix: don\'t install the worker if python \< 3.3
-   fix `822`{.interpreted-text role="issue"}: Support UNIX sockets in
    gaiohttp worker

#### Async worker

-   fix `790`{.interpreted-text role="issue"}: StopIteration shouldn\'t
    be caught at this level.

#### Logging

-   add statsd logging handler fix `748`{.interpreted-text role="issue"}

#### Paster

-   fix `809`{.interpreted-text role="issue"}: Set global logging
    configuration from a Paste config.

#### Extra

-   fix RuntimeError in gunicorn.reloader (`807`{.interpreted-text
    role="issue"})

#### Documentation

-   update faq: put a note on how [watch logs in the
    console](http://docs.gunicorn.org/en/latest/faq.html#why-i-don-t-see-any-logs-in-the-console)
    since many people asked for it.

## 19.0 / 2014-06-12

Gunicorn 19.0 is a major release with new features and fixes. This
version improve a lot the usage of Gunicorn with python 3 by adding [two
new
workers](http://docs.gunicorn.org/en/latest/design.html#asyncio-workers)
to it: [gthread]{.title-ref} a fully threaded async worker using futures
and [gaiohttp]{.title-ref} a worker using asyncio.

### Breaking Changes

#### Switch QUIT and TERM signals

With this change, when gunicorn receives a QUIT all the workers are
killed immediately and exit and TERM is used for the graceful shutdown.

Note: the old behaviour was based on the NGINX but the new one is more
correct according the following doc:

<https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html>

also it is complying with the way the signals are sent by heroku:

<https://devcenter.heroku.com/articles/python-faq#what-constraints-exist-when-developing-applications-on-heroku>

#### Deprecations

[run_gunicorn]{.title-ref}, [gunicorn_django]{.title-ref} and
[gunicorn_paster]{.title-ref} are now completely deprecated and will be
removed in the next release. Use the [gunicorn]{.title-ref} command
instead.

### Changes

#### core

-   add aiohttp worker named [gaiohttp]{.title-ref} using asyncio. Full
    async worker on python 3.
-   fix HTTP-violating excess whitespace in write_error output
-   fix: try to log what happened in the worker after a timeout, add a
    [worker_abort]{.title-ref} hook on SIGABRT signal.
-   fix: save listener socket name in workers so we can handle buffered
    keep-alive requests after the listener has closed.
-   add on_exit hook called just before exiting gunicorn.
-   add support for python 3.4
-   fix: do not swallow unexpected errors when reaping
-   fix: remove incompatible SSL option with python 2.6
-   add new async gthread worker and [\--threads]{.title-ref} options
    allows to set multiple threads to listen on connection
-   deprecate [gunicorn_django]{.title-ref} and
    [gunicorn_paster]{.title-ref}
-   switch QUIT and TERM signal
-   reap workers in SIGCHLD handler
-   add universal wheel support
-   use [email.utils.formatdate]{.title-ref} in gunicorn.util.http_date
-   deprecate the [\--debug]{.title-ref} option
-   fix: log exceptions that occur after response start ...
-   allows loading of applications from [.pyc]{.title-ref} files (#693)
-   fix: issue #691, raw_env config file parsing
-   use a dynamic timeout to wait for the optimal time. (Reduce power
    usage)
-   fix python3 support when notifying the arbiter
-   add: honor \$WEB_CONCURRENCY environment variable. Useful for heroku
    setups.
-   add: include tz offset in access log
-   add: include access logs in the syslog handler.
-   add \--reload option for code reloading
-   add the capability to load [gunicorn.base.Application]{.title-ref}
    without the loading of the arguments of the command line. It allows
    you to `embed gunicorn in
    your own application <custom>`{.interpreted-text role="ref"}.
-   improve: set wsgi.multithread to True for async workers
-   fix logging: make sure to redirect wsgi.errors when needed
-   add: syslog logging can now be done to a unix socket
-   fix logging: don\'t try to redirect stdout/stderr to the logfile.
-   fix logging: don\'t propagate log
-   improve logging: file option can be overridden by the gunicorn
    options [\--error-logfile]{.title-ref} and
    [\--access-logfile]{.title-ref} if they are given.
-   fix: don\'t override [SERVER]()\* by the Host header
-   fix: handle_error
-   add more option to configure SSL
-   fix: sendfile with SSL
-   add: worker_int callback (to react on SIGTERM)
-   fix: don\'t depend on entry point for internal classes, now absolute
    modules path can be given.
-   fix: Error messages are now encoded in latin1
-   fix: request line length check
-   improvement: proxy_allow_ips: Allow proxy protocol if \"\*\"
    specified
-   fix: run worker\'s [setup]{.title-ref} method before setting
    num_workers
-   fix: FileWrapper inherit from [object]{.title-ref} now
-   fix: Error messages are now encoded in latin1
-   fix: don\'t spam the console on SIGWINCH.
-   fix: logging -don\'t stringify T and D logging atoms (#621)
-   add support for the latest django version
-   deprecate [run_gunicorn]{.title-ref} django option
-   fix: sys imported twice

#### gevent worker

-   fix: make sure to stop all listeners
-   fix: monkey patching is now done in the worker
-   fix: \"global name \'hub\' is not defined\"
-   fix: reinit [hub]{.title-ref} on old versions of gevent
-   support gevent 1.0
-   fix: add subprocess in monkey patching
-   fix: add support for multiple listener

#### eventlet worker

-   fix: merge duplicate EventletWorker.init_process method (fixes #657)
-   fix: missing errno import for eventlet sendfile patch
-   fix: add support for multiple listener

#### tornado worker

-   add graceful stop support