python的logging的重写

(1)code1.py
'''
import logging
logging.basicConfig(filename='sample.log',level=logging.DEBUG,format = '%(asctime)s:%(name)s:%(message)s')
def add(x,y):
    return x + y
def subtract(x,y):
    return x - y
def multiply(x,y):
    return x * y
def devide(x, y):
    return x / y
num_1 = 10
num_2 = 5
add_result = add(num_1, num_2)
logging.debug('Add:{} + {} = {}'.format(num_1,num_2,add_result))
sub_result = subtract(num_1,num_2)
logging.debug("Sub: {} -{} = {}".format(num_1,num_2,sub_result))
mul_result = multiply(num_1,num_2)
logging.debug('Multip : {} * {} = {}'.format(num_1,num_2,mul_result))
devi_result = devide(num_1,num_2)
logging.debug('Devi : {} / {} = {}'.format(num_1 , num_2,devi_result))
'''
(2)code2对应真实的py文件名称为employee.py
import logging
logging.getLogger().setLevel(logging.INFO)
logging.basicConfig(level = logging.INFO,
                    format='%(levelname)s:%(name)s:%(message)s')
class Employee:
    def __init__(self,first,last):
        self.first = first
        self.last = last
        logging.info('Created Employee: {}-{}'.format(self.fullname,self.email))
    @property
    def email(self):
        return '{}.{}@email.com'.format(self.first,self.last)
    @property
    def fullname(self):
        return '{}{}'.format(self.first,self.last)

a=Employee('Jack',222)
print(a.email)
print(a.fullname)

code(1).py中的log级别为log.DEBUG,code(2).py中的级别为log.INFO,按上述代码分别运行,在同目录下将分别产生各自filename名称的log,但是一旦将code(1).py中中加入import employee(code(2)真实的py文件名)后,即导入了code2文件后,运行code1,将不会产生code(1).py中的log级别为log.DEBUG对应的日志文件,而会产生code(2).py中的级别为log.INFO对应的日志文件,因为先导入code(2),INFO优先级比DEBUG高,当他们在同一个root下的时候,会输出优先级高的!!!
参考log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
方法,将code(2)中的logging改成logger:
情况1:只输出先导入的那个文件的logging信息,下面只会输出import employee中的employee.log的日志;

import logging
import employee
logging.basicConfig(filename='sample.log',level=logging.DEBUG,format = '%(asctime)s:%(name)s:%(message)s')
def add(x,y):
    return x + y
def subtract(x,y):
    return x - y
def multiply(x,y):
    return x * y
def devide(x, y):
    return x / y
num_1 = 10
num_2 = 5
add_result = add(num_1, num_2)
logging.debug('Add:{} + {} = {}'.format(num_1,num_2,add_result))
sub_result = subtract(num_1,num_2)
logging.debug("Sub: {} -{} = {}".format(num_1,num_2,sub_result))
mul_result = multiply(num_1,num_2)
logging.debug('Multip : {} * {} = {}'.format(num_1,num_2,mul_result))
devi_result = devide(num_1,num_2)
logging.debug('Devi : {} / {} = {}'.format(num_1 , num_2,devi_result))

**当前employee.log输出:**
INFO:root:Created Employee: JackChen-Jack.Chen@email.com
/
情况2,通过Handler改写employee.py文件,employee本身输出:
**当前employee.log输出:**
INFO:__main__:Created Employee: JackChen-Jack.Chen@email.com
与上述相比。root变为了__name__,是通过logger = logging.getLogger(__name__)实现的;
修改后的py文件为:
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(levelname)s:%(name)s:%(message)s')
file_handler = logging.FileHandler('employee.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# import employee
# logging.basicConfig(filename='sample.log',level=logging.DEBUG,format = '%(asctime)s:%(name)s:%(message)s')#注释掉,不需要
class Employee:
    def __init__(self,first,last):
        self.first = first
        self.last = last
        logger.info('Created Employee: {}-{}'.format(self.fullname,self.email))#此处logging改为logger
    @property
    def email(self):
        return '{}.{}@email.com'.format(self.first,self.last)
    @property
    def fullname(self):
        return '{}{}'.format(self.first,self.last)

a=Employee('Jack','Chen')

/
情况3,针对导入了修改后的employee.py文件的另一个文件,其输出情况,会输出两个log,一个是当前文件的sample.log,另一个是导入文件对应的后的employee.log,分别输出如下:
当前主文件的sample.log的输出:
2018-07-14 11:35:35,091:root:Add:10 + 5 = 15
2018-07-14 11:35:35,091:root:Sub: 10 -5 = 5
2018-07-14 11:35:35,091:root:Multip : 10 * 5 = 50
2018-07-14 11:35:35,092:root:Devi : 10 / 5 = 2.0
注意其用户为root;
导入employee.py后employee.log输出:
INFO:employee:Created Employee: JackChen-Jack.Chen@email.com
INFO:employee:Created Employee: JackChen-Jack.Chen@email.com
注意其用户为employee;
当前的脚本如下:
import logging
import employee
logging.basicConfig(filename='sample.log',level=logging.DEBUG,format = '%(asctime)s:%(name)s:%(message)s')
def add(x,y):
    return x + y
def subtract(x,y):
    return x - y
def multiply(x,y):
    return x * y
def devide(x, y):
    return x / y
num_1 = 10
num_2 = 5
add_result = add(num_1, num_2)
logging.debug('Add:{} + {} = {}'.format(num_1,num_2,add_result))
sub_result = subtract(num_1,num_2)
logging.debug("Sub: {} -{} = {}".format(num_1,num_2,sub_result))
mul_result = multiply(num_1,num_2)
logging.debug('Multip : {} * {} = {}'.format(num_1,num_2,mul_result))
devi_result = devide(num_1,num_2)
logging.debug('Devi : {} / {} = {}'.format(num_1 , num_2,devi_result))

#log不输出:
1)logging level不匹配;
2)logging formmatter不匹配
def devide(x, y):
    try :
        result =  x / y
    except ZeroDivisionError:
        logger.error('Tried to divide by zero')
    else:
        return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值