kapsikkum-unmanic – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3  
4 """
5 unmanic.unlogger.py
6  
7 Written by: Josh.5 <jsunnex@gmail.com>
8 Date: 06 Jan 2019, (8:41 AM)
9  
10 Copyright:
11 Copyright (C) Josh Sunnex - All Rights Reserved
12  
13 Permission is hereby granted, free of charge, to any person obtaining a copy
14 of this software and associated documentation files (the "Software"), to deal
15 in the Software without restriction, including without limitation the rights
16 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 copies of the Software, and to permit persons to whom the Software is
18 furnished to do so, subject to the following conditions:
19  
20 The above copyright notice and this permission notice shall be included in all
21 copies or substantial portions of the Software.
22  
23 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
26 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
28 OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
29 OR OTHER DEALINGS IN THE SOFTWARE.
30  
31 """
32  
33 import os
34 import logging
35  
36 from unmanic.libs.singleton import SingletonType
37  
38  
39 class UnmanicLogger(object, metaclass=SingletonType):
40 _enable_log_to_file = None
41 stream_handler = None
42 file_handler = None
43 _settings = None
44 _logger = None
45  
46 def __init__(self, log_to_file=True):
47 self._enable_log_to_file = log_to_file
48 # Create our default parent logger and set the default level to info
49 self._logger = logging.getLogger("Unmanic")
50 # Initially set this logger to INFO (once the config is applied, this may change)
51 self._logger.setLevel(logging.INFO)
52 # Prevent logging from being passed up the chain
53 self._logger.propagate = False
54  
55 # Create formatter
56 self.formatter = logging.Formatter(
57 '%(asctime)s:%(levelname)s:%(name)s - %(message)s',
58 datefmt='%Y-%m-%dT%H:%M:%S'
59 )
60 # Add stream handler
61 if not self.stream_handler:
62 # Create file handler
63 self.stream_handler = logging.StreamHandler()
64 # Apply formatter
65 self.stream_handler.setFormatter(self.formatter)
66 # Set the log level of the stream handle
67 self.stream_handler.setLevel(logging.INFO)
68 # Add handler
69 self._logger.addHandler(self.stream_handler)
70 # Add file handler
71 self.setup_file_handler()
72  
73 def setup_file_handler(self):
74 if self._enable_log_to_file and not self.file_handler and self._settings and self._settings.get_log_path():
75 # Create directory if not exists
76 if not os.path.exists(self._settings.get_log_path()):
77 os.makedirs(self._settings.get_log_path())
78 # Create file handler
79 log_file = os.path.join(self._settings.get_log_path(), 'unmanic.log')
80 self.file_handler = logging.handlers.TimedRotatingFileHandler(log_file, when='midnight', interval=1,
81 backupCount=7)
82 # Apply formatter
83 self.file_handler.setFormatter(self.formatter)
84 # Set log level of file handler...
85 if self._settings.get_debugging():
86 self.file_handler.setLevel(logging.DEBUG)
87 else:
88 self.file_handler.setLevel(logging.INFO)
89 # Set the log level of the stream handle always to error
90 self.stream_handler.setLevel(logging.CRITICAL)
91 # Add handler
92 self._logger.addHandler(self.file_handler)
93  
94 def disable_file_handler(self, debugging=False):
95 # Set the log level of the stream handle back to INFO or DEBUG
96 if debugging:
97 self.stream_handler.setLevel(logging.DEBUG)
98 else:
99 self.stream_handler.setLevel(logging.INFO)
100 # Remove handler
101 self._logger.removeHandler(self.file_handler)
102  
103 def enable_debugging(self):
104 logger = self.get_logger(__class__.__name__)
105 logger.info('Debug logging enabled')
106 self._logger.setLevel(logging.DEBUG)
107  
108 def disable_debugging(self):
109 logger = self.get_logger(__class__.__name__)
110 logger.info('Debug logging disabled')
111 self._logger.setLevel(logging.INFO)
112  
113 def setup_logger(self, settings):
114 logger = self.get_logger(__class__.__name__)
115 logger.info("Initialising file logger. All further logs should output to the 'unmanic.log' file")
116 # Set/Update our settings
117 self._settings = settings
118 if not self.file_handler:
119 self.setup_file_handler()
120 if self._settings.get_debugging():
121 self.enable_debugging()
122 else:
123 self.disable_debugging()
124  
125 def get_logger(self, name=None):
126 if name:
127 logger = logging.getLogger("Unmanic." + name)
128 else:
129 logger = self._logger
130 return logger