python
  • apscheduler
  • 2013-05-26 285 views 4 likes 
    4

    我設置了APScheduler通過cron時間表運行每秒(需要/需要的類型)。現在我有記錄器發送一切到控制檯。Python APScheduler如何禁用日誌記錄

    如果不是因爲日誌記錄對我正在處理的事情非常重要,它會沒事的。但是,我需要記錄。我不想要的是APScheduler的信息記錄。像這樣的東西:

    INFO  at 2013-05-26 13:05:06,007 : Job "loadavg.run (trigger: cron[year='*', month='*', day='*', week='*', day_of_week='*', hour='*', minute='*', second='*'], next run at: 2013-05-26 13:05:06)" executed successfully 
    INFO  at 2013-05-26 13:05:06,008 : Running job "cpu.run (trigger: cron[year='*', month='*', day='*', week='*', day_of_week='*', hour='*', minute='*', second='*'], next run at: 2013-05-26 13:05:07)" (scheduled at 2013-05-26 13:05:06)

    我有這個在我的代碼後,我添加cron作業:

    logging.getLogger("apscheduler.scheduler").setLevel(logging.DEBUG)

    這裏沒有任何,因爲據我所知,對於APScheduler配置選項來指定日誌信息,無論是。

    我知道我可以指定記錄器的級別爲ERROR或其他東西,但是當它設置爲INFO時,我不希望所有這些(看起來沒用的)信息都記錄下來。

    回答

    2

    我會先假設你正在使用APScheduler爲類似cron的行爲,因爲如果你真的通過cron(8)運行的每一秒,它會

    1. 弄巧成拙,因爲APScheduler claims這是一個「更好替代外部運行cron腳本......」
    2. 也許捶打系統什麼可怕

    即規定外,之美是它允許您的應用程序在不觸及其代碼的情況下廣泛控制庫的日誌記錄行爲。不幸的是,它首先使logging有點難以理解。

    由於INFO級報告的東西,你不感興趣,你可以:

    class NoRunningFilter(logging.Filter): 
        def filter(self, record): 
         return not record.msg.startswith('Running job') 
    
    my_filter = NoRunningFilter() 
    logging.getLogger("apscheduler.scheduler").addFilter(my_filter) 
    

    這些都可以以動態方式logging configuration file規定,但這是一個多一點的魔法比我以往任何時候都得到進入。

    +0

    是的,我使用APS作爲類似cron的調度程序。感謝您的過濾代碼,我不得不稍微修改它(

    return
    而不是
    return not record.msg.startswith('Running job')
    )以不吐出任何東西,但它對我來說足夠好用了。謝謝! –

    +0

    使用'return'是錯誤的,因爲它返回'None',這在Python中恰好是false-ish。更好更明確的是「返回假」。參見[PEP-20](http://www.python.org/dev/peps/pep-0020/)以獲得進一步的啓示。 – msw

    3

    你可以試試這個代碼:

    logging.getLogger('apscheduler.executors.default').propagate = False 
    
    +0

    無論如何都會打印DEBUG消息,因此需要將記錄器級別設置爲INFO。 –

    0

    這裏是我的代碼,它沒有抱怨缺少處理程序的工作原理:

    scheduler = BackgroundScheduler() 
    scheduler.start() 
    scheduler.add_job(every_minute, trigger='cron', second=0, id='every_minute') 
    logging.getLogger('apscheduler.executors.default').setLevel(logging.WARNING) 
    

    它不會禁用調度完全記錄,但它確實刪除信息OP想要擺脫的消息。

    相關問題