Browse Source

Closes #990: Enable logging configuration in configuration.py

Jeremy Stretch 7 years ago
parent
commit
8a849ebeff

+ 28 - 0
docs/configuration/optional-settings.md

@@ -83,6 +83,34 @@ Enforcement of unique IP space can be toggled on a per-VRF basis. To enforce uni
 
 
 ---
 ---
 
 
+## LOGGING
+
+By default, all messages of INFO severity or higher will be logged to the console. Additionally, if `DEBUG` is False and email access has been configured, ERROR and CRITICAL messages will be emailed to the users defined in `ADMINS`.
+
+The Django framework on which NetBox runs allows for the customization of logging, e.g. to write logs to file. Please consult the [Django logging documentation](https://docs.djangoproject.com/en/1.11/topics/logging/) for more information on configuring this setting. Below is an example which will write all INFO and higher messages to a file:
+
+```
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': False,
+    'handlers': {
+        'file': {
+            'level': 'INFO',
+            'class': 'logging.FileHandler',
+            'filename': '/var/log/netbox.log',
+        },
+    },
+    'loggers': {
+        'django': {
+            'handlers': ['file'],
+            'level': 'INFO',
+        },
+    },
+}
+```
+
+---
+
 ## LOGIN_REQUIRED
 ## LOGIN_REQUIRED
 
 
 Default: False
 Default: False

+ 9 - 0
netbox/netbox/configuration.example.py

@@ -58,6 +58,11 @@ CORS_ORIGIN_REGEX_WHITELIST = [
     # r'^(https?://)?(\w+\.)?example\.com$',
     # r'^(https?://)?(\w+\.)?example\.com$',
 ]
 ]
 
 
+# Set to True to enable server debugging. WARNING: Debugging introduces a substantial performance penalty and may reveal
+# sensitive information about your installation. Only enable debugging while performing testing. Never enable debugging
+# on a production system.
+DEBUG = False
+
 # Email settings
 # Email settings
 EMAIL = {
 EMAIL = {
     'SERVER': 'localhost',
     'SERVER': 'localhost',
@@ -72,6 +77,10 @@ EMAIL = {
 # (all prefixes and IP addresses not assigned to a VRF), set ENFORCE_GLOBAL_UNIQUE to True.
 # (all prefixes and IP addresses not assigned to a VRF), set ENFORCE_GLOBAL_UNIQUE to True.
 ENFORCE_GLOBAL_UNIQUE = False
 ENFORCE_GLOBAL_UNIQUE = False
 
 
+# Enable custom logging. Please see the Django documentation for detailed guidance on configuring custom logs:
+#   https://docs.djangoproject.com/en/1.11/topics/logging/
+LOGGING = {}
+
 # Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users
 # Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users
 # are permitted to access most data in NetBox (excluding secrets) but not make any changes.
 # are permitted to access most data in NetBox (excluding secrets) but not make any changes.
 LOGIN_REQUIRED = False
 LOGIN_REQUIRED = False

+ 20 - 18
netbox/netbox/settings.py

@@ -15,7 +15,7 @@ except ImportError:
 
 
 VERSION = '2.0.6-dev'
 VERSION = '2.0.6-dev'
 
 
-# Import local configuration
+# Import required configuration parameters
 ALLOWED_HOSTS = DATABASE = SECRET_KEY = None
 ALLOWED_HOSTS = DATABASE = SECRET_KEY = None
 for setting in ['ALLOWED_HOSTS', 'DATABASE', 'SECRET_KEY']:
 for setting in ['ALLOWED_HOSTS', 'DATABASE', 'SECRET_KEY']:
     try:
     try:
@@ -25,33 +25,35 @@ for setting in ['ALLOWED_HOSTS', 'DATABASE', 'SECRET_KEY']:
             "Mandatory setting {} is missing from configuration.py.".format(setting)
             "Mandatory setting {} is missing from configuration.py.".format(setting)
         )
         )
 
 
-# Default configurations
+# Import optional configuration parameters
 ADMINS = getattr(configuration, 'ADMINS', [])
 ADMINS = getattr(configuration, 'ADMINS', [])
-DEBUG = getattr(configuration, 'DEBUG', False)
-EMAIL = getattr(configuration, 'EMAIL', {})
-LOGIN_REQUIRED = getattr(configuration, 'LOGIN_REQUIRED', False)
+BANNER_BOTTOM = getattr(configuration, 'BANNER_BOTTOM', False)
+BANNER_TOP = getattr(configuration, 'BANNER_TOP', False)
 BASE_PATH = getattr(configuration, 'BASE_PATH', '')
 BASE_PATH = getattr(configuration, 'BASE_PATH', '')
 if BASE_PATH:
 if BASE_PATH:
     BASE_PATH = BASE_PATH.strip('/') + '/'  # Enforce trailing slash only
     BASE_PATH = BASE_PATH.strip('/') + '/'  # Enforce trailing slash only
+CORS_ORIGIN_ALLOW_ALL = getattr(configuration, 'CORS_ORIGIN_ALLOW_ALL', False)
+CORS_ORIGIN_REGEX_WHITELIST = getattr(configuration, 'CORS_ORIGIN_REGEX_WHITELIST', [])
+CORS_ORIGIN_WHITELIST = getattr(configuration, 'CORS_ORIGIN_WHITELIST', [])
+DATE_FORMAT = getattr(configuration, 'DATE_FORMAT', 'N j, Y')
+DATETIME_FORMAT = getattr(configuration, 'DATETIME_FORMAT', 'N j, Y g:i a')
+DEBUG = getattr(configuration, 'DEBUG', False)
+ENFORCE_GLOBAL_UNIQUE = getattr(configuration, 'ENFORCE_GLOBAL_UNIQUE', False)
+EMAIL = getattr(configuration, 'EMAIL', {})
+LOGGING = getattr(configuration, 'LOGGING', {})
+LOGIN_REQUIRED = getattr(configuration, 'LOGIN_REQUIRED', False)
 MAINTENANCE_MODE = getattr(configuration, 'MAINTENANCE_MODE', False)
 MAINTENANCE_MODE = getattr(configuration, 'MAINTENANCE_MODE', False)
+MAX_PAGE_SIZE = getattr(configuration, 'MAX_PAGE_SIZE', 1000)
 PAGINATE_COUNT = getattr(configuration, 'PAGINATE_COUNT', 50)
 PAGINATE_COUNT = getattr(configuration, 'PAGINATE_COUNT', 50)
+PREFER_IPV4 = getattr(configuration, 'PREFER_IPV4', False)
 NETBOX_USERNAME = getattr(configuration, 'NETBOX_USERNAME', '')
 NETBOX_USERNAME = getattr(configuration, 'NETBOX_USERNAME', '')
 NETBOX_PASSWORD = getattr(configuration, 'NETBOX_PASSWORD', '')
 NETBOX_PASSWORD = getattr(configuration, 'NETBOX_PASSWORD', '')
-TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC')
-DATE_FORMAT = getattr(configuration, 'DATE_FORMAT', 'N j, Y')
 SHORT_DATE_FORMAT = getattr(configuration, 'SHORT_DATE_FORMAT', 'Y-m-d')
 SHORT_DATE_FORMAT = getattr(configuration, 'SHORT_DATE_FORMAT', 'Y-m-d')
-TIME_FORMAT = getattr(configuration, 'TIME_FORMAT', 'g:i a')
-SHORT_TIME_FORMAT = getattr(configuration, 'SHORT_TIME_FORMAT', 'H:i:s')
-DATETIME_FORMAT = getattr(configuration, 'DATETIME_FORMAT', 'N j, Y g:i a')
 SHORT_DATETIME_FORMAT = getattr(configuration, 'SHORT_DATETIME_FORMAT', 'Y-m-d H:i')
 SHORT_DATETIME_FORMAT = getattr(configuration, 'SHORT_DATETIME_FORMAT', 'Y-m-d H:i')
-BANNER_TOP = getattr(configuration, 'BANNER_TOP', False)
-BANNER_BOTTOM = getattr(configuration, 'BANNER_BOTTOM', False)
-PREFER_IPV4 = getattr(configuration, 'PREFER_IPV4', False)
-ENFORCE_GLOBAL_UNIQUE = getattr(configuration, 'ENFORCE_GLOBAL_UNIQUE', False)
-MAX_PAGE_SIZE = getattr(configuration, 'MAX_PAGE_SIZE', 1000)
-CORS_ORIGIN_ALLOW_ALL = getattr(configuration, 'CORS_ORIGIN_ALLOW_ALL', False)
-CORS_ORIGIN_WHITELIST = getattr(configuration, 'CORS_ORIGIN_WHITELIST', [])
-CORS_ORIGIN_REGEX_WHITELIST = getattr(configuration, 'CORS_ORIGIN_REGEX_WHITELIST', [])
+SHORT_TIME_FORMAT = getattr(configuration, 'SHORT_TIME_FORMAT', 'H:i:s')
+TIME_FORMAT = getattr(configuration, 'TIME_FORMAT', 'g:i a')
+TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC')
+
 CSRF_TRUSTED_ORIGINS = ALLOWED_HOSTS
 CSRF_TRUSTED_ORIGINS = ALLOWED_HOSTS
 
 
 # Attempt to import LDAP configuration if it has been defined
 # Attempt to import LDAP configuration if it has been defined