web-dev-qa-db-ja.com

Python basicConfigメソッドを使用してコンソールとファイルにログを記録する

このコードが画面に出力されるのはわかりませんが、ファイルには出力されません。ファイル「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()])

その後、すべてのログはファイル内にあり、コンソールには何も表示されません

46
Jovik

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ドキュメント。

20
jfs

コンソールとファイルの両方に対して、これをうまく試してください(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__)
34
kartheek

次の例では、レベルに基づいてログの宛先を指定できます。たとえば、次のコードでは、[〜#〜] 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')
5
Wesam Na

再利用可能なロガー機能。

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

enter image description here

0
as - if