このコードが画面に出力されるのはわかりませんが、ファイルには出力されません。ファイル「example1.log」が作成されますが、そこには何も書き込まれません。
#!/usr/bin/env python3
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(message)s',
handlers=[logging.FileHandler("example1.log"),
logging.StreamHandler()])
logging.debug('This message should go to the log file and to the console')
logging.info('So should this')
logging.warning('And this, too')
ロギングオブジェクトを作成することでこの問題を「回避」しました( サンプルコード )が、basicConfig()アプローチが失敗した理由を私に知らせ続けていますか?
PS。 basicConfig呼び出しを次のように変更した場合:
logging.basicConfig(level=logging.DEBUG,
filename="example2.log",
format='%(asctime)s %(message)s',
handlers=[logging.StreamHandler()])
その後、すべてのログはファイル内にあり、コンソールには何も表示されません
Python 3.3。メッセージは画面と_'example2.log'
_の両方に書き込まれます。OnPython <3.3ファイルが空です。
コード:
_from logging_tree import printout # pip install logging_tree
printout()
_
FileHandler()
がPython <3.3のルートロガーに接続されていないことを示しています。
logging.basicConfig()
のドキュメントでは、handlers
引数がPython 3.3。handlers
引数にn Python 3.2ドキュメント。
コンソールとファイルの両方に対して、これをうまく試してください(python 2.7でテスト済み)==
# set up logging to file
logging.basicConfig(
filename='Twitter_effect.log',
level=logging.INFO,
format= '[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s',
datefmt='%H:%M:%S'
)
# set up logging to console
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
logger = logging.getLogger(__name__)
次の例では、レベルに基づいてログの宛先を指定できます。たとえば、次のコードでは、[〜#〜] info [〜#〜]レベルのすべてのログをログファイルに移動し、上記のすべて[〜#〜] error [〜#〜]レベルはコンソールに移動します。
import logging
logging.root.handlers = []
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO , filename='ex.log')
# set up logging to console
console = logging.StreamHandler()
console.setLevel(logging.ERROR)
# set a format which is simpler for console use
formatter = logging.Formatter('%(asctime)s : %(levelname)s : %(message)s')
console.setFormatter(formatter)
logging.getLogger("").addHandler(console)
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.exception('exp')
再利用可能なロガー機能。
def logger(logPath,fileName):
logging.basicConfig(
format='%(asctime)s - %(levelname)s - %(message)s',
level=logging.INFO,
handlers=[
logging.FileHandler("{0}/{1}.log".format(logPath,fileName)),
logging.StreamHandler()
])
return logging
その他pythonファイルで、logger
をインポートします
logger().info("this is info")
logger().critical('404')
logger().error("this is error")