2011-11-10 81 views
1

我試圖使用方法:如何覆蓋python cli模塊中的默認「日誌文件」?

http://packages.python.org/pyCLI/#cli-log-logging-applications

特別是cli.log.LoggingApp自動給你-l --logfile選項。覆蓋默認logfile屬性的最佳方法是什麼?如果沒有提供-l,則默認爲None,輸出爲stdout

我想將它默認爲一個硬編碼的本地文件名。

更新: 我想根據可選的--dir = rundir參數的值設置日誌文件位置。我認爲這是更多的參與,因爲你需要解析參數來知道你想用來創建日誌文件名稱的「dir」的值。我認爲最好的解決方法是運行最初的預運行和手動設置腳本,並自己操作記錄器設置。

+0

只是有一個想法...也許解決的辦法是有一個cli.app.CommandLineApp解析參數,然後將其傳遞到其中一個日誌記錄應用程序。如果有人知道我的帖子更合適的論壇,請在那指向我。我對這個模塊很感興趣。 – mathtick

回答

1

可以通過提供一個logfile kwarg給裝飾默認文件名:

import cli.log 


@cli.log.LoggingApp(logfile='default.log') 
def foo(app): 
    print "I'm in the app!" 
    app.log.error("Things are seriously wrong!") 


if __name__ == "__main__": 
    foo.run() 

唯一的問題(我可以看到,至少)在做這個,是生成的幫助是錯誤的。它仍然聲明默認值是stdout(從版本2.0.2開始)。看起來幫助文本在LoggingMixin類中是硬編碼的。

+0

謝謝。這可能是最好的工作,雖然它會很難做到我真正想要的東西......我意識到我原來的帖子並不清楚。我試圖做的是使日誌文件運行在默認位置,如可選參數 - 即--dir = rundir。這是在cli應用程序的盲點,因爲「dir」只會在argparser運行後纔可用,我認爲您需要在記錄器安裝之前設置日誌文件名稱。我會嘗試更新我的OP。 – mathtick

0

這並不完全正常工作:在命令行應用程序內定義日誌應用程序並在其中指定日誌文件。

問題是你沒有得到詳細/安靜的東西推動。

@cli.app.CommandLineApp(description=globals()["__doc__"]) 
def main(app): 
    logfile = app.params.logfile 
    if logfile is None: 
     logfile = "mylog.log" 
    @cli.log.LoggingApp(description=globals()["__doc__"], logfile=logfile) 
    def main_with_log(app): 
     print("Printing log output to <%s>." % app.params.logfile 
main.add_param("-d", "--dir", dest="dirname", default="./", help = "no help") 
main.add_param("-l", "--logfile", default=None, help="log to file.")