Add Windows Event Log handler
The Python built-in logging module already provides a Windows Event Log handler. This change ensures that oslo.log exposes it. Change-Id: I287260b5046c88c433dfa66064da14faf15610e0 Implements: blueprint windows-event-log
This commit is contained in:
parent
5cd02483c6
commit
74e8e48a95
@ -108,6 +108,9 @@ generic_log_opts = [
|
||||
default=False,
|
||||
help='Log output to standard error. '
|
||||
+ _IGNORE_MESSAGE),
|
||||
cfg.BoolOpt('use_eventlog',
|
||||
default=False,
|
||||
help='Log output to Windows Event Log.'),
|
||||
]
|
||||
|
||||
log_opts = [
|
||||
|
@ -361,6 +361,14 @@ def _setup_logging_from_conf(conf, project, version):
|
||||
journal = handlers.OSJournalHandler()
|
||||
log_root.addHandler(journal)
|
||||
|
||||
if conf.use_eventlog:
|
||||
if platform.system() == 'Windows':
|
||||
eventlog = logging.handlers.NTEventLogHandler(project)
|
||||
log_root.addHandler(eventlog)
|
||||
else:
|
||||
raise RuntimeError(_("Windows Event Log is not available on this "
|
||||
"platform."))
|
||||
|
||||
# if None of the above are True, then fall back to standard out
|
||||
if not logpath and not conf.use_stderr and not conf.use_journal:
|
||||
# pass sys.stdout as a positional argument
|
||||
|
19
oslo_log/tests/unit/test_log.py
Normal file → Executable file
19
oslo_log/tests/unit/test_log.py
Normal file → Executable file
@ -140,6 +140,25 @@ class CommonLoggerTestsMixIn(object):
|
||||
'info', 'debug', 'log'):
|
||||
self.assertRaises(AttributeError, getattr, log, func)
|
||||
|
||||
@mock.patch('platform.system', return_value='Linux')
|
||||
def test_eventlog_missing(self, platform_mock):
|
||||
self.config(use_eventlog=True)
|
||||
self.assertRaises(RuntimeError,
|
||||
log._setup_logging_from_conf,
|
||||
self.CONF,
|
||||
'test',
|
||||
'test')
|
||||
|
||||
@mock.patch('platform.system', return_value='Windows')
|
||||
@mock.patch('logging.handlers.NTEventLogHandler')
|
||||
@mock.patch('oslo_log.log.getLogger')
|
||||
def test_eventlog(self, loggers_mock, handler_mock, platform_mock):
|
||||
self.config(use_eventlog=True)
|
||||
log._setup_logging_from_conf(self.CONF, 'test', 'test')
|
||||
handler_mock.assert_called_once_with('test')
|
||||
mock_logger = loggers_mock.return_value.logger
|
||||
mock_logger.addHandler.assert_any_call(handler_mock.return_value)
|
||||
|
||||
|
||||
class LoggerTestCase(CommonLoggerTestsMixIn, test_base.BaseTestCase):
|
||||
def setUp(self):
|
||||
|
@ -0,0 +1,4 @@
|
||||
features:
|
||||
- |
|
||||
Added Windows EventLog functionality to oslo.log. Set use_eventlog to true
|
||||
in the service's configuration file to use it.
|
Loading…
Reference in New Issue
Block a user