This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: On Osx Monterey(12.x), Logging.handlers.SysLogHandler does not work
Type: behavior Stage:
Components: macOS Versions: Python 3.10, Python 3.9, Python 3.8, Python 3.7
process
Status: open Resolution: third party
Dependencies: Superseder:
Assigned To: Nosy List: ned.deily, pbloom, ronaldoussoren, vinay.sajip
Priority: normal Keywords:

Created on 2022-03-03 20:07 by pbloom, last changed 2022-04-11 14:59 by admin.

Messages (5)
msg414464 - (view) Author: Philip Bloom (pbloom) Date: 2022-03-03 20:07
Hello, don't file these often so apologies for any mistakes, trying to be good python citizen here.

Checked this on the python-list first, and others reported it as reproducible.

The issue is:
On Osx Monterey(12.x), Logging.handlers.SysLogHandler does not work.  It won't throw any error but the ASL/Console.App does not see any messages from it.  On OSX Big Sur (11.x) this works just fine with the exact same code.

I think I've cut this into a small example proof that can be run to demonstrate the issue.  If this is run and any of the substrings are searched for in Console.App when it is checking events, only the QQQ message from SysLog will show up.

Gonna work around it likely on our end, but hope this helps it get fixed for a future version.

---

import logging
from logging.handlers import SysLogHandler

root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
basic_datefmt = '%m/%d/%Y %I:%M:%S %p'

syslog_format = logging.Formatter(fmt='SetupCDNGUI: %(message)s', datefmt=basic_datefmt)

sys_handler = SysLogHandler(address='/var/run/syslog')
#sys_handler.encodePriority(SysLogHandler.LOG_USER, SysLogHandler.LOG_ALERT)
# Tried with the above, but didn't make a difference.  Neither did not defining the address and letting it go to local host.
sys_handler.setFormatter(syslog_format)
root_logger.addHandler(sys_handler)


# None of these will show up.
logging.critical("CCC This is a test critical")
logging.error("EEE This is a test error")
logging.info("III Still a test")


# Comparatively this sends a message received just fine
import syslog

syslog.openlog(logoption=syslog.LOG_PID, facility=syslog.LOG_USER)
syslog.syslog(syslog.LOG_NOTICE, 'QQQ test log')
msg414469 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2022-03-03 20:43
This is probably not a bug in python, but a change in system behaviour.

In particular, I've used the lsof command to check the open files for the syslogd proces on a macOS 10.13 and 12.2 system. On the former syslogd has /var/run/syslog open, on the latter it doesn't.

The feature to listen on this socket has been removed entirely, the 12.2 system no longer lists a "-bsd_in" option for syslogd in the manual page whereas it is both available and enabled by default on 10.13.

It might be possible to change the SyslogHandler to optionally use the syslog module to log, but I'm not sure it is worth doing this and that would definitely be a new feature.
msg414505 - (view) Author: Philip Bloom (pbloom) Date: 2022-03-04 03:10
I could certainly understand that.  It's a weird apple choice.  

If so, then it probably good to adjust https://docs.python.org/3/library/logging.handlers.html#sysloghandler since it still talks about it being expected.
msg414506 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2022-03-04 06:38
> If so, then it probably good to adjust ... since it still talks about it being expected.

Do you mean just adding a note to the effect that SysLogHandler won't work on macOS 12.2 because of changes to the syslog daemon on that platform?

IIRC using the syslog module was not an option at the time SysLogHandler was added, I think because of both thread-safety and lack-of-functionality issues.
msg414552 - (view) Author: Philip Bloom (pbloom) Date: 2022-03-04 21:59
> Do you mean just adding a note to the effect that SysLogHandler won't work on macOS 12.2 because of changes to the syslog daemon on that platform?

Yes or removing the specific guidance about OSX handling on it, mostly just to reduce folks coming to ask as they transition to it.  That way it comes off that you need to provide a Syslog consumer to use the handler/not to expect one to exist on the platform.  Hope I'm phrasing that understandably.
History
Date User Action Args
2022-04-11 14:59:56adminsetgithub: 91070
2022-03-04 21:59:33pbloomsetmessages: + msg414552
2022-03-04 06:38:19vinay.sajipsetmessages: + msg414506
2022-03-04 03:10:28pbloomsetmessages: + msg414505
2022-03-03 20:43:53ronaldoussorensettype: behavior
resolution: third party
messages: + msg414469
2022-03-03 20:09:25ned.deilysetnosy: + vinay.sajip
2022-03-03 20:07:57pbloomcreate