You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python日志添加用户及计算机名:现有实现是否有更优方案?

更优实现方案

推荐方案:直接在日志格式中嵌入用户/计算机名

这是最高效的方式,从日志生成的源头就包含所需信息,避免后续额外的文件读写和DataFrame修改操作,逻辑更简洁,性能更好。

import logging
import os
import pandas as pd

user = os.getlogin()
computer = os.environ['COMPUTERNAME']

# 在日志格式字符串中直接加入用户和计算机名变量
logging.basicConfig(
    level=logging.DEBUG,
    filename='log.txt',
    filemode='w',
    format=f'%(filename)s|Line - %(lineno)s|%(asctime)s|%(levelname)s|{user}|{computer}|%(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

# 生成日志时,每条记录会自动带上user和computer字段
logging.debug('示例调试日志')
logging.info('示例信息日志')

# 读取日志到DataFrame,直接包含所有需要的列
log = pd.read_csv('log.txt', sep='|', header=None)
log.columns = ['Job_Name', 'Line', 'Date_Time', 'Level', 'User', 'Computer', 'Message']

# 直接将DataFrame导入SQL Server即可

备选方案:优化DataFrame赋值逻辑(若无法修改日志格式)

如果因为某些限制不能修改日志输出格式,那么不要用iterrows()逐行修改,改用pandas的整列向量化赋值,效率会大幅提升(尤其是日志行数较多时)。

import logging
import os
import pandas as pd

user = os.getlogin()
computer = os.environ['COMPUTERNAME']

logging.basicConfig(
    level=logging.DEBUG,
    filename='log.txt',
    filemode='w',
    format='%(filename)s|Line - %(lineno)s|%(asctime)s|%(levelname)s|%(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

# 生成日志...

log = pd.read_csv('log.txt', sep='|', header=None)
log.columns = ['Job_Name', 'Line', 'Date_Time', 'Level', 'Message']

# 整列赋值替代逐行循环,性能提升显著
log['User'] = user
log['Computer'] = computer

# 导入SQL Server

方案优势说明

  • 推荐方案:减少了一次文件读取后的修改操作,日志文件本身就完整保存了所有业务需要的字段,后续导入数据库的流程更顺畅,同时降低了IO开销。
  • 备选方案:避免了iterrows()的低效逐行遍历,pandas的向量化操作是基于底层C实现的,处理大量数据时速度会比逐行循环快几十甚至上百倍。

内容的提问来源于stack exchange,提问作者WannabeDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 13:43:19