问题:

假设我们自己写了一个名为 log_config.py 的日志记录程序模块。此模块会被其他程序所引用,如下例子。

import log_config

logger = log_config.log_config("./test_log.txt", "tester")

logger.info("log start.")

logger.info("something happens")

logger.info("log end.")

解决方法:

先看一下目前系统中的Python 路径情况:

Python 2.7.6 (default, Jun 22 2015, 17:58:13)

[GCC 4.8.2] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import sys

>>> print sys.path

['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

结果显示,在这几个目录都是 Python 的系统目录。我们的模块可以放在如下二个目录即可。

'/usr/local/lib/python2.7/dist-packages',

'/usr/lib/python2.7/dist-packages'

更进一步:

如果自定义的模块不想与Python 系统的模块放在同一目录下,可以在上面二个目录中增加一个路径文件 user_defined_modules.pth 。此文件内容就是我们自定义模块的存放路径。例子如下:

/home/tom/python_modules/

在 /home/tom/python_module/ 目录中把我们的模块文件 log_config.py 存放好即可。

附录 log_config.py 源码:

此代码可以设置日志文件的生成规则,目录设置的是 1 小时 1 个文件。如果一小时内单个文件大小超过 10 MB会自动分割成多个文件。

#!/usr/bin/python

# encoding=utf-8

#example

#import log_config

#logger = log_config.log_config("./test_log.txt", "tester")

#logger.info("log start")

#logger.info("log end")

#!/usr/bin/env python

# -*- coding:utf-8 -*

""" Setup a Logger which creates a new log file when it

reach up to it limits, such as one hour and file size 10 MB.

"""

__author__ = "Zhiwei Yan"

__copyright__ = "Copyright 2016, The Common tools Project"

__credits__ = ["Zhiwei Yan"]

__license__ = "Apache License"

__version__ = "2.0"

__maintainer__ = "Zhiwei YAN"

__email__ = "jerod.yan@gmail.com"

__status__ = "Production"

import logging

import logging.handlers as handlers

import time, datetime

class SizedTimedRotatingFileHandler(handlers.TimedRotatingFileHandler):

"""

Handler for logging to a set of files, which switches from one file

to the next when the current file reaches a certain size, or at certain

timed intervals

"""

def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None,

delay=0, when='h', interval=1, utc=False):

# If rotation/rollover is wanted, it doesn't make sense to use another

# mode. If for example 'w' were specified, then if there were multiple

# runs of the calling application, the logs from previous runs would be

# lost if the 'w' is respected, because the log file would be truncated

# on each run.

if maxBytes > 0:

mode = 'a'

handlers.TimedRotatingFileHandler.__init__(

self, filename, when, interval, backupCount, encoding, delay, utc)

self.maxBytes = maxBytes

def shouldRollover(self, record):

"""

Determine if rollover should occur.

Basically, see if the supplied record would cause the file to exceed

the size limit we have.

"""

if self.stream is None: # delay was set...

self.stream = self._open()

if self.maxBytes > 0: # are we rolling over?

msg = "%s\n" % self.format(record)

self.stream.seek(0, 2) #due to non-posix-compliant Windows feature

if self.stream.tell() + len(msg) >= self.maxBytes:

return 1

t = int(time.time())

if t >= self.rolloverAt:

return 1

return 0

def log_config(log_filename, logger_str):

logging.basicConfig(format = "%(asctime)s" "[%(module)s:%(funcName)s:%(lineno)d]\n" "%(message)s \n")

logger=logging.getLogger(logger_str)

logger.propagate = False

logger.setLevel(logging.DEBUG)

handler=SizedTimedRotatingFileHandler(

log_filename,

maxBytes=10*1024*1024, backupCount=24*30,

when='h',interval=1,

# encoding='bz2', # uncomment for bz2 compression

)

logformatter = logging.Formatter("%(asctime)s" "[%(module)s:%(funcName)s:%(lineno)d]\n" "%(message)s \n")

handler.setFormatter(logformatter)

logger.addHandler(handler)

return logger

python 自定义模块_Python 自定义模块路径相关推荐

  1. python如何自定义模块_python自定义模块和开源模块使用方法

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  2. 如何显示python的内置模块_python之模块(内置模块)

    内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 一.sys 用于提供对Python解释器相关的操作: 1 sys.argv #命令行参数List,第一个元素是程 ...

  3. python中的模块_python的模块和包的详细说明

    Python模块和包的详细说明 模块的导入 模块的加载与修改 模块和脚本的说明 模块搜索路径 包的导入 一.模块的导入 之前我们简单的使用了一下模块,并没有详细的介绍,现在我们来详细的说说 1.什么是 ...

  4. python log模块_Python日志模块-logging

    一.logging模块 日志的作用可以简单总结为以下3点: 1.程序调试 2.了解软件程序运行情况,是否正常 3.软件程序运行故障分析与问题定位 1.日志的等级 不同的应用程序所定义的日志等级可能会有 ...

  5. python dcf估值_Python 常用模块

    本节内容 模块介绍 os 模块 sys 模块 time & datetime模块 random 模块 json & picle shutil 模块 shelve 模块 xml 模块 c ...

  6. python文件操作和模块_Python(五)--模块与文件操作

    Python(五)–模块与文件操作 模块和包 模块 模块是包含Python定义和语句的文件,把一组相关函数或代码组织到一个文件中,一个文件即一个模块.模块的文件名 = 模块名+后缀.py 模块之间代码 ...

  7. python无法导入模块_python导入模块失败的原因是什么

    py执行文件和模块同属于同个目录(父级目录),才能直接import模块:如果不在同一目录,可以在python环境下使用sys.path.append(path)添加相关的路径,但在退出python环境 ...

  8. python贪婪匹配_python re模块匹配贪婪和非贪婪模式详解

    python re模块匹配贪婪和非贪婪模式详解 这篇文章主要介绍了python re模块匹配贪婪和非贪婪模式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...

  9. python莫比乌斯环_python基础|模块

    1 模块简介 在python中常见的模块有三种,在python解释器中的内置模块,第三方模块和自定义模块.模块的有使用python编写的文件,有已被编译为共享库或DLL的C或C++扩展,也有使用C编写 ...

  10. python import变量_Python import模块调用

    开发过程中代码越写越多,在一个文件里代码会越来越长,不容易维护,为了容易维护代码,我们把很多函数分组,分别放在不同的文件里,在Python中,一个.py文件就是模块(Module) 工具/原料 Pyt ...

最新文章

  1. 怎样用Jenkins触发还有一个Jenkins---Global build solution
  2. ARPG游戏引擎设计思路
  3. Linux学习资料-5(密码管理与设定、使用者身份切换、使用者查询、手动增加使用者)...
  4. 谷歌地图将很快显示电动汽车充电站
  5. 前端学习(1578):React简介
  6. 前端都应懂的入门基础-github基础
  7. 同步PC和MAC OS X文件夹--arrsync-0.4.1
  8. 怎么在Linux中telnet服务器,Linux系统下Telnet服务器配置
  9. MySQL不同字段比较大小_mysql 字段定义 对 大小比较的影响
  10. 银行排队叫号系统项目总结
  11. linux终端修改键盘格局,如何在Ubuntu桌面中更改键盘布局
  12. Python强智教务系统模拟登录的两种方式
  13. QQ群、讨论组上传文件,由于网络原因上传失败?
  14. 火线精英手游服务器维护,4399火线精英7月4日23:00全区停机维护公告
  15. 认知世界(1)--学与思
  16. Java——名片管理系统
  17. ata驱动框架及scsi请求处理流程
  18. 华为 IPv6与IPv4
  19. Mxnet训练自己的数据集并测试
  20. 安卓OTA升级文件的制作

热门文章

  1. Building Java Projects with Gradle
  2. 让Linux修改IP、DNS等可以更简单
  3. 新疆电信IBSS系统集中联机热备份--案例
  4. 博客园网站程序的一个小问题
  5. 基于JSP实现毕业设计选题系统
  6. LIME算法:模型的可解释性(代码实现)
  7. 特来电自动运维应用实践
  8. BZOJ3998: [TJOI2015]弦论(后缀自动机,Parent树)
  9. centos安装JDK、Tomcat、mysql
  10. PhpStorm+PhpStudy开发环境的配置