logging: Reduce create_logger to new log_to_file.

The name `create_logger` suggests something much bigger than what this
function actually does -- the logger doesn't any more or less exist
after the function is called than before.  Its one real function is to
send logs to a specific file.

So, pull out that logic to an appropriately-named function just for
it.  We already use `logging.getLogger` in a number of places to
simply get a logger by name, and the old `create_logger` callsites can
do the same.
This commit is contained in:
Greg Price
2017-12-12 16:45:57 -08:00
parent 1c810baaef
commit b830b446f1
9 changed files with 40 additions and 39 deletions

View File

@@ -1,6 +1,7 @@
import time import time
from collections import OrderedDict, defaultdict from collections import OrderedDict, defaultdict
from datetime import datetime, timedelta from datetime import datetime, timedelta
import logging
from typing import Any, Callable, Dict, List, \ from typing import Any, Callable, Dict, List, \
Optional, Text, Tuple, Type, Union Optional, Text, Tuple, Type, Union
@@ -11,7 +12,7 @@ from django.db.models import F
from analytics.models import Anomaly, BaseCount, \ from analytics.models import Anomaly, BaseCount, \
FillState, InstallationCount, RealmCount, StreamCount, \ FillState, InstallationCount, RealmCount, StreamCount, \
UserCount, installation_epoch, last_successful_fill UserCount, installation_epoch, last_successful_fill
from zerver.lib.logging_util import create_logger from zerver.lib.logging_util import log_to_file
from zerver.lib.timestamp import ceiling_to_day, \ from zerver.lib.timestamp import ceiling_to_day, \
ceiling_to_hour, floor_to_hour, verify_UTC ceiling_to_hour, floor_to_hour, verify_UTC
from zerver.models import Message, Realm, RealmAuditLog, \ from zerver.models import Message, Realm, RealmAuditLog, \
@@ -19,7 +20,8 @@ from zerver.models import Message, Realm, RealmAuditLog, \
## Logging setup ## ## Logging setup ##
logger = create_logger('zulip.management', settings.ANALYTICS_LOG_PATH) logger = logging.getLogger('zulip.management')
log_to_file(logger, settings.ANALYTICS_LOG_PATH)
# 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)

View File

@@ -31,7 +31,7 @@ from io import BytesIO
import urllib import urllib
from typing import Union, Any, Callable, Sequence, Dict, Optional, TypeVar, Text, Tuple, cast from typing import Union, Any, Callable, Sequence, Dict, Optional, TypeVar, Text, Tuple, cast
from zerver.lib.logging_util import create_logger from zerver.lib.logging_util import log_to_file
# 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.
@@ -45,8 +45,8 @@ else:
ViewFuncT = TypeVar('ViewFuncT', bound=Callable[..., HttpResponse]) ViewFuncT = TypeVar('ViewFuncT', bound=Callable[..., HttpResponse])
ReturnT = TypeVar('ReturnT') ReturnT = TypeVar('ReturnT')
## logger setup webhook_logger = logging.getLogger("zulip.zerver.webhooks")
webhook_logger = create_logger("zulip.zerver.webhooks", settings.API_KEY_ONLY_WEBHOOK_LOG_PATH) log_to_file(webhook_logger, settings.API_KEY_ONLY_WEBHOOK_LOG_PATH)
class _RespondAsynchronously: class _RespondAsynchronously:
pass pass

View File

@@ -2,6 +2,7 @@ from typing import Any, Callable, Dict, Iterable, List, Set, Tuple, Text
from collections import defaultdict from collections import defaultdict
import datetime import datetime
import logging
import pytz import pytz
from django.db.models import Q, QuerySet from django.db.models import Q, QuerySet
@@ -17,9 +18,10 @@ 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 from zerver.lib.logging_util import log_to_file
logger = create_logger(__name__, settings.DIGEST_LOG_PATH) logger = logging.getLogger(__name__)
log_to_file(logger, settings.DIGEST_LOG_PATH)
VALID_DIGEST_DAY = 1 # Tuesdays VALID_DIGEST_DAY = 1 # Tuesdays
DIGEST_CUTOFF = 5 DIGEST_CUTOFF = 5

View File

@@ -185,24 +185,12 @@ class ZulipFormatter(logging.Formatter):
setattr(record, 'zulip_decorated', True) setattr(record, 'zulip_decorated', True)
return super().format(record) return super().format(record)
def create_logger(name: str, def log_to_file(logger: Logger,
log_file: str, filename: str,
log_format: str="%(asctime)s%(levelname)-8s%(message)s") -> Logger: log_format: str="%(asctime)s%(levelname)-8s%(message)s",
"""Creates a named logger for use in logging content to a certain ) -> None:
file. A few notes: """Note: `filename` should be declared in zproject/settings.py in ZULIP_PATHS."""
formatter = logging.Formatter(log_format)
* "name" is used in determining what gets logged to which files; handler = logging.FileHandler(filename)
see "loggers" in zproject/settings.py for details. Don't use `""` handler.setFormatter(formatter)
-- that's the root logger. logger.addHandler(handler)
* "log_file" should be declared in zproject/settings.py in ZULIP_PATHS.
"""
logger = logging.getLogger(name)
if log_file:
formatter = logging.Formatter(log_format)
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger

View File

@@ -8,16 +8,18 @@ from zerver.models import UserProfile, ScheduledEmail, get_user_profile_by_id, \
import datetime import datetime
from email.utils import parseaddr, formataddr from email.utils import parseaddr, formataddr
import logging
import ujson import ujson
import os import os
from typing import Any, Dict, Iterable, List, Mapping, Optional, Text from typing import Any, Dict, Iterable, List, Mapping, Optional, Text
from zerver.lib.logging_util import create_logger from zerver.lib.logging_util import log_to_file
## Logging setup ## ## Logging setup ##
logger = create_logger('zulip.send_email', settings.EMAIL_LOG_PATH) logger = logging.getLogger('zulip.send_email')
log_to_file(logger, settings.EMAIL_LOG_PATH)
class FromAddress: class FromAddress:
SUPPORT = parseaddr(settings.ZULIP_ADMINISTRATOR)[1] SUPPORT = parseaddr(settings.ZULIP_ADMINISTRATOR)[1]

View File

@@ -1,6 +1,7 @@
from zerver.lib.logging_util import create_logger from zerver.lib.logging_util import log_to_file
from collections import defaultdict from collections import defaultdict
import logging
from django.db import transaction from django.db import transaction
from django.db.models import Max from django.db.models import Max
from django.conf import settings from django.conf import settings
@@ -10,7 +11,8 @@ 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
logger = create_logger("zulip.soft_deactivation", settings.SOFT_DEACTIVATION_LOG_PATH) logger = logging.getLogger("zulip.soft_deactivation")
log_to_file(logger, settings.SOFT_DEACTIVATION_LOG_PATH)
def filter_by_subscription_history(user_profile: UserProfile, def filter_by_subscription_history(user_profile: UserProfile,
all_stream_messages: DefaultDict[int, List[Message]], all_stream_messages: DefaultDict[int, List[Message]],

View File

@@ -9,7 +9,7 @@ condition. (Alternatively, you can set `EMAIL_DELIVERER_DISABLED=True`
on all but one machine to make the command have no effect.) on all but one machine to make the command have no effect.)
""" """
import logging
import time import time
from typing import Any from typing import Any
@@ -19,12 +19,13 @@ from django.utils.timezone import now as timezone_now
from ujson import loads from ujson import loads
from zerver.lib.context_managers import lockfile from zerver.lib.context_managers import lockfile
from zerver.lib.logging_util import create_logger from zerver.lib.logging_util import log_to_file
from zerver.lib.send_email import EmailNotDeliveredException, send_email from zerver.lib.send_email import EmailNotDeliveredException, send_email
from zerver.models import ScheduledEmail from zerver.models import ScheduledEmail
## Setup ## ## Setup ##
logger = create_logger(__name__, settings.EMAIL_DELIVERER_LOG_PATH) logger = logging.getLogger(__name__)
log_to_file(logger, settings.EMAIL_DELIVERER_LOG_PATH)
class Command(BaseCommand): class Command(BaseCommand):
help = """Deliver emails queued by various parts of Zulip help = """Deliver emails queued by various parts of Zulip

View File

@@ -1,4 +1,5 @@
import datetime import datetime
import logging
from typing import Any, List from typing import Any, List
from django.conf import settings from django.conf import settings
@@ -6,10 +7,11 @@ 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 DIGEST_CUTOFF, enqueue_emails from zerver.lib.digest import DIGEST_CUTOFF, enqueue_emails
from zerver.lib.logging_util import create_logger from zerver.lib.logging_util import log_to_file
## Logging setup ## ## Logging setup ##
logger = create_logger(__name__, settings.DIGEST_LOG_PATH) logger = logging.getLogger(__name__)
log_to_file(logger, settings.DIGEST_LOG_PATH)
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

View File

@@ -1,16 +1,18 @@
import logging
from typing import Any from typing import Any
from django.conf import settings from django.conf import settings
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from zerver.lib.logging_util import create_logger from zerver.lib.logging_util import log_to_file
from zerver.models import UserProfile from zerver.models import UserProfile
from zproject.backends import ZulipLDAPUserPopulator from zproject.backends import ZulipLDAPUserPopulator
## Setup ## ## Setup ##
logger = create_logger(__name__, settings.LDAP_SYNC_LOG_PATH) logger = logging.getLogger(__name__)
log_to_file(logger, settings.LDAP_SYNC_LOG_PATH)
# 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() -> None: def sync_ldap_user_data() -> None: