爬虫:8.日志

日志

在任何一个完整的程序中,日志都是必不可少的一部分。日志的作用无需细说,下面是一个封装了发送日志到本地和syslog服务器的接口。

# -*- coding:utf-8 -*-

"""
File Name : 'log'.py
Description:
Author: 'chengwei'
Date: '2016/5/24' '16:24'
python: 2.7.10
"""
import logging
from logging.handlers import SysLogHandler
import time
import ConfigParser
import os
import codecs

def example():
    # 发送到远程syslogserver
    logger1 = to_syslog('local2', logging.INFO)
    for i in range(0, 20):
        time.sleep(0.5)
        msg = "abc %s" % i
        logger1.error(msg)
    # 存储日志到本地指定位置
    logger2 = local_log("test.log")
    for i in range(0, 20):
        time.sleep(1.1)
        msg = "abc %s" % i
        logger2.error(msg)

def local_log(logname, level=logging.INFO):
    """
    :param logname:表示存储路径和文件名
    :param level:表示日志输出级别logging.DEBUG,logging.INFO等等,默认为logging.INFO
    :return:logger
    """
    format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s[line:%(lineno)d] - %(message)s')
    handler = logging.FileHandler(logname)
    handler.setFormatter(format)

    logger = logging.getLogger()
    logger.addHandler(handler)
    logger.setLevel(level)
    return logger

def to_syslog(user, level=logging.INFO):
    """
    发送日志到syslog服务器
    :param user:表示自定义local0-7
    :param level:表示日志输出级别logging.DEBUG,logging.INFO等等,默认为logging.INFO
    :return:logger
    """
    sysloghost = init()
    format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s[line:%(lineno)d] - %(message)s')
    handler = SysLogHandler(address=(sysloghost, 514), facility=user)
    handler.setFormatter(format)
    logger = logging.getLogger()
    logger.addHandler(handler)
    logger.setLevel(level)
    return logger

def init(parasecname="LOG"):
    """
    从配置文件获取参数
    :param parasecname: 配置文件中节点名称
    :return:配置信息
    """
    cur_script_dir = os.path.split(os.path.realpath(__file__))[0]
    cfg_path = os.path.join(cur_script_dir, "db.conf")
    cfg_reder = ConfigParser.ConfigParser()
    secname = parasecname
    cfg_reder.readfp(codecs.open(cfg_path, "r", "utf_8"))
    sysloghost = cfg_reder.get(secname, "server")
    return sysloghost


if __name__ == '__main__':
    example()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,597评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 文档状态 本文档提供了互联网委员会的信息。它不指定任何一种网络规范。对本文档的发布是不受限制的。 摘要 本文描述了...
    顽强的猫尾草阅读 8,784评论 0 2
  • 一、不要问"在幼儿园有人欺负你吗?" 孩子刚上幼儿园,因为缺少和同龄幼儿交往的经验,经常会发生冲突。而家长也很担心...
    童之趣阅读 493评论 0 2
  • 说到床单,很多人应该都是随便选择的,根本没有考虑过什么样的床单适合自己。因为床单在风水中是有讲究的,不可以乱用。坏...
    路在脚下吗阅读 4,932评论 0 0