python生成日志

python生成日志

#!/bin/python
#coding=utf-8

import time
import datetime
import random

# 日志格式
# valid remote-addr remote-user
# time_local request status
# byte_sent  refer user-agent

# ''.join([(string.ascii_letters+string.digits)[x] for x in random.sample(range(0,62),8)])

def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str

pages=['/register','/recommand','/relation','/item/a','/item/b','/item/c','/list/','/search/','/cart','/order/getorder','/order/submitorder','/index','/category/a','/category/b','/category/c','/category/d']
for i in range(100):
    pages.append("/item/"+random_str(8))



refers=['http://www.google.com','www.baidu.com','www.sohu.com']
refers.extend(pages)

minutes=[]
for i in range(00,40):
    t = i+random.randint(0,19)
    minutes.append(str(t) if len(str(t))>1 else "0"+str(t))
print(minutes)

seconds=[]
for i in range(00,40):
    t = i+random.randint(0,19)
    seconds.append(str(t) if len(str(t))>1 else "0"+str(t))
print(minutes)

hours=[]
for i in range(00,24):
    hours.append(str(i) if len(str(i))>1 else "0"+str(i))
print(hours)


ips = open('c:\\000000_0.ips')
file = ips.read()
ips = file.split('\n')


#
# morning=datetime.datetime.strptime('2013-09-18 00:00:00','%Y-%m-%d %H:%M:%S')
# evening=datetime.datetime.strptime('2013-09-18 23:59:59','%Y-%m-%d %H:%M:%S')
#
#
# print(morning)
# print(evening)

logfile = open("c:\\mylog.log",mode='w')

for i in range(0,500000):
    # seed = random.randint(0,7)
    # print(pages[seed])
    ip=random.choice(ips)
    h=random.choice(hours)
    m=random.choice(minutes)
    s=random.choice(minutes)

    page=random.choice(pages)
    refer=random.choice(refers)
    useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36'
    body_sent = '1800'
    status='200'
    valid = 'true'
    user = '-'

    day='2013-09-20'
    time_local= day + " " +  h + ":" + m + ":" + s
    logfile.write(valid + "\001" + ip + "\001"+ user+ "\001" + time_local +"\001"+page+"\001"+ status +"\001"+ body_sent + "\001"+refer+ "\001" + useragent +"\n")

logfile.close()


<think>首先,用户的问题是:“我想使用Python生成日志文件 请问如何用Python生成日志文件”。我需要根据系统级指令和用户可见层的规则来回答。 系统级指令: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考的引用是关于Python日志生成的,但用户的问题正是关于这个,所以我可以直接使用这些引用。引用包括: - [^1]:描述了日志配置,包括文件输出和控制台输出。 - [^2]:日志消息格式。 - [^3]:Python版本信息。 - [^4]:日志文件路径生成。 用户的问题是“如何用Python生成日志文件”,所以我需要提供一个清晰的步骤指南。 回答结构: 1. **介绍**:简要说明Python日志模块的重要性。 2. **步骤**:逐步解释如何配置和使用日志。 3. **代码示例**:提供代码片段,使用代码块格式。 4. **解释**:解释代码的关键部分。 5. **相关问题**:生成相关问题。 确保使用中文回答。 生成相关问题: - 基于主题,如日志配置优化、日志级别、不同Python版本的处理等。 现在,构建回答: - **介绍**:Python的logging模块是标准库的一部分,用于记录日志信息到文件或控制台。 - **步骤**: 1. 导入logging模块。 2. 配置日志(如使用basicConfig或fileConfig)。 3. 创建logger对象。 4. 使用logger记录消息。 - **代码示例**:基于引用,提供一个简单的例子。引用[^1]有代码片段,我可以简化或扩展它。 - **解释**:解释参数如日志级别、文件大小等。 - **引用标识**:在解释中自然地添加引用标识,例如,当提到特定配置时。 最终回答应包括: - 标题或开头。 - 步骤说明。 - 代码块。 - 解释。 - 相关问题。 相关问题示例: 1. 如何设置日志文件按日期滚动? 2. 如何自定义日志消息格式? 3. 在Python 3中日志生成有何不同?</think>### 如何用Python生成日志文件 Python标准库中的`logging`模块提供了强大的日志功能,能轻松生成日志文件,支持控制台输出、文件存储、日志级别过滤等。以下我将逐步解释如何配置和使用该模块生成日志文件,确保回答真实可靠。整个过程基于Python标准库,无需额外安装包。 #### 步骤1: 导入logging模块并配置日志 首先,导入`logging`模块,并使用`basicConfig`或`fileConfig`进行基础配置。`basicConfig`适合简单场景,而`fileConfig`支持更复杂的配置(如多处理器)。以下是一个使用`basicConfig`的示例: ```python import logging # 配置日志:写入文件(debug及以上级别),并添加控制台输出(info及以上级别) logging.basicConfig( level=logging.DEBUG, # 设置最低日志级别为DEBUG format='[%(asctime)s] [%(levelname)s] [%(module)s] [%(funcName)s] [%(lineno)d] %(message)s', # 自定义日志格式 handlers=[ logging.FileHandler('logs/app.log', mode='a', encoding='utf-8'), # 文件处理器:追加模式,UTF-8编码 logging.StreamHandler() # 控制台处理器 ] ) ``` - **关键参数解释**: - `level=logging.DEBUG`: 日志级别从低到高为DEBUG、INFO、WARNING、ERROR、CRITICAL。设置为DEBUG表示记录所有级别消息。 - `format`: 定义日志消息格式,例如`[%(asctime)s]`表示时间戳,`[%(levelname)s]`为日志级别等[^2]。 - `handlers`: 指定输出目标。`FileHandler`用于文件输出,`StreamHandler`用于控制台输出。 - 文件路径`logs/app.log`: 可自定义路径,如`'logs/mylog.log'`。确保目录存在,否则会报错。 #### 步骤2: 创建logger对象并记录日志 配置后,创建logger对象来记录消息。logger可以按模块或功能命名,便于管理。 ```python # 创建logger对象 logger = logging.getLogger('myLogger') # 记录不同级别的日志消息 logger.debug('这是一个调试信息') # 仅文件输出(DEBUG级别) logger.info('这是一个普通信息') # 文件和控制台输出(INFO及以上) logger.warning('这是一个警告信息') logger.error('这是一个错误信息') ``` - **运行结果**: - 日志文件`logs/app.log`中将包含所有级别消息。 - 控制台只输出INFO及以上消息(因为`basicConfig`中控制台处理器默认级别为INFO)。 #### 步骤3: 高级配置(可选)—使用配置文件 对于复杂场景(如日志文件滚动),推荐使用`fileConfig`加载INI配置文件。这支持文件大小限制、备份数量等。引用[^1]展示了基于配置文件的示例: 1. 创建配置文件`log_config.ini`: ```ini [loggers] keys=root,sampleLogger [handlers] keys=consoleHandler,fileHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_sampleLogger] level=DEBUG handlers=fileHandler qualname=sampleLogger propagate=0 [handler_consoleHandler] class=StreamHandler level=INFO formatter=simpleFormatter args=(sys.stdout,) [handler_fileHandler] class=handlers.RotatingFileHandler # 支持文件滚动 level=DEBUG formatter=simpleFormatter args=('logs/logfile.txt', 'a', 1048576, 20, 'utf-8') # 文件路径、追加模式、文件大小1MB、最多20个备份文件、UTF-8编码[^1] [formatter_simpleFormatter] format=[%(asctime)s] [%(levelname)s] [%(module)s] [%(funcName)s] [%(lineno)d] %(message)s datefmt=%Y-%m-%d %H:%M:%S ``` 2. Python代码加载配置: ```python import logging.config def setup_logger(): logging.config.fileConfig(fname='conf/log_config.ini', disable_existing_loggers=False) logger = logging.getLogger("sampleLogger") return logger logger = setup_logger() logger.info('配置文件加载成功') ``` - **关键参数解释**: - `args=('logs/logfile.txt', 'a', 1048576, 20, 'utf-8')`: - `'logs/logfile.txt'`: 日志文件路径。 - `'a'`: 追加模式。 - `1048576`: 文件大小限制(1MB),超过后创建新文件。 - `20`: 最多保留20个备份文件。 - `'utf-8'`: 编码格式[^1][^4]。 - 此配置实现日志文件自动滚动,避免单个文件过大。 #### 注意事项 - **Python版本兼容性**: 上述代码在Python 2.7和Python 3.x中均适用,但Python 3.x推荐使用`logging`模块的增强功能(如`dictConfig`)。如果使用Python 2.7,需确保代码兼容[^3]。 - **日志文件路径**: 使用`os.path.join`生成动态路径,例如按日期命名文件(如`time.strftime("%Y%m%d")`)[^4]。 - **最佳实践**: - 在项目入口处初始化日志配置。 - 为不同模块创建独立logger(如`logger = logging.getLogger(__name__)`)。 - 定期清理旧日志文件,避免磁盘空间不足。 通过以上步骤,你可以高效生成日志文件。如果需要更多定制,请参考Python官方文档[logging模块](https://docs.python.org/3/library/logging.html)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值