mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 06:53:25 +00:00
logger: Add new create_logger abstraction to simplify logging.
This deduplicates a ton of Python logger-creation code to use a single standard implementation, so we can avoid copy-paste problems.
This commit is contained in:
committed by
Tim Abbott
parent
e092f1afff
commit
d9c9bfe7f6
@@ -14,21 +14,12 @@ from typing import Any, Callable, Dict, List, Optional, Text, Tuple, Type, Union
|
|||||||
|
|
||||||
from collections import defaultdict, OrderedDict
|
from collections import defaultdict, OrderedDict
|
||||||
from datetime import timedelta, datetime
|
from datetime import timedelta, datetime
|
||||||
import logging
|
from zerver.lib.logging_util import create_logger
|
||||||
import time
|
import time
|
||||||
|
|
||||||
## Logging setup ##
|
## Logging setup ##
|
||||||
|
|
||||||
log_format = '%(asctime)s %(levelname)-8s %(message)s'
|
logger = create_logger('zulip.management', settings.ANALYTICS_LOG_PATH, 'INFO')
|
||||||
logging.basicConfig(format=log_format)
|
|
||||||
|
|
||||||
formatter = logging.Formatter(log_format)
|
|
||||||
file_handler = logging.FileHandler(settings.ANALYTICS_LOG_PATH)
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
|
|
||||||
logger = logging.getLogger("zulip.management")
|
|
||||||
logger.setLevel(logging.INFO)
|
|
||||||
logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
# You can't subtract timedelta.max from a datetime, so use this instead
|
# You can't subtract timedelta.max from a datetime, so use this instead
|
||||||
TIMEDELTA_MAX = timedelta(days=365*1000)
|
TIMEDELTA_MAX = timedelta(days=365*1000)
|
||||||
|
|||||||
@@ -25,13 +25,14 @@ from django.core.handlers import base
|
|||||||
from functools import wraps
|
from functools import wraps
|
||||||
import base64
|
import base64
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
|
||||||
import ujson
|
import ujson
|
||||||
|
import logging
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from six.moves import zip, urllib
|
from six.moves import zip, urllib
|
||||||
|
|
||||||
from typing import Union, Any, Callable, Sequence, Dict, Optional, TypeVar, Text, cast
|
from typing import Union, Any, Callable, Sequence, Dict, Optional, TypeVar, Text, cast
|
||||||
from zerver.lib.str_utils import force_bytes
|
from zerver.lib.str_utils import force_bytes
|
||||||
|
from zerver.lib.logging_util import create_logger
|
||||||
|
|
||||||
# This is a hack to ensure that RemoteZulipServer always exists even
|
# This is a hack to ensure that RemoteZulipServer always exists even
|
||||||
# if Zilencer isn't enabled.
|
# if Zilencer isn't enabled.
|
||||||
@@ -46,16 +47,8 @@ FuncT = TypeVar('FuncT', bound=Callable[..., Any])
|
|||||||
ViewFuncT = TypeVar('ViewFuncT', bound=Callable[..., HttpResponse])
|
ViewFuncT = TypeVar('ViewFuncT', bound=Callable[..., HttpResponse])
|
||||||
|
|
||||||
## logger setup
|
## logger setup
|
||||||
log_format = "%(asctime)s: %(message)s"
|
webhook_logger = create_logger(
|
||||||
|
"zulip.zerver.webhooks", settings.API_KEY_ONLY_WEBHOOK_LOG_PATH, 'DEBUG')
|
||||||
formatter = logging.Formatter(log_format)
|
|
||||||
file_handler = logging.FileHandler(
|
|
||||||
settings.API_KEY_ONLY_WEBHOOK_LOG_PATH)
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
|
|
||||||
webhook_logger = logging.getLogger("zulip.zerver.webhooks")
|
|
||||||
webhook_logger.setLevel(logging.DEBUG)
|
|
||||||
webhook_logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
class _RespondAsynchronously(object):
|
class _RespondAsynchronously(object):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -19,19 +19,9 @@ from zerver.models import UserProfile, UserMessage, Recipient, Stream, \
|
|||||||
Realm
|
Realm
|
||||||
from zerver.context_processors import common_context
|
from zerver.context_processors import common_context
|
||||||
from zerver.lib.queue import queue_json_publish
|
from zerver.lib.queue import queue_json_publish
|
||||||
|
from zerver.lib.logging_util import create_logger
|
||||||
|
|
||||||
import logging
|
logger = create_logger(__name__, settings.DIGEST_LOG_PATH, 'DEBUG')
|
||||||
|
|
||||||
log_format = "%(asctime)s: %(message)s"
|
|
||||||
logging.basicConfig(format=log_format)
|
|
||||||
|
|
||||||
formatter = logging.Formatter(log_format)
|
|
||||||
file_handler = logging.FileHandler(settings.DIGEST_LOG_PATH)
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger.setLevel(logging.DEBUG)
|
|
||||||
logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
VALID_DIGEST_DAY = 1 # Tuesdays
|
VALID_DIGEST_DAY = 1 # Tuesdays
|
||||||
DIGEST_CUTOFF = 5
|
DIGEST_CUTOFF = 5
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import traceback
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from zerver.lib.str_utils import force_bytes
|
from zerver.lib.str_utils import force_bytes
|
||||||
|
from logging import Logger
|
||||||
|
|
||||||
# Adapted http://djangosnippets.org/snippets/2242/ by user s29 (October 25, 2010)
|
# Adapted http://djangosnippets.org/snippets/2242/ by user s29 (October 25, 2010)
|
||||||
|
|
||||||
@@ -89,3 +90,26 @@ def skip_site_packages_logs(record):
|
|||||||
if 'site-packages' in record.pathname:
|
if 'site-packages' in record.pathname:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def create_logger(name, log_file, log_level, log_format="%(asctime)s %(levelname)-8s %(message)s"):
|
||||||
|
# type: (str, str, str, str) -> Logger
|
||||||
|
"""Creates a named logger for use in logging content to a certain
|
||||||
|
file. A few notes:
|
||||||
|
|
||||||
|
* "name" is used in determining what gets logged to which files;
|
||||||
|
see "loggers" in zproject/settings.py for details. Don't use `""`
|
||||||
|
-- that's the root logger.
|
||||||
|
* "log_file" should be declared in zproject/settings.py in ZULIP_PATHS.
|
||||||
|
|
||||||
|
"""
|
||||||
|
logging.basicConfig(format=log_format)
|
||||||
|
logger = logging.getLogger(name)
|
||||||
|
logger.setLevel(getattr(logging, log_level))
|
||||||
|
|
||||||
|
if log_file:
|
||||||
|
formatter = logging.Formatter(log_format)
|
||||||
|
file_handler = logging.FileHandler(log_file)
|
||||||
|
file_handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(file_handler)
|
||||||
|
|
||||||
|
return logger
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import logging
|
from zerver.lib.logging_util import create_logger
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
@@ -11,16 +11,7 @@ from typing import DefaultDict, List, Union, Any
|
|||||||
from zerver.models import UserProfile, UserMessage, RealmAuditLog, \
|
from zerver.models import UserProfile, UserMessage, RealmAuditLog, \
|
||||||
Subscription, Message, Recipient, UserActivity, Realm
|
Subscription, Message, Recipient, UserActivity, Realm
|
||||||
|
|
||||||
log_format = "%(asctime)s: %(message)s"
|
logger = create_logger("zulip.soft_deactivation", settings.SOFT_DEACTIVATION_LOG_PATH, 'INFO')
|
||||||
logging.basicConfig(format=log_format)
|
|
||||||
|
|
||||||
formatter = logging.Formatter(log_format)
|
|
||||||
file_handler = logging.FileHandler(settings.SOFT_DEACTIVATION_LOG_PATH)
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
|
|
||||||
logger = logging.getLogger('zulip.soft_deactivation')
|
|
||||||
logger.setLevel(logging.INFO)
|
|
||||||
logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
def filter_by_subscription_history(
|
def filter_by_subscription_history(
|
||||||
user_profile, all_stream_messages, all_stream_subscription_logs):
|
user_profile, all_stream_messages, all_stream_subscription_logs):
|
||||||
|
|||||||
@@ -21,22 +21,13 @@ from zerver.lib.context_managers import lockfile
|
|||||||
from zerver.lib.send_email import send_email, EmailNotDeliveredException
|
from zerver.lib.send_email import send_email, EmailNotDeliveredException
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import logging
|
from zerver.lib.logging_util import create_logger
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from ujson import loads
|
from ujson import loads
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
## Setup ##
|
## Setup ##
|
||||||
log_format = "%(asctime)s: %(message)s"
|
logger = create_logger(__name__, settings.EMAIL_DELIVERER_LOG_PATH, 'DEBUG')
|
||||||
logging.basicConfig(format=log_format)
|
|
||||||
|
|
||||||
formatter = logging.Formatter(log_format)
|
|
||||||
file_handler = logging.FileHandler(settings.EMAIL_DELIVERER_LOG_PATH)
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger.setLevel(logging.DEBUG)
|
|
||||||
logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = """Deliver emails queued by various parts of Zulip
|
help = """Deliver emails queued by various parts of Zulip
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
|
||||||
|
|
||||||
from typing import Any, List
|
from typing import Any, List
|
||||||
|
|
||||||
@@ -9,19 +8,10 @@ from django.core.management.base import BaseCommand
|
|||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
|
|
||||||
from zerver.lib.digest import enqueue_emails, DIGEST_CUTOFF
|
from zerver.lib.digest import enqueue_emails, DIGEST_CUTOFF
|
||||||
|
from zerver.lib.logging_util import create_logger
|
||||||
|
|
||||||
## Logging setup ##
|
## Logging setup ##
|
||||||
|
logger = create_logger(__name__, settings.DIGEST_LOG_PATH, 'DEBUG')
|
||||||
log_format = "%(asctime)s: %(message)s"
|
|
||||||
logging.basicConfig(format=log_format)
|
|
||||||
|
|
||||||
formatter = logging.Formatter(log_format)
|
|
||||||
file_handler = logging.FileHandler(settings.DIGEST_LOG_PATH)
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger.setLevel(logging.DEBUG)
|
|
||||||
logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = """Enqueue digest emails for users that haven't checked the app
|
help = """Enqueue digest emails for users that haven't checked the app
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import logging
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
@@ -9,19 +8,10 @@ from django.conf import settings
|
|||||||
|
|
||||||
from zproject.backends import ZulipLDAPUserPopulator
|
from zproject.backends import ZulipLDAPUserPopulator
|
||||||
from zerver.models import UserProfile
|
from zerver.models import UserProfile
|
||||||
|
from zerver.lib.logging_util import create_logger
|
||||||
|
|
||||||
## Setup ##
|
## Setup ##
|
||||||
|
logger = create_logger(__name__, settings.LDAP_SYNC_LOG_PATH, 'INFO')
|
||||||
log_format = "%(asctime)s: %(message)s"
|
|
||||||
logging.basicConfig(format=log_format)
|
|
||||||
|
|
||||||
formatter = logging.Formatter(log_format)
|
|
||||||
file_handler = logging.FileHandler(settings.LDAP_SYNC_LOG_PATH)
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger.setLevel(logging.INFO)
|
|
||||||
logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
# Run this on a cronjob to pick up on name changes.
|
# Run this on a cronjob to pick up on name changes.
|
||||||
def sync_ldap_user_data():
|
def sync_ldap_user_data():
|
||||||
|
|||||||
Reference in New Issue
Block a user