錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務技術文章
python日志記錄模塊內(nèi)容介紹

作者: 佚名  日期:2017-05-01 07:16:24   來源: 本站整理

 python 打印對象的所有屬性值:
 def prn_obj(obj):
 print '\n'.join(['%s:%s' % item for item in obj.__dict__.items()])
Python logger對象屬性(由上述函數(shù)獲取的)
 name:get_data
parent:<logging.RootLogger instance at 0x1d8bd88>
handlers:[<logging.FileHandler instance at 0x21bcc68>]
level:10
disabled:1  #當前的logger是否有效,默認為0
manager:<logging.Manager instance at 0x1d8bea8>
propagate:0  #是否將本級日志
filters:[]
 
部分日志無法輸出
File:logger.conf
  
[formatters]
keys=default
 
[formatter_default]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
class=logging.Formatter
 
[handlers]
keys=console, error_file
 
[handler_console]
class=logging.StreamHandler
formatter=default
args=tuple()
 
[handler_error_file]
class=logging.FileHandler
level=INFO
formatter=default
args=("logger.log", "a")
 
[loggers]
keys=root
 
[logger_root]
level=DEBUG
formatter=default
handlers=console,error_file
File:logger.py
  
#!/bin/env python
 
import logging
from logging.config import logging
 
class Test(object):
 """docstring for Test"""
 def __init__(self):
  logging.config.fileConfig("logger.conf")
  self.logger = logging.getLogger(__name__)
 
 def test_func(self):
  self.logger.error('test_func function')
 
class Worker(object):
 """docstring for Worker"""
 def __init__(self):
  logging.config.fileConfig("logger.conf")
  self.logger = logging.getLogger(__name__)
 
  data_logger = logging.getLogger('data')
  handler = logging.FileHandler('./data.log')
  fmt = logging.Formatter('%(asctime)s|%(message)s')
  handler.setFormatter(fmt)
  data_logger.addHandler(handler)
  data_logger.setLevel(logging.DEBUG)
  self.data_logger = data_logger
 
 def test_logger(self):
  self.data_logger.error("test_logger function")
  instance = Test()
  self.data_logger.error("test_logger output")
  instance.test_func()
 
 
def main():
 worker = Worker()
 worker.test_logger()
 
if __name__ == '__main__':
 main()
 
問題一:測試過程中,只能打印出test_logger function一條語句
 問題二:明明只在data_logger中打印出語句,但是logger的日志中也出現(xiàn)了相關的日志。
問題一解決方案:
利用python -m pdb logger.py 語句對腳本進行調(diào)試發(fā)現(xiàn),在執(zhí)行instance = Test()語句后,通過print '\n'.join(['%s:%s' % item for item in self.data_logger.__dict__.items()])調(diào)試語句看到data_logger的disable屬性值由0變成了True,此時logger的對應屬性也發(fā)生了相同的變化。這種變化導致了logger對象停止記錄日志。參考python logging模塊的相關手冊發(fā)現(xiàn)“The fileConfig() function takes a default parameter, disable_existing_loggers, which defaults to True for reasons of backward compatibility. This may or may not be what you want, since it will cause any loggers existing before the fileConfig() call to be disabled unless they (or an ancestor) are explicitly named in the configuration.” 的說明,即調(diào)用fileconfig()函數(shù)會將之前存在的所有l(wèi)ogger禁用。在python 2.7版本該fileConfig()函數(shù)添加了一個參數(shù),logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True),可以顯式的將disable_existing_loggers設置為FALSE來避免將原有的logger禁用。將上述代碼中的Test類中的logging.config.fileConfig函數(shù)改成logging.config.fileConfig("./logger.conf", disable_existing_loggers=0)就可以解決問題。 不過該代碼中由于位于同一程序內(nèi),可以直接用logging.getLogger(LOGGOR_NAME)函數(shù)引用同一個logger,不用再調(diào)用logging.config.fileConfig函數(shù)重新加載一遍了。
問題二解決方案:
logger對象有個屬性propagate,如果這個屬性為True,就會將要輸出的信息推送給該logger的所有上級logger,這些上級logger所對應的handlers就會把接收到的信息打印到關聯(lián)的日志中。logger.conf配置文件中配置了相關的root logger的屬性,這個root logger就是默認的logger日志。
 修改后的如下:
File:logger.conf
  
[formatters]
keys=default, data
 
[formatter_default]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
class=logging.Formatter
 
[formatter_data]
format=%(asctime)s|%(message)s
class=logging.Formatter
 
[handlers]
keys=console, error_file, data_file
 
[handler_console]
class=logging.StreamHandler
formatter=default
args=tuple()
 
[handler_error_file]
class=logging.FileHandler
level=INFO
formatter=default
args=("logger.log", "a")



熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯(lián)想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數(shù)和判...
  • IIS 8 開啟 GZIP壓縮來減少網(wǎng)絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數(shù)字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統(tǒng)快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯(lián)系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區(qū)域: 遼寧錦州市區(qū)
    主要業(yè)務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網(wǎng)設置,IT服務外包,局域網(wǎng)組建,ADSL共享上網(wǎng),路由器設置,數(shù)據(jù)恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    主站蜘蛛池模板: 无码人妻丰满熟妇精品区| 无码av中文一区二区三区桃花岛| 亚洲AV无码国产精品永久一区| 亚洲精品无码久久毛片波多野吉衣 | 国产亚洲精品无码成人| 亚洲AV无码码潮喷在线观看| 亚洲精品GV天堂无码男同| 亚洲AⅤ无码一区二区三区在线 | 亚洲无码在线播放| 婷婷四虎东京热无码群交双飞视频 | 人妻无码一区二区三区AV| 欧日韩国产无码专区| 亚洲性无码AV中文字幕| 亚洲ⅴ国产v天堂a无码二区| 内射人妻无套中出无码| 亚洲国产精品无码久久| 日韩亚洲AV无码一区二区不卡| YW尤物AV无码国产在线观看| 成年男人裸j照无遮挡无码| 久久精品aⅴ无码中文字字幕重口| 人妻无码一区二区三区| 少妇人妻av无码专区| 亚洲av永久中文无码精品综合 | 无码不卡中文字幕av| 亚洲日韩精品无码AV海量| 无码人妻精品一区二区三区在线| 久久国产三级无码一区二区| 无码一区二区三区在线| 无码日韩人妻精品久久| 67194成是人免费无码| 久久亚洲AV成人无码国产最大| 精品无码一区二区三区在线| 亚洲一区二区三区国产精品无码 | 亚洲aⅴ无码专区在线观看| 精品日韩亚洲AV无码| 日韩网红少妇无码视频香港| 无码少妇一区二区| 2019亚洲午夜无码天堂| 影音先锋中文无码一区| 久久亚洲精品无码gv| 狠狠爱无码一区二区三区|