linux python syslog,Centos下python 对syslog重写进行日志记录

在Linux 环境下,python自带一个syslog的模块可以进行日志记录。python可以利用logging模块来重写syslog,这样就可以自定义写入文件的文件名。如果不做配置则直接写入到/var/log/message文件里。

首先先写log.py,代码如下:

importosimportsysimportsyslogimporttypesimporttracebackfrom datetime importdatetimeimportlogging as _logging

LOGFILE_ENABLE = True

classDummyLogger(object):defdebug(self, msg):pass

definfo(self, msg):pass

defwarning(self, msg):pass

deferror(self, msg):pass

classCombinedLogger(object):def __init__(self, id):

self.id=idifLOGFILE_ENABLE:

self.logger=_logging.getLogger(id)else:

self.logger=DummyLogger()defdebug(self, msg):

syslog.openlog(self.id, syslog.LOG_PID)

syslog.syslog(syslog.LOG_DEBUG, msg)pass

definfo(self, msg):try:

syslog.openlog(self.id, syslog.LOG_PID)

syslog.syslog(syslog.LOG_INFO, msg)exceptTypeError:print 'Unicode Error', type(msg), msgprint msg.encode('utf8')

self.logger.info(msg)pass

defwarning(self, msg):

syslog.openlog(self.id, syslog.LOG_PID)

syslog.syslog(syslog.LOG_WARNING, msg)pass

deferror(self, e):

syslog.openlog(self.id, syslog.LOG_PID)

ex, msg, stack=sys.exc_info()

text= ['Exception: %s, Message: %s' % (ex, msg)] +traceback.format_tb(stack)

syslog.syslog(syslog.LOG_ERR,'\n'.join(text))pass

classLoggerWrapper(object):defgetLogger(self, id):returnCombinedLogger(id)

logging= LoggerWrapper()

测试代码write_log.py如下:

importsyslogimportdatetimeimportloggingimporttimeimportthreadingimportosfrom log importlogging as self_loggingimportconfig

logger= self_logging.getLogger('python')defwrite_log_func():

now =datetime.datetime.now()

logger.info("It's time now: {}".format(now))defwrite_sign_log(index):

path= '/home/xxx/test.log'logging.basicConfig(filename=path, filemode='w')

logging.info("row:{}".format(index))if __name__ == '__main__':

i= 1

whileTrue:

t_list=[]

tt_list=[]for i in xrange(40000):

t= threading.Thread(target=write_log_func, args=())

t_list.append(t)

for t1 int_list:

t1.start()

for t2 int_list:

t2.join()

print 'log is written'time.sleep(40)

最后对/etc/syslog.conf进行配置

!python*.* /var/log/python.log

指定测试脚本中的日志写入到那个目录文件下。

可能会遇到得错误:

1、日志丢失,在写入日志时,只有一部分日志写进去了,查看meessage文件,发现有这样得错误:

imuxsock lost 47 messages from pid 2002 due to rate-limiting

imuxsock begins to drop messages from pid 2002 due to rate-limiting

这种情况出现说明syslog的配置记录超过最大值,修改syslog的配置文件来解决。

修改配置文件/etc/syslog.config,在其中对以下两个参数进行设置

echo '$SystemLogRateLimitInterval 60' >> /etc/rsyslog.conf

echo'$SystemLogRateLimitBurst 3000' >> /etc/rsyslog.conf

其中的数字根据实际情况可以做改变。第一条:为设定的限制的时间间隔大小,第二条:为在设定的限制的时间间隔内,最多输出的log信息数量。

上面的配置表示在每一个60s时间间隔内,如果超过3000条的log信息将会被去丢掉。如果不希望有丢失则直接可设置下面这个参数即可:

$SystemLogRateLimitInterval 0

设置成功后,重启rsyslog即可service rsyslog restart 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值