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
from collections import OrderedDict, defaultdict
from datetime import datetime, timedelta
import logging
from typing import Any, Callable, Dict, List, \
Optional, Text, Tuple, Type, Union
@@ -11,7 +12,7 @@ from django.db.models import F
from analytics.models import Anomaly, BaseCount, \
FillState, InstallationCount, RealmCount, StreamCount, \
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, \
ceiling_to_hour, floor_to_hour, verify_UTC
from zerver.models import Message, Realm, RealmAuditLog, \
@@ -19,7 +20,8 @@ from zerver.models import Message, Realm, RealmAuditLog, \
## 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
TIMEDELTA_MAX = timedelta(days=365*1000)

View File

@@ -31,7 +31,7 @@ from io import BytesIO
import urllib
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
# if Zilencer isn't enabled.
@@ -45,8 +45,8 @@ else:
ViewFuncT = TypeVar('ViewFuncT', bound=Callable[..., HttpResponse])
ReturnT = TypeVar('ReturnT')
## logger setup
webhook_logger = create_logger("zulip.zerver.webhooks", settings.API_KEY_ONLY_WEBHOOK_LOG_PATH)
webhook_logger = logging.getLogger("zulip.zerver.webhooks")
log_to_file(webhook_logger, settings.API_KEY_ONLY_WEBHOOK_LOG_PATH)
class _RespondAsynchronously:
pass

View File

@@ -2,6 +2,7 @@ from typing import Any, Callable, Dict, Iterable, List, Set, Tuple, Text
from collections import defaultdict
import datetime
import logging
import pytz
from django.db.models import Q, QuerySet
@@ -17,9 +18,10 @@ from zerver.models import UserProfile, UserMessage, Recipient, Stream, \
Realm
from zerver.context_processors import common_context
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
DIGEST_CUTOFF = 5

View File

@@ -185,24 +185,12 @@ class ZulipFormatter(logging.Formatter):
setattr(record, 'zulip_decorated', True)
return super().format(record)
def create_logger(name: str,
log_file: str,
log_format: str="%(asctime)s%(levelname)-8s%(message)s") -> 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.
"""
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
def log_to_file(logger: Logger,
filename: str,
log_format: str="%(asctime)s%(levelname)-8s%(message)s",
) -> None:
"""Note: `filename` should be declared in zproject/settings.py in ZULIP_PATHS."""
formatter = logging.Formatter(log_format)
handler = logging.FileHandler(filename)
handler.setFormatter(formatter)
logger.addHandler(handler)

View File

@@ -8,16 +8,18 @@ from zerver.models import UserProfile, ScheduledEmail, get_user_profile_by_id, \
import datetime
from email.utils import parseaddr, formataddr
import logging
import ujson
import os
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 ##
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:
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
import logging
from django.db import transaction
from django.db.models import Max
from django.conf import settings
@@ -10,7 +11,8 @@ from typing import DefaultDict, List, Union, Any
from zerver.models import UserProfile, UserMessage, RealmAuditLog, \
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,
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.)
"""
import logging
import time
from typing import Any
@@ -19,12 +19,13 @@ from django.utils.timezone import now as timezone_now
from ujson import loads
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.models import ScheduledEmail
## 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):
help = """Deliver emails queued by various parts of Zulip

View File

@@ -1,4 +1,5 @@
import datetime
import logging
from typing import Any, List
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 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 ##
logger = create_logger(__name__, settings.DIGEST_LOG_PATH)
logger = logging.getLogger(__name__)
log_to_file(logger, settings.DIGEST_LOG_PATH)
class Command(BaseCommand):
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 django.conf import settings
from django.core.management.base import BaseCommand
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 zproject.backends import ZulipLDAPUserPopulator
## 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.
def sync_ldap_user_data() -> None: