一般在写完代码的时候,除了在控制台打印日志以外,还会想要生成一个log日志文件用于备份,那么直接加上以下这段代码即可,日志文件命名中包含精确的时间信息,因此同一时间段多次运行同一段代码也不会出现日志覆盖的问题。如果没有logs文件夹的话会自动生成,不必考虑任何报错问题。

1、代码实例(直接可用) 

import os
import datetime
import logging


def print_and_log(string):
    print(string)
    logging.info(string)


if __name__ == '__main__':
    py_path = os.path.basename(__file__).split('.')[0]
    os.makedirs('logs/', exist_ok=True)
    log_file = 'logs/' + os.path.basename(os.getcwd()) + '_' + py_path + '_' + str(
        datetime.datetime.now()).replace(':', '').replace(' ', '_') + '.txt'
    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s %(filename)s %(levelname)s: %(message)s',
        filename=log_file,
        filemode='w'
    )

    print_and_log("测试日志")

运行结果:

python的日志代码模板(可直接使用)_日志打印

生成的日志内容:

python的日志代码模板(可直接使用)_log日志_02

2、日志文件名解析

FlaskOA_test_code_2024-07-14_125854.911996.txt

FlaskOA 指的是你当前的项目名(这个其实可有可无,个人使用的时候可以去掉这部分);

test_code 指的是你当前执行的 python 文件名;

2024-07-14 就是执行当前代码时的日期;

125854 指的是执行当前代码时的时分秒;

123456 这部分是执行当前代码时的微秒数(1秒=1百万微秒);

3、代码解析版

import os
import datetime
import logging

# 控制台打印的同时,日志文件也记录下日志内容(此处可根据需求自己设置)
def print_and_log(string):
    print(string)
    logging.info(string)


if __name__ == '__main__':
    '''
        __file__:指的是当前正在执行的 python 文件的完整路径;
        os.path.basename('path1/path2'):获取一个路径中的最小级别的目录或文件名,即“path2”;
        os.path.basename(__file__):获取当前正在执行的 python 文件名;
        os.path.basename(__file__).split('.')[0]:由于获取到的文件名后面带有'.py',所以用split函数获取.号前面的文件名内容
    '''
    py_path = os.path.basename(__file__).split('.')[0]
    os.makedirs('logs/', exist_ok=True)
    '''
        os.getcwd():获取当前的项目路径;
        os.path.basename(os.getcwd()):就是指获取当前项目名称;
        str(datetime.datetime.now()).replace(':', '').replace(' ', '_'):
            由于文件名不可以有分号:,所以将分号去掉了,空格的地方则替换为下划线_
    '''
    log_file = 'logs/' + os.path.basename(os.getcwd()) + '_' + py_path + '_' + str(
        datetime.datetime.now()).replace(':', '').replace(' ', '_') + '.txt'
    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s %(filename)s %(levelname)s: %(message)s',
        filename=log_file,
        filemode='w'
    )

    print_and_log("测试日志")