mirror of
https://github.com/marcus-alicia/iRedAdmin-Pro-SQL.git
synced 2026-05-26 07:08:10 +00:00
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
import sys
|
|
import logging
|
|
import traceback
|
|
from logging.handlers import SysLogHandler
|
|
|
|
import web
|
|
from libs import iredutils
|
|
import settings
|
|
|
|
session = web.config.get("_session")
|
|
|
|
# Set application name.
|
|
logger = logging.getLogger("iredadmin")
|
|
|
|
# Set log level.
|
|
_log_level = getattr(logging, str(settings.LOG_LEVEL).upper())
|
|
logger.setLevel(_log_level)
|
|
|
|
if settings.LOG_TARGET == "stdout":
|
|
_handler = logging.StreamHandler()
|
|
_formatter = logging.Formatter("%(message)s (%(pathname)s, L%(lineno)d)")
|
|
else:
|
|
# Defaults to "syslog":
|
|
_facility = getattr(SysLogHandler, "LOG_" + settings.SYSLOG_FACILITY.upper())
|
|
_formatter = logging.Formatter("%(name)s %(message)s (%(pathname)s, L%(lineno)d)")
|
|
|
|
if settings.SYSLOG_SERVER.startswith("/"):
|
|
# Log to a local socket
|
|
_handler = SysLogHandler(address=settings.SYSLOG_SERVER, facility=_facility)
|
|
else:
|
|
# Log to a network address
|
|
_server = (settings.SYSLOG_SERVER, settings.SYSLOG_PORT)
|
|
_handler = SysLogHandler(address=_server, facility=_facility)
|
|
|
|
_handler.setFormatter(_formatter)
|
|
logger.addHandler(_handler)
|
|
|
|
|
|
def log_traceback():
|
|
exc_type, exc_value, exc_traceback = sys.exc_info()
|
|
msg = traceback.format_exception(exc_type, exc_value, exc_traceback)
|
|
logger.error(msg)
|
|
|
|
|
|
def log_activity(msg, admin="", domain="", username="", event="", loglevel="info"):
|
|
try:
|
|
if not admin:
|
|
admin = session.get("username")
|
|
|
|
if username and not domain:
|
|
domain = username.split("@", 1)[-1]
|
|
|
|
msg = str(msg)
|
|
|
|
# Prepend '[API]' in log message
|
|
try:
|
|
if web.ctx.fullpath.startswith("/api/"):
|
|
msg = "[API] " + msg
|
|
except:
|
|
pass
|
|
|
|
web.conn_iredadmin.insert(
|
|
"log",
|
|
admin=str(admin),
|
|
domain=str(domain),
|
|
username=str(username),
|
|
loglevel=str(loglevel),
|
|
event=str(event),
|
|
msg=msg,
|
|
ip=web.ctx.ip,
|
|
timestamp=iredutils.get_gmttime(),
|
|
)
|
|
|
|
if loglevel == "info":
|
|
logger.info("{0} admin={1}, domain={2}, username={3}, event={4}, "
|
|
"ip={5}".format(msg, admin, domain, username, event, web.ctx.ip))
|
|
elif loglevel == "error":
|
|
logger.error("{0} admin={1}, domain={2}, username={3}, event={4}, "
|
|
"ip={5}".format(msg, admin, domain, username, event, web.ctx.ip))
|
|
except:
|
|
pass
|
|
|
|
return None
|