首页 > 代码库 > python 日志收集服务器
python 日志收集服务器
引因: python 的日志收集服务是线程安全的(对同一个文件的写入,使用了锁),但是对于多进程的情况,它是无法处理的。python 官方文档推荐的做法是,使用tcp 服务器专门用于日志的收集,以确保对的文件的写入是安全的。这里提供了日志收集服务器基于twisted的实现,可供参考,程序在centos上进行了测试,并可用于生产环境
当client 和server 在一台机器上时,每秒可以处理6000条日志记录
#!/usr/bin/env python # -*- coding:utf-8 -*- ################################## # logserver # 通过socket接收并存储日志信息 # 注:测试程序为test_logserver.py # 修改时间:2013-11-22 ################################### # standard lib import os, sys import time import twisted import logging import traceback import struct import cPickle # use cPickle for speed from logging.handlers import TimedRotatingFileHandler from twisted.internet.protocol import Protocol, Factory # our own code import settings from log_record import initlog # 根据logger name生成一个 def gen_log_name(name): name = name.replace('.', '_') return name + '.log' class ReceiveProtocol(Protocol): HEADER_LENGTH = 4 def __init__(self): self.buf = '' self.state = 'init' self.require_length = ReceiveProtocol.HEADER_LENGTH # 记录当前完成初始化的logger名称 self.logger_dict = {} def connectionMade(self): logger = logging.getLogger('log_server') logger.info('[makeConnection]与logger_client建立socket连接。') def dataReceived(self, data): logger = logging.getLogger('log_server') try: if len(self.buf + data) >= self.require_length: self.buf = self.buf + data # 数据就绪进行相应动作 data = http://www.mamicode.com/self.buf[0:self.require_length]>完成程序:
https://github.com/vearne/log_server/tree/master
参考资料:
https://docs.python.org/2/howto/logging-cookbook.html#logging-cookbook
python 日志收集服务器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。