PY学習パッケージおよびログ

第一章バッグ

__Init__.pyファイルがある限り、パッケージがあるとフォルダが含まれています

我々は機能が完全に再利用我々はモジュールを使用する機能になりますするために、ファイルに書き込まれたときにモジュール全体を習得しなかったが、前に、モジュールはよりは、よりゆっくりと。我々はしたくなることを思い出してくださいパッケージの使用に、構造的なプログラムの保守性を改善することは統合管理モジュールになります

パッケージには、我々はそれを行うにはどのように袋を使用する複数のモジュールを、管理することができますか?

インポートを使用すると、XXインポートXXから

二つの方法

2.絶対パスをインポートします

from bake.api  import www   #推荐使用
www.fun()

3.相対パスを導入

from  .. api.www import fun #zbb中

fun() #必须在最外层的同级进行导入
#执行
from bake.api.zbb  import fun

第二章ロギングモジュール

機能シンプルな構成(ほとんどのスパム)

import logging  
logging.debug('调试')  
logging.info('信息')  
logging.warning('警告')  
logging.error('错误')  
logging.critical('危险')

Pythonのロギングモジュールは、標準出力にデフォルトの印刷を記録し、警告のみにそのデフォルトを表す以上の警告レベルのログ、ログレベルを示します

、(レベルグレードCRITICAL> ERROR> WARNING> INFO> DEBUGのログ)

ログレベルのデフォルトのログフォーマット:ロガー名:ユーザー出力メッセージ。

柔軟な構成ログレベル、ログ形式、出力先:(ごみ)

import logging  
logging.basicConfig(level=logging.DEBUG,  
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  
                    datefmt='%a, %d %b %Y %H:%M:%S',  
                    filename='/tmp/test.log',  
                    filemode='w')  

basicConfig()関数は、デフォルトの動作パラメータが用意されていロギングモジュール固有のパラメータによって変更することができます。

  • ファイル名:FiledHandlerを作成するには、そのようなログは、指定されたファイル名で指定したファイルに格納されています。
  • ファイルモード:このパラメータは、ファイル名で指定され、デフォルト値「」も「W」として指定することができる、オープンファイル。
  • 形式:ハンドラ指定した表示形式を記録します。
  • datefmt:日付と時刻の形式を指定します。
  • 設定するログレベル:レベル
  • ストリーム:指定されたストリームをStreamHandlerの作成。あなたはへの出力を指定することができます
  • sys.stderrを持ち、sys.stdoutのか、ファイル(F =オープン( 'test.log'、) 'W')、デフォルトのsys.stderrを持ち。両方のファイル名とストリームの2つのパラメータを一覧表示した場合は、ストリームのパラメータは無視されます。

formatパラメータ文字列の書式を使用することができます

  • %(名)■ロガー名
  • %(Levelno)のログレベルデジタル形式
  • %(Levelname)のログレベルのテキスト形式
  • ログ出力機能モジュールのフルパス名に%(パス名)の呼び出しがないかもしれません
  • %(ファイル名)のコールログ出力機能モジュールのファイル名
  • %(モジュール)のコールログ出力機能モジュール名
  • 関数名%(FUNCNAME)のコールログ出力機能
  • OKコードステートメントの%(LINENO)Dログ出力関数の呼び出し場所
  • 標準的な浮動小数点表現UNIX時間で表される現在時刻のF%(作成)
  • ミリ秒ロガーの数は、場合D出力ログ情報%(relativeCreated)作成されてから
  • 現在時刻文字列sの%(いるasctime)。デフォルトの形式は「2003-07-0816:49:45896」です。カンマの後のミリ秒
  • %(スレッド)DスレッドID。ではないかもしれません
  • %(のthreadName)■スレッド名。ではないかもしれません
  • %(プロセス)DプロセスID。ではないかもしれません
  • メッセージ%(メッセージ)のユーザ出力

Loggerオブジェクト構成(標準版)

import logging
logger = logging.getLogger()
# 创建一个logger
fh = logging.FileHandler('test.log',mode="a",encoding='utf-8')   # 文件
ch = logging.StreamHandler()   # 屏幕
formatter = logging.Formatter('%(asctime)s - %(name)s - %(filename)s - [line:%(lineno)d] -  %(levelname)s - %(message)s')
# 将屏幕和文件都是用以上格式
logger.setLevel(logging.DEBUG)
# 设置记录级别
fh.setFormatter(formatter)
# 使用自定义的格式化内容
ch.setFormatter(formatter)
logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
logger.addHandler(ch) #打印在屏幕上


logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')
import logging

dic = {"key":123}
logging.debug(dic)

num = 100
logging.info(f"用户当前余额:{num - 50}")

try:
    num = int(input("请输入数字:"))
except Exception as e:
    logging.warning("int将字符串转换报错了")
print("12334")

logging.error('我是错误')
logging.critical('我是危险')

アルティメット(退行しました)


import os
import logging.config
# 定义三种日志输出格式 开始

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '在 %(asctime)s %(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'


# log文件的全路径
logfile_path = 'all2.log'

# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},
    'handlers': {
        #打印到终端的日志
        'stream': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': None,  # 日志文件
            'maxBytes': 1024*1024*1024,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        '': {
            'handlers': ['stream', 'file'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)传递
        },
    },
}


def get_logger():
    path = r'F:\s24\day21\liye.log'
    LOGGING_DIC['handlers']['file']['filename'] = path
    logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
    logger = logging.getLogger(__name__)  # 生成一个log实例
    return logger



def save():
    logger = get_logger()
    logger.info(f'{} 存入300元')  # 记录该文件的运行状态

save()

おすすめ

転載: www.cnblogs.com/zdqc/p/11290500.html