我已经阅读了一些关于此的帖子,但我仍然感到困惑.我有这个日志设置:
import logging
class MongoHandler(logging.Handler):
def __init__(self):
logging.Handler.__init__(self)
from pymongo import Connection
self.db = Connection('db_server').db_name
def emit(self, record):
try:
self.db.Logging.save(record.__dict__)
except:
print 'Logging Error: Unable to save log entry to db'
mh = MongoHandler()
sh = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(threadName)s - %(levelname)s - %(message)s')
sh.setFormatter(formatter)
log = logging.getLogger('DeviceMonitor_%s' % hostname)
log.addHandler(mh)
log.addHandler(sh)
log.setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)
我希望能够为StreamHandler和MongoHandler设置不同的级别.这可能还是我需要第二个Logger obj?
Gra*_*tVS 74
您可以为每个日志记录处理程序设置不同的日志记录级别,但似乎您必须将记录器的级别设置为"最低".在下面的示例中,我将记录器设置为DEBUG,将流处理程序设置为INFO,将TimedRotatingFileHandler设置为DEBUG.因此该文件具有DEBUG条目,并且流仅输出INFO.您不能仅将DEBUG指向一个且仅将INFO指向另一个处理程序.为此你需要另一个记录器.
logger = logging.getLogger("mylog")
formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s: %(message)s')
logger.setLevel(logging.DEBUG)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)
logFilePath = "my.log"
file_handler = logging.handlers.TimedRotatingFileHandler(filename = logFilePath, when = 'midnight', backupCount = 30)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
logger.info("Started");
try:
x = 14
y = 0
z = x / y
except Exception as ex:
logger.error("Operation failed.")
logger.debug("Encountered {0} when trying to perform calculation.".format(ex))
logger.info("Ended");
Run Code Online (Sandbox Code Playgroud)
我需要时间来理解这一点
GrantVS 答案的补充:
我不得不使用
logging.basicConfig(level=logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)
为了让它工作。否则很好的答案,谢谢!
马里奥
PS:出于某种原因,系统不允许我直接评论 GrantVS 的回答。
| 归档时间: |
|
| 查看次数: |
27074 次 |
| 最近记录: |