আইপিথন নোটবুকের লগিং মডিউল থেকে আউটপুট পান


127

আমি যখন আইপথন নোটবুকের ভিতরে নিম্নলিখিতটি চালাচ্ছি তখন আমি কোনও আউটপুট দেখতে পাই না:

import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")

কেউ কীভাবে এটি তৈরি করতে জানেন যাতে আমি নোটবুকের ভিতরে "পরীক্ষা" বার্তাটি দেখতে পারি?


১.০ এ কাজ করে আপনি আইপিথনের কোন সংস্করণ ব্যবহার করছেন?
ভিক্টর কেরকেজ

@ ভিক্টর কার্কেজ ipython3 notebook --versionফিরেছেন1.0.0
কাইল ব্র্যান্ডট

imgur.com/1b7nGZz আমি আপনার কোডটি চেষ্টা করার পরে এটি পেয়েছি।
ভিক্টর কেরকেজ

@ ভিক্টর কার্কেজ: ইয়া আমি তা পাই না, অনুমান করি আমার একটি সমস্যা করা উচিত ...
কাইল ব্র্যান্ড্ট

উত্তর:


129

নিম্নলিখিত চেষ্টা করুন:

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test")

লগিং.ব্যাসিক কনফিগ অনুসারে :

একটি ডিফল্ট ফর্ম্যাটর সহ স্ট্রিমহ্যান্ডলার তৈরি করে এবং এটি রুট লগারে যুক্ত করে লগিং সিস্টেমের জন্য বেসিক কনফিগারেশনটি করে। ফাংশনগুলি ডিবাগ (), তথ্য (), সতর্কতা (), ত্রুটি () এবং সমালোচনামূলক () বেসলকনফিগ () কে স্বয়ংক্রিয়ভাবে কল করবে যদি কোনও রুট লগারের জন্য কোনও হ্যান্ডলার সংজ্ঞায়িত না হয়।

এই ফাংশনটি কিছুই করে না যদি ইতিমধ্যে রুট লগার এর জন্য হ্যান্ডলারগুলি কনফিগার করা থাকে।

দেখে মনে হচ্ছে আইপিথন নোটবুক কোথাও কোথাও বেসিকনফিগ (বা সেট হ্যান্ডলার) কল করুন।


4
একটি সাধারণ আইপিথন কনসোলে একই ঘটে: মূলটি loggerতৈরি না হলে এটি কোনও কিছুই মুদ্রণ করে না ।
আইওনিস ফিলিপিস

1
এই সমাধানটি আবার ipykernel4.5 এ কাজ করে (সম্ভবত 4.4 হিসাবে শুরুর দিকে) github.com/jupyter/notebook/issues/1397
পাইলং

17
এটি আর কাজ করে না। জুপিটার নোটবুক 5.3.0
ওয়েসাম

64

আপনি যদি এখনও ব্যবহার করতে চান তবে 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')

16
পাইথন 3 এ যে কেউ করার চেষ্টা করছে তাদের reloadজন্য এখনimp.reload
কুজুরু

11
পাইথন ৩.৩ হিসাবে ইম্প মডিউলটি অবনমিত হওয়ায় আপনার Importlib.reload ব্যবহার করা উচিত ।
ওয়েবুকেটর

2
যদি কেউ লগিংয়ের সাথে স্পাইডারের সাথে সমস্যায় পড়ে (যেখানে লগারের আচরণ পরিবর্তন করার সমস্ত প্রচেষ্টা ব্যর্থ হয়েছিল), এটি কেবল এক দিনব্যাপী হংস-তাড়া শেষ করে। github.com/spyder-ide/spyder/issues/2572 অনেক ধন্যবাদ!
ফ্রেঞ্চখেল্ডার

27

আমার উপলব্ধিটি হল আইপিথন সেশনটি লগিং শুরু হয় তাই বেসিককনফিগ কাজ করে না। এই সেটআপটি আমার পক্ষে কাজ করে (আমি এটি আমার প্রায় সমস্ত নোটবইয়ের জন্য এটি ব্যবহার করতে চাইছি তাই এটি এত ঘৃণ্য দেখাচ্ছে না):

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.')

আমি আমার নোটবুকের মতো একই ডিরেক্টরিতে একটি "মাইলগ.লগ" ফাইল পাই যা এতে রয়েছে:

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.

দ্রষ্টব্য যে আপনি যদি আইপিথন সেশনটি পুনরায় চালু না করে এটি পুনরায় চালু করেন তবে এটি ফাইলটিতে সদৃশ এন্ট্রি লিখবে কারণ এখন দুটি ফাইল হ্যান্ডলার সংজ্ঞায়িত হবে


3
এটি "কম দেখায়" কম করার জন্য কোডটি আপনার অজগর পথে একটি মডিউলে রাখুন এবং এটি আমদানি করুন। সুন্দর এবং ভবিষ্যতে আপগ্রেড করা সহজ।
অ্যালেক্সিস

1
অথবা logging.config.fileConfig ('logging.conf') ব্যবহার করুন এবং সেখানে সমস্ত সেটআপ রেখে দিন।
কে মাইকেল আয়ে

14

মনে রাখবেন যে স্ট্যাডার loggingমডিউলটির জন্য ডিফল্ট স্ট্রিম , তাই আইপ্যাথন এবং জুপিটার নোটবুকগুলিতে আপনি স্ট্রাউডে স্ট্রিমটি কনফিগার না করে আপনি কিছু দেখতে পাবেন না:

import logging
import sys

logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s',
                     level=logging.INFO, stream=sys.stdout)

logging.info('Hello world!')

13

আমার জন্য এখন কী কাজ করেছে (জুপিটার, নোটবুক সার্ভারটি হ'ল: 5.4.1, আইপিথন 7.0.1)

import logging
logging.basicConfig()
logger = logging.getLogger('Something')
logger.setLevel(logging.DEBUG)

এখন আমি তথ্য প্রিন্ট করতে লগার ব্যবহার করতে পারি, অন্যথায় আমি কেবলমাত্র ডিফল্ট স্তর ( logging.WARNING) বা তার উপরের বার্তাটি দেখতে পাই ।


2
হ্যাঁ, এটি কাজ করে। এক হয়েছে চালানোর জন্য basicConfig()TP এটি কাজ করা।
ব্র্যান্ডেট

11

আপনি চালিয়ে লগিং কনফিগার করতে পারেন %config Application.log_level="INFO"

আরও তথ্যের জন্য আইপিথন কার্নেল বিকল্পগুলি দেখুন


1
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম এবং আপনার সহায়তার জন্য ধন্যবাদ। আপনি কিছু ব্যাখ্যা যুক্ত করে আপনার উত্তরটি আরও উন্নত করতে চাইতে পারেন।
এলিয়াস এমপি

1
এটি আসলে আমার জন্য সবচেয়ে দরকারী উত্তর ছিল!
ইয়ানএস

1
আপনি উদাহরণ সহ কয়েকটি লাইন যুক্ত করতে পারেন? লগ বার্তা মুদ্রণের জন্য লগার হ্যান্ডেলটি কী?
ওয়েসাম

কমপক্ষে আইপথন 9.৯.০ (বা বৃহস্পতি .0.০.২) প্রস্তাবিত কোডটিকে উপেক্ষা করে, কারণ এটি চলমান কনসোল থেকে এই শ্রেণিকে সমর্থন করে না। চালান %configদেখতে দলেই সমর্থন Applicationতাদের মধ্যে একজন নয়। আইপিথন এখানে 7.9.0।
stason

4

আমি উভয় ফাইলের জন্য একটি লগার সেটআপ করেছি এবং আমি চেয়েছিলাম এটি নোটবুকে প্রদর্শিত হবে। একটি ফাইলহ্যান্ডলার যুক্ত করে সরে যায় ডিফল্ট স্ট্রিম হ্যান্ডল্ডারটি সাফ করে।

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")

0

দেখে মনে হচ্ছে যে আইপথন / জুপিটারের পুরানো সংস্করণগুলির জন্য কাজ করা সমাধানগুলি আর কাজ করে না।

এখানে আইপিথন 9.৯.০ এর একটি কার্যক্ষম সমাধান রয়েছে (এটি বৃহস্পতি সার্ভার 6.০.২ সহ পরীক্ষাও করা হয়েছে):

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test message")

DEBUG:root:test message
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.