V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
slysly759
V2EX  ›  Python

关于 python logging 模块的请教~

  •  
  •   slysly759 · 2016-08-22 15:57:00 +08:00 · 3084 次点击
    这是一个创建于 3006 天前的主题,其中的信息可能已经有所发展或是发生改变。

    没错很傻比我又来问问题啦~

    目前写的一个小工具是将 excel 杂乱的数据处理后导入到 oracle ,刚刚该 PM 装了环境在测 发现报错,然后排查是中文编码问题,现在 PM 要求 将那些运行的 print 和错误都要记录到 log 里面方便日后排查。 本人是 python 的小菜鸟,廖雪峰的 [错误处理] 一章仅仅讲了一个 try except 但是我咋知道那些 except 呢 网络上其他的 log 都只是说了 log 的几种类型 0.0 我需要记录所有可能的返回错误信息啊 然后程序有 print 可否一起 log 不想在 print 后面傻逼的跟上 xxx.log()还请高人指点一二~

    Thx in advance.

    Any advice would be appreciated.

    14 条回复    2016-08-23 13:21:02 +08:00
    awanabe
        1
    awanabe  
       2016-08-22 16:13:54 +08:00
    说到重点的地方标点全无, 没法理解 LZ 语言的魅力, 歧义多多
    爱莫能助
    clino
        2
    clino  
       2016-08-22 16:27:10 +08:00
    意识流的狂乱表达是一种艺术来着
    prefere
        3
    prefere  
       2016-08-22 16:28:42 +08:00   ❤️ 1
    捕获异常
    <pre>
    except Exception,e:
    print Exception,":",e
    </pre>
    logging 设置相应等级后,会自动输出日志,用不着 print 。
    onlyice
        4
    onlyice  
       2016-08-22 16:28:53 +08:00   ❤️ 2
    按理说这种帖子应该让它沉下去。。太水了。。

    > 但是我咋知道那些 except 呢
    那别人又咋知道是哪些 except 呢?看看谁会抛 exception 啊

    > 网络上其他的 log 都只是说了 log 的几种类型 0.0 我需要记录所有可能的返回错误信息啊
    网络难道没有教你多看看文档。。 https://docs.python.org/2/howto/logging-cookbook.html
    关键词: logger.exception() / logger.error('your description', exe_info=1)

    > 然后程序有 print 可否一起 log 不想在 print 后面傻逼的跟上 xxx.log(
    看文档。。关键词: logging.StreamHandler()
    samcode
        6
    samcode  
       2016-08-22 16:59:25 +08:00
    stdout = sys.stdout
    class MyWriter(object):
    def __init__(self):
    self.path = 'log.txt'

    def write(self, s):
    stdout.write(s)
    open(self.path, "a").write(s+'\n')

    sys.stdout = MyWriter()
    slysly759
        7
    slysly759  
    OP
       2016-08-22 17:17:07 +08:00
    @prefere 不好意思有些着急了~
    1. except 后面的容错处理,当我不清楚有多少的时候, log 可否打印出来呢,比如除零错误,类型错误, IOerror unicodeerror 等等,可否解决捏。
    2. 我理解设置 info error 等日志等级,我很好奇这个轮子咋知道函数返回的错误等级捏,并且正确记录呢?

    万分感谢你能在百忙之中抽空看我的问题~
    slysly759
        8
    slysly759  
    OP
       2016-08-22 17:20:02 +08:00
    @onlyice thx 是我太着急了~ 我会好好看你给的文档的~
    rale
        9
    rale  
       2016-08-22 19:07:19 +08:00   ❤️ 1
    当错误出现的时候,或许你还想打印调用栈的信息,建议先 from traceback import format_exc
    slysly759
        10
    slysly759  
    OP
       2016-08-22 21:38:17 +08:00
    @rale thx 感谢
    xiahei
        11
    xiahei  
       2016-08-22 21:52:40 +08:00
    多读书可破。
    报错信息。

    令,熟读 #5 楼的文章。
    eloah
        12
    eloah  
       2016-08-22 23:00:50 +08:00 via Android
    个人也觉得很神奇, log 似乎是一个静态方法,运行在整个进程(线程?)内
    wyntergreg
        13
    wyntergreg  
       2016-08-23 08:46:04 +08:00
    logger = logging.getLogger("file.log")

    except Exception:

    excpt = traceback.format_exc()

    # print excpt

    logger.error( '...')
    mckelvin
        14
    mckelvin  
       2016-08-23 13:21:02 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1161 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:00 · PVG 07:00 · LAX 15:00 · JFK 18:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.