LoggerServer Documentation

logger_server is an async TCP logging server base on tornado.ioloop, which serve for logging.handlers.SocketHandler.

More information, see logging-cookbook.

Usage

1. Install

Install LoggerServer by pip

pip install logger_server

2. Configuration

After logger_server package installed, you will got a command logger-server

logger-server options:

$ logger_server -h
usage: logger-server [-h] [-f CONF] [-p PORT] [--log LOG] [--when WHEN]
                     [--interval INTERVAL] [--backup BACKUP] [--fmt FMT]
                     [--datefmt DATEFMT]

LoggerServer help documentation

optional arguments:
  -h, --help            show this help message and exit
  -f CONF, --conf CONF  The config file path for LoggerServer. (default: None)
  -p PORT, --port PORT  LoggerServer port. (default: 9876)
  --log LOG             The log output file. (default: ./logserver.log)
  --when WHEN           specify the type of TimedRotatingFileHandler
                        interval.other options:('S', 'M', 'H', 'D', 'W0'-'W6')
                        (default: midnight)
  --interval INTERVAL   The interval value of timed rotating. (default: 1)
  --backup BACKUP       Number of log files to keep. (default: 14)
  --fmt FMT             The log output formatter of logging. (default:
                        [%(levelname)1.1s %(asctime)s %(ip)s %(name)s
                        %(module)s:%(lineno)d] %(message)s)
  --datefmt DATEFMT     The log output date formatter of logging. (default:
                        %Y-%m-%d %H:%M:%S.%f)
  --detached            Running on detached mode. (default: False)
  --separated           Output log into every single file. logger name will in
                        the suffix of every logger file. (default: False)

Use param -f to specify a config file for logger-server. logserver.conf.template is a configuration template.

New in version 1.0.3: Use param --detached to set logger-server runnning as daemon.

Warning

By default, the config file setttings over command settings.

Start LoggerServer

$ logger_server

Output:

> LoggerServer is binding on 0.0.0.0:9876

Note

logger-server bind on port 9876 by default. if this port is not avalible, use param -p specify a new port.

3. Hello word

After start logger-server, now you can write your logging code, like below:

Example1 use root logger:

import logging
import logging.handlers

# root logger setting
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# change localhost to your `logger-server` ip
socketHandler = logging.handlers.SocketHandler('localhost', 9876)
logger.addHandler(socketHandler)

# use root logger
logging.debug('The root logger is working!')
logging.info('The root logger is working!')
logging.warn('The root logger is working!')
logging.error('The root logger is working!')
logging.critical('The root logger is working!')

# unsetted logger inherit the settings of root logger by default.
logger = logging.getLogger('default_logger')
logger.debug('The default logger is working!')
logger.info('The default logger is working!')
logger.warn('The default logger is working!')
logger.error('The default logger is working!')
logger.critical('The default logger is working!')

Output:

[D 2017-11-16 11:13:19.700965 127.0.0.1 root root_logger:23] The root logger is working!
[I 2017-11-16 11:13:19.702461 127.0.0.1 root root_logger:24] The root logger is working!
[W 2017-11-16 11:13:19.702587 127.0.0.1 root root_logger:25] The root logger is working!
[E 2017-11-16 11:13:19.702661 127.0.0.1 root root_logger:26] The root logger is working!
[C 2017-11-16 11:13:19.702759 127.0.0.1 root root_logger:27] The root logger is working!
[D 2017-11-16 11:13:19.702844 127.0.0.1 default_logger root_logger:31] The default logger is working!
[I 2017-11-16 11:13:19.702919 127.0.0.1 default_logger root_logger:32] The default logger is working!
[W 2017-11-16 11:13:19.702979 127.0.0.1 default_logger root_logger:33] The default logger is working!
[E 2017-11-16 11:13:19.703068 127.0.0.1 default_logger root_logger:34] The default logger is working!
[C 2017-11-16 11:13:19.703124 127.0.0.1 default_logger root_logger:35] The default logger is working!

Get this example code root_logger.py.

Example2 use custom logger:

import logging
import logging.handlers

# logger setting
logger = logging.getLogger('test')
logger.setLevel(logging.DEBUG)
# change localhost to your `logger-server` ip
socketHandler = logging.handlers.SocketHandler('localhost', 9876)
logger.addHandler(socketHandler)

logger.debug('The test logger is working!')
logger.info('The test logger is working!')
logger.warn('The test logger is working!')
logger.error('The test logger is working!')
logger.critical('The test logger is working!')

Output:

[D 2017-11-16 11:19:48.623884 127.0.0.1 test custom_logger:22] The test logger is working!
[I 2017-11-16 11:19:48.625533 127.0.0.1 test custom_logger:23] The test logger is working!
[W 2017-11-16 11:19:48.625658 127.0.0.1 test custom_logger:24] The test logger is working!
[E 2017-11-16 11:19:48.625739 127.0.0.1 test custom_logger:25] The test logger is working!
[C 2017-11-16 11:19:48.625821 127.0.0.1 test custom_logger:26] The test logger is working!

Get this example code custom_logger.py.

Release history

Version 1.0.5, Nov 20 2017

  • Add --separated param. Output log to every single file.

Version 1.0.4, Nov 20 2017

  • Add --version param.
  • Change default port from 9000 to 9876

Version 1.0.3, Nov 16 2017

  • Add --detached param.

Version 1.0.0, Nov 15 2017

  • Release v1.0.0