OfflineIMAP / offlineimap

Read/sync your IMAP mailboxes (python2) [LEGACY: move to offlineimap3]
http://www.offlineimap.org
Other
1.78k stars 361 forks source link

-u syslog doesn't work on macOS #553

Open rbgarga opened 6 years ago

rbgarga commented 6 years ago

General informations

Configuration file offlineimaprc

[general]
accounts = Personal
maxsyncaccounts = 1
ui = Basic

[mbnames]
enabled = yes
filename = ~/Mail/muttrc.mailboxes
header = "mailboxes "
peritem = "+%(accountname)s/%(foldername)s"
sep = " "
footer = "\n"

[Account Personal]
localrepository = LocalPersonal
remoterepository = RemotePersonal
autorefresh = 5
quick = 5

[Repository LocalPersonal]
type = GmailMaildir
localfolders = ~/Mail/Personal

[Repository RemotePersonal]
type = Gmail
remoteuser = xxxxxxxxxx@gmail.com
remotepassfile = ~/.offlineimap-personal
sslcacertfile = /usr/local/etc/openssl/cert.pem
maxconnections = 2

Logs, error

Traceback (most recent call last):
  File "/usr/local/Cellar/offlineimap/7.2.0/libexec/offlineimap.py", line 22, in <module>
    oi.run()
  File "/usr/local/Cellar/offlineimap/7.2.0/libexec/offlineimap/init.py", line 89, in run
    options, args = self.__parse_cmd_options()
  File "/usr/local/Cellar/offlineimap/7.2.0/libexec/offlineimap/init.py", line 269, in __parse_cmd_options
    self.ui = UI_LIST[ui_type.lower()](config)
  File "/usr/local/Cellar/offlineimap/7.2.0/libexec/offlineimap/ui/Noninteractive.py", line 37, in __init__
    return super(Syslog, self).__init__(config, loglevel)
  File "/usr/local/Cellar/offlineimap/7.2.0/libexec/offlineimap/ui/UIBase.py", line 75, in __init__
    self._log_con_handler = self.setup_consolehandler()
  File "/usr/local/Cellar/offlineimap/7.2.0/libexec/offlineimap/ui/Noninteractive.py", line 41, in setup_consolehandler
    ch = logging.handlers.SysLogHandler('/dev/log')
  File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/handlers.py", line 761, in __init__
    self._connect_unixsocket(address)
  File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/handlers.py", line 804, in _connect_unixsocket
    self.socket.connect(address)
  File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 2] No such file or directory

Steps to reproduce the error

macOS doesn't provide /dev/log. I see a socket under /var/log/syslog and maybe this is the same expected by offlinimap in this case.

chris001 commented 6 years ago

We should use the python syslog module here, for compatibility on all Linux MacOS, every OS:

import syslog
def main():
  syslog.syslog(syslog.LOG_INFO, "Everything is working OK.")
  syslog.syslog(syslog.LOG_ERR, "This is logged at the error level")

if __name__ == "__main__":
  main()
cbcoutinho commented 4 years ago

I recently switched over to mac and ran into this same problem. Maybe my reading of the docs is a bit naive, but from the section on the SysLogHandler link class, it looks the current offlineimap handler has a hard-coded path to the syslog socket (on Linux) as opposed to being based on a network address/port. The current hard-coded path is for Linux syslog daemons, which I think is why it fails on mac.

My simple PR #623 just put a runtime check into setup_sysloghandler to set the correct socket path based on the system, but maybe there's a better way to handle this?

nicolas33 commented 4 years ago

Patch applied.