我在这里浏览了python日志记录类的教程,没有发现任何东西可以让我为同一输出制作多个不同级别的日志。最后,我想拥有三个日志:(
<timestamp>_DEBUG.log
调试级别)
<timestamp>_INFO.log
(信息级别)
<timestamp>_ERROR.log
(错误级别)
<------------- UPDATE#1 -------------------------->
因此,在实现@robert的建议时,我现在有一个小问题,可能是由于不完全了解他的代码正在做什么。
这是我在scriptRun.py中的代码
import os
import logging
logger = logging.getLogger("exceptionsLogger")
debugLogFileHandler = logging.FileHandler("Debug.log")
errorLogFileHandler = logging.FileHandler("Error.Log")
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
errorLogFileHandler.setFormatter(formatter)
debugLogFileHandler.setFormatter(formatter)
logger.addHandler(debugLogFileHandler)
logger.addHandler(errorLogFileHandler)
class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level
def filter(self, record):
return record.levelno == self.level
debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))
errorLogFileHandler.addFilter(LevelFilter(logging.ERROR))
directory = []
for dirpath, dirnames, filenames in os.walk("path\to\scripts"):
for filename in [f for f in filenames if f.endswith(".py")]:
directory.append(os.path.join(dirpath, filename))
for entry in directory:
execfile(entry)
for lists in x:
if lists[0] == 2:
logger.error(lists[1]+" "+lists[2])
elif lists[0] == 1:
logger.debug(lists[1]+" "+lists[2])
正在运行的示例是:
import sys
def script2Test2():
print y
def script2Ttest3():
mundo="hungry"
global x
x = []
theTests = (test2, test3)
for test in theTests:
try:
test()
x.append([1,test.__name__," OK"])
except:
error = str(sys.exc_info()[1])
x.append([2,test.__name__,error])
现在是我的问题:运行scriptRun.py
并在运行时不会引发任何错误,error.log
并且会debug.log
被创建,而只会error.log
填充条目。
知道为什么吗?
<------------------------更新#2 ---------------------- ->
因此,我意识到没有什么记录比警告“低”了。即使我删除过滤器,debugLogFileHandler.setLevel(logging.DEBUG)
这似乎也没有关系。如果将实际的log命令设置为logger.warning
或更高,它将打印到日志中。当然,一旦取消注释,debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))
我就不会有日志活动Debug.log
。我很想自己创建自己的日志级别,但是如果任何人/其他任何人都使用此代码,这似乎是一个糟糕的主意。
<-------------------------最终更新--------------------->
好吧,我很愚蠢,忘了设置记录器本身来记录调试级别的事件。由于默认情况下,日志记录类不会记录任何低于警告的内容,因此它不会记录我发送的任何调试信息。
最后感谢并向@Robert表示感谢。
创建多个处理程序,每个处理程序用于一个输出文件(INFO.log,DEBUG.log等)。
向仅允许特定级别的每个处理程序添加过滤器。
例如:
import logging
# Set up loggers and handlers.
# ...
class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level
def filter(self, record):
return record.levelno == self.level
debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))
infoLogFileHandler.addFilter(LevelFilter(logging.INFO))
现在,问题是,当我以以下方式进行日志记录时: 尽管根记录器级别被设置为“错误”,但日志条目仍然存在于两个日志文件中。然而,当我去掉“it.pkg.testpkg.service”记录器(通过注释或删除它)时,条目停止进入根记录器。我不太清楚这是怎么回事。 目前,我已经找到了一个临时解决方案,方法是在“root_file_appender”中添加以下条目: 谢了。
我想做的很直截了当: 我只希望在控制台追加器上显示重要的消息,而我希望将详细的消息路由到文件追加器。 我还尝试向添加一个ThresholdFilter,但这也不能过滤它。
SLF4J具有以下日志级别 JDK日志记录具有以下日志级别 如果我想将日志级别设置为DEBUG,那么该级别在JDK日志中不可用。谁能解释一下在这种情况下我们如何获得调试级别的日志记录。对于这种情况,我们需要做什么额外的配置吗? 已更新 这是我的属性文件配置 请让我知道我哪里错了。
我正在我的应用程序中使用 ESAPI 记录器。Logger logger= ESAPI.getLogger(ABC.class) 在ABC课堂上。java,我们使用INFO级别打印日志。根据我们所知的定义,Info接受: 两个参数:信息(Logger.EventType type, java.lang.字符串消息) 三个参数:信息(Logger.EventType type, java.lang.
在log4j2文档log4j2 java配置中,默认配置为: 根本就不在那里。它仍将只打印出错误日志。 问题 是否有其他人遇到此问题? 有人能复制它吗? 有人知道怎么修吗?我几乎要给别人一块钱。不过,我肯定会把他们的答案标成绿色。 我的最终目标是让特定的记录器发送SMTP请求。我很确定我知道怎么做,我只是在和这个小问题作斗争
我们有两个不同的ASP.NET应用程序启用了Log4net日志记录。它们都有相同的log4net1.2.10.0版本。