我希望能够从jupyter笔记本登录到stderr,而无需编写有关登录jupyter Notebook本身的任何信息,并且希望能够在脚本启动时登录到文件。
默认情况下,在jupyter笔记本中,日志记录设置为警告,因此我需要将其修改为code.py中的信息。
我在模块中有一些代码:
code.py
import logging
logger = logging.getLogger()
handler = logging.StreamHandler(sys.stderr)
if logger.level == 30:
logger.setLevel(logging.INFO)
logger.handlers = [handler] + logger.handlers
def do_something_cool():
logger.info("You are cool")
在jupyter笔记本中,它符合我想要的方式。
当我从脚本中使用此功能时,我将执行以下操作:
my_script.py
if __name__ == '__main__':
logger = logging.getLogger()
logger.setLevel(logging.INFO)
handler = logging.FileHandler(str(DIRECTORY / 'log_model_info.log'))
logger.addHandler(handler)
在我看来,{{1} 有没有更好的方法来处理它?</ p>
答案 0 :(得分:0)
根据Basic Logging Tutorial — Python 2.7.15 documentation,您可以通过logging.basicConfig()
设置日志记录,例如:
logging.basicConfig(stream=sys.stderr, level=logging.INFO) # stream=sys.stderr is the default,
# so you can omit it
或者,到文件:
logging.basicConfig(filename='log_model_info.log', level=logging.INFO)
或通过其他logging
API-logger.addHandler()
,logger.setLevel()
等手动添加处理程序,调整级别,设置格式等。
对于您的特定情况,basicConfig()
就足够了:将stream
用于交互式控制台(或将其完全省略,因为stream=sys.stderr
是默认控制台)和{ {1}}用于脚本,如下例所示。在这两种情况下,您都需要将级别至少调整为INFO,因为根记录器的默认值为WARN。
如果只使用root记录器,也不需要获取filename
对象-使用模块级记录功能。
因此,您的第一个代码将变为:
Logger
第二个:
import logging
logging.basicConfig(level=logging.INFO)
def do_something_cool():
logging.info("You are cool")
这也是我典型的无人值守脚本的日志记录设置代码-只是您可以了解自定义import logging
logging.basicConfig(filename='log_model_info.log', level=logging.INFO)
的设置代码是什么样的:
logging