Py2Loggly
=========

Py2Loggly is a proxy server listening on UDP and TCP for messages coming
from python's UDP/TCP logging handler, it will forward all these
messages to ``loggly.com``.

Installation
------------

Install dependencies
~~~~~~~~~~~~~~~~~~~~

py2loggly only depends on ``gevent``

Install py2loggly
~~~~~~~~~~~~~~~~~

From sources

::

    $ python setup.py install

From Pypi

::

    $ pip install py2loggly

Usage
-----

Starting the server
~~~~~~~~~~~~~~~~~~~

The only required parameter is ``--loggly-token`` to provide your loggly
TOKEN.

::

    $ py2loggly --loggly-token $LOGGLY_TOKEN

The default TCP port is 9020 and the default UDP port is 9021.

Parameters
^^^^^^^^^^

::

    usage: py2loggly [-h] [-v] [--bind-ip IP] [--tcp-port PORT] [--udp-port PORT]
                     [--fqdn] [--hostname HOSTNAME] --loggly-token TOKEN
                     [--tags TAG1 TAG2 [TAG1 TAG2 ...]]

    Proxy for python UDP/TCP logging to loggly

    optional arguments:
      -h, --help            show this help message and exit
      -v, --version         show program's version number and exit
      --bind-ip IP          IP address to listen on
      --tcp-port PORT       TCP port to listen on
      --udp-port PORT       UDP port to listen on
      --fqdn                Use the fully qualified domain name
      --hostname HOSTNAME   Use the provided hostname instead of guessing it.
      --loggly-token TOKEN  the loggly TOKEN.
      --tags TAG1 TAG2 [TAG1 TAG2 ...]
                            Tags for the event message

Sending messages to py2loggly
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You can either use ``SockerHandler`` or ``DatagramHandler`` from
python's ``logging.handlers``

The biggest advantage to use ``DatagramHandler`` is that logging won't
slow down your application and if py2loggly is not running, it won't
impact your application.

So the recommended setup is to run py2loggly locally on each server and
use the ``DatadgramHandler``.

Example
^^^^^^^

::

    import logging, logging.handlers

    rootLogger = logging.getLogger('')
    rootLogger.setLevel(logging.DEBUG)
    socketHandler = logging.handlers.SocketHandler('localhost',
                        logging.handlers.DEFAULT_TCP_LOGGING_PORT)
    # don't bother with a formatter, since a socket handler sends the event as
    # an unformatted pickle
    rootLogger.addHandler(socketHandler)

    # Now, we can log to the root logger, or any other logger. First the root...
    logging.info('Jackdaws love my big sphinx of quartz.')

License
-------

MIT
