เมื่อฉันเรียกใช้สิ่งต่อไปนี้ภายในโน้ตบุ๊ก IPython ฉันไม่เห็นผลลัพธ์ใด ๆ :
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
ใครทราบวิธีทำให้ฉันเห็นข้อความ "ทดสอบ" ในสมุดบันทึก
ipython3 notebook --versionกลับมา1.0.0
เมื่อฉันเรียกใช้สิ่งต่อไปนี้ภายในโน้ตบุ๊ก IPython ฉันไม่เห็นผลลัพธ์ใด ๆ :
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
ใครทราบวิธีทำให้ฉันเห็นข้อความ "ทดสอบ" ในสมุดบันทึก
ipython3 notebook --versionกลับมา1.0.0
คำตอบ:
ลองทำตาม:
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test")
ตามlogging.basicConfig :
ทำการกำหนดค่าพื้นฐานสำหรับระบบบันทึกโดยสร้าง StreamHandler ด้วย Formatter เริ่มต้นและเพิ่มไปยัง root logger ฟังก์ชัน debug () ข้อมูล () คำเตือน () ข้อผิดพลาด () และสำคัญ () จะเรียก basicConfig () โดยอัตโนมัติหากไม่มีการกำหนดตัวจัดการสำหรับ root logger
ฟังก์ชันนี้จะไม่ทำอะไรเลยหาก root logger มีตัวจัดการที่กำหนดค่าไว้แล้ว
ดูเหมือนว่าสมุดบันทึก ipython เรียก basicConfig (หรือ set handler) ที่ไหนสักแห่ง
loggerสร้างรูท
ipykernel4.5 (อาจเร็วถึง 4.4) github.com/jupyter/notebook/issues/1397
หากคุณยังต้องการใช้basicConfigให้โหลดโมดูลการบันทึกซ้ำเช่นนี้
from importlib import reload # Not needed in Python 2
import logging
reload(logging)
logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', level=logging.DEBUG, datefmt='%I:%M:%S')
reloadตอนนี้imp.reload
ความเข้าใจของฉันคือเซสชัน IPython เริ่มต้นการบันทึกดังนั้น basicConfig จึงไม่ทำงาน นี่คือการตั้งค่าที่เหมาะกับฉัน (ฉันหวังว่านี่จะไม่ดูแย่มากนักเพราะฉันต้องการใช้กับโน้ตบุ๊กเกือบทั้งหมดของฉัน):
import logging
logger = logging.getLogger()
fhandler = logging.FileHandler(filename='mylog.log', mode='a')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fhandler.setFormatter(formatter)
logger.addHandler(fhandler)
logger.setLevel(logging.DEBUG)
ตอนนี้เมื่อฉันวิ่ง:
logging.error('hello!')
logging.debug('This is a debug message')
logging.info('this is an info message')
logging.warning('tbllalfhldfhd, warning.')
ฉันได้รับไฟล์ "mylog.log" ในไดเร็กทอรีเดียวกับสมุดบันทึกของฉันที่มี:
2015-01-28 09:49:25,026 - root - ERROR - hello!
2015-01-28 09:49:25,028 - root - DEBUG - This is a debug message
2015-01-28 09:49:25,029 - root - INFO - this is an info message
2015-01-28 09:49:25,032 - root - WARNING - tbllalfhldfhd, warning.
โปรดทราบว่าหากคุณรันสิ่งนี้ใหม่โดยไม่รีสตาร์ทเซสชัน IPython มันจะเขียนรายการที่ซ้ำกันไปยังไฟล์เนื่องจากตอนนี้จะมีการกำหนดตัวจัดการไฟล์สองตัว
โปรดทราบว่า stderr เป็นสตรีมเริ่มต้นสำหรับloggingโมดูลดังนั้นในโน้ตบุ๊ก IPython และ Jupyter คุณอาจไม่เห็นอะไรเลยเว้นแต่คุณจะกำหนดค่าสตรีมเป็น stdout:
import logging
import sys
logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s',
level=logging.INFO, stream=sys.stdout)
logging.info('Hello world!')
สิ่งที่ใช้ได้ผลสำหรับฉันตอนนี้ (Jupyter, เซิร์ฟเวอร์โน้ตบุ๊กคือ: 5.4.1, IPython 7.0.1)
import logging
logging.basicConfig()
logger = logging.getLogger('Something')
logger.setLevel(logging.DEBUG)
ตอนนี้ฉันสามารถใช้คนตัดไม้เพื่อพิมพ์ข้อมูลไม่เช่นนั้นฉันจะเห็นเฉพาะข้อความจากระดับเริ่มต้น ( logging.WARNING) ขึ้นไป
basicConfig()TP ทำให้มันทำงาน
คุณสามารถกำหนดค่าการบันทึกโดยการเรียกใช้ %config Application.log_level="INFO"
สำหรับข้อมูลเพิ่มเติมโปรดดูตัวเลือกเคอร์เนล IPython
%configเพื่อดูคลาสที่รองรับApplicationไม่ใช่หนึ่งในนั้น ipython 7.9.0 ที่นี่
ฉันตั้งค่าคนตัดไม้สำหรับทั้งสองไฟล์และฉันต้องการให้มันปรากฏบนโน้ตบุ๊ก ปรากฎว่าการเพิ่มตัวจัดการไฟล์จะล้างตัวจัดการสตรีมเริ่มต้น
logger = logging.getLogger()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Setup file handler
fhandler = logging.FileHandler('my.log')
fhandler.setLevel(logging.DEBUG)
fhandler.setFormatter(formatter)
# Configure stream handler for the cells
chandler = logging.StreamHandler()
chandler.setLevel(logging.DEBUG)
chandler.setFormatter(formatter)
# Add both handlers
logger.addHandler(fhandler)
logger.addHandler(chandler)
logger.setLevel(logging.DEBUG)
# Show the handlers
logger.handlers
# Log Something
logger.info("Test info")
logger.debug("Test debug")
logger.error("Test error")
ดูเหมือนว่าโซลูชันที่ใช้ได้กับ ipython / jupyter เวอร์ชันเก่าจะใช้งานไม่ได้อีกต่อไป
นี่คือโซลูชันที่ใช้งานได้สำหรับ ipython 7.9.0 (ทดสอบด้วย jupyter server 6.0.2):
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test message")
DEBUG:root:test message