当前位置: 首页 > 知识库问答 >
问题:

Scrapy:日志记录到没有ScrapyFileLogObserver()的文件

黄泰宁
2023-03-14

显然,我不应该再使用ScrapyFileLogObserver(http://doc.scraphy.org/en/1.0/topics/logging.html)。但是我仍然希望能够将我的日志消息保存到一个文件中,并且我仍然希望将所有标准的不稳定的控制台信息也保存到该文件中。

通过阅读如何使用日志模块,下面是我尝试使用的代码:

class BlahSpider(CrawlSpider):
    name = 'blah'
    allowed_domains = ['blah.com']
    start_urls = ['https://www.blah.com/blahblahblah']

    rules = (
        Rule(SgmlLinkExtractor(allow=r'whatever'), callback='parse_item', follow=True),
    )

    def __init__(self):
        CrawlSpider.__init__(self)
        self.logger = logging.getLogger()
        self.logger.setLevel(logging.DEBUG)
        logging.basicConfig(filename='debug_log.txt', filemode='w', format='%(asctime)s %(levelname)s: %(message)s',
                            level=logging.DEBUG)
        console = logging.StreamHandler()
        console.setLevel(logging.DEBUG)
        simple_format = logging.Formatter('%(levelname)s: %(message)s')
        console.setFormatter(simple_format)
        self.logger.addHandler(console)
        self.logger.info("Something")

    def parse_item(self):
        i = BlahItem()
        return i

它运行良好,并将“某些东西”保存到文件中。但是,我在命令提示符窗口中看到的所有东西,所有以前在我使用ScrapyFileLogObserver时保存到文件中的东西,现在都没有保存。

我以为我的带有“logging.streamHandler()”的“console”处理程序应该处理这个问题,但这只是我读到的内容,我并不真正理解它是如何工作的。

谁能指出我缺了什么或者哪里出了问题吗?

谢谢你。

共有1个答案

卓俊晖
2023-03-14

我认为问题是您同时使用了BasicConfigAddHandler

分别配置两个处理程序:

self.logger = logging.getLogger()
self.logger.setLevel(logging.DEBUG)

logFormatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')

# file handler
fileHandler = logging.FileHandler("debug_log.txt")
fileHandler.setLevel(logging.DEBUG)
fileHandler.setFormatter(logFormatter)
self.logger.addHandler(fileHandler)

# console handler
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)
consoleHandler.setFormatter(logFormatter)
self.logger.addHandler(consoleHandler)

另见:

    null
 类似资料:
  • 问题内容: 我需要将对项目中的Oracle数据库的所有查询记录到日志文件中。 有什么 好的 解决方案来实现这一目标?一些示例用法将不胜感激。 我已经用jdbcdslog查看了SLF4J,但不确定如何使用它登录到文件。而且,我需要“过滤”一些日志(因为我不需要知道何时调用某种方法) 最好是,我更愿意使用,但这不是必需的。 谢谢。 更新 我找到了这篇Oracle文章,但是它并没有真正告诉您如何以编程方

  • ,日志记录将进入一个文件; (路径)/service_name/service_name.log 我想用logback复制这种行为,但在logback.xml配置中获取“logger”名称时遇到了真正的困难。它可以在log encoder.pattern中看到,即“%d%-5level%logger{35}-%msg%n”。

  • 通用日志-1.2.jar jboss-logging-3.1.3.ga.jar jboss-logging-annotations-1.2.0.beta1.jar log4j-api-2.6.1.jar log4j-core-2.6.1.jar log4j-jcl-2.6.1.jar log4j-SLF4j-impl-2.6.1.jar SLF4J-API-1.7.5.jar slf4j-log4

  • 问题内容: 有没有一种方法可以将log4j日志事件写入到也由其他应用程序写入的日志文件中。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化? 问题答案: Log4j有一个SocketAppender,它将事件发送到服务,您可以自己实现或使用与Log4j捆绑在一起的简单实现。 它还支持syslogd和Windows事件日志,这对于尝试将日志输出与非Java应用程序中的事件统一起来可

  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 问题内容: 我正在考虑将Redis用于Web应用程序日志记录目的。我用谷歌搜索,有人将日志转储到Redis队列/列表中,然后将计划的工作人员转储到磁盘中。 http://nosql.mypopescu.com/post/8652869828/another-redis-use-case- centralized-logging 我希望寻求理解,为什么不直接使用Redis持久化到磁盘?如果我分配了一