2014-03-13 35 views
1

我試圖弄清楚一些事情,但我在手冊上找不到它。 我想記錄一個日誌文件,它是重定向的標準輸出。 我初始化這樣的:sys.stdout.write到文件追加模式

self.stdout_path = os.getenv('LOGPATH','/var/log/logfile.log') 

和記錄器部分也很簡單:

sys.stdout.write(msg) 

它的工作原理很好(守護進程將記錄什麼,我需要的所有數據),但只有一個問題,當我重新啓動守護進程時,它會再次打開日誌文件進行寫入並清空它。我想知道如果我可以在附加模式下打開日誌文件,但我找不到如何執行此操作。我不確定是否可能(因爲stderr通常是一個特殊的塊設備,如同/ dev/tty)。保持目前的方式很好 - 重定向輸出 - 但如果這是不可避免的,我可以將它重寫爲os.write - 但我並不真的想要它。

編輯:

好吧,看來問題是因爲後臺程序庫。

Traceback (most recent call last): 
    File "/usr/local/bin/mambocollector", line 167, in <module> 
    mambo_runner = runner.DaemonRunner(mambo) 
    File "/usr/lib/python2.6/site-packages/daemon/runner.py", line 80, in __init__ 
    self.daemon_context.stdout = open(app.stdout_path, 'w+') 
    AttributeError: 'Mambo' object has no attribute 'stdout_path' 

所以看起來我需要重寫此 self.daemon_context.stdout =開放(app.stdout_path, 'W +')

  self.daemon_context.stdout = open(app.stdout_path, 'a+') 

回答

1

將這項工作?

sys.stdout = open(os.getenv('LOGPATH','/var/log/logfile.log'), 'a') 
+0

可悲的是:守護進程需要設置stdout_path,但它給了我一個主意 – banyek