使用 Python 将日志轮换到目录中
我有一个名为 Poller.log 的文件,它始终附加日志详细信息。我希望这个日志文件每天轮换一次,并且限制为 30 天。因此,该代码运行良好。
现在我希望已旋转的日志位于一个文件夹中(即logs/poller.log.2011-03-04_15-36)。无论如何,有没有办法指导应该在哪里创建这个旋转文件?
这个Python脚本将由Cron执行。
import logging
import logging.handlers
LOG_FILENAME = '/home/stackoverflow/snmpdata/poller.log'
# Set up a specific logger with our desired output level
poll_logger = logging.getLogger('pollerLog')
# Add the log message handler to the logger
log_rotator = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, when='d', interval=1, backupCount=30, encoding=None, delay=False, utc=False)
poll_logger.addHandler(log_rotator)
# Roll over on application start
poll_logger.handlers[0].doRollover()
I have a file called Poller.log and it's appended by log details all the time. I want this log file to be rotated everyday and limited by 30 days. Thus, the code works well.
Now I want this logs that has been rotated to be in a folder (i.e. logs/poller.log.2011-03-04_15-36). Is there anyway to direct where this rotated file should be created?
This python script will be executed by Cron.
import logging
import logging.handlers
LOG_FILENAME = '/home/stackoverflow/snmpdata/poller.log'
# Set up a specific logger with our desired output level
poll_logger = logging.getLogger('pollerLog')
# Add the log message handler to the logger
log_rotator = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, when='d', interval=1, backupCount=30, encoding=None, delay=False, utc=False)
poll_logger.addHandler(log_rotator)
# Roll over on application start
poll_logger.handlers[0].doRollover()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Python 日志处理程序不允许轻易做到这一点。您可能有两种方法来实现此目的:
最简单的方法是将 LOG_FILENAME 设置为已在日志/poller.log 中,如果您想在其他任何地方访问 poller.log,请使用符号链接:)
从 TimedRotatingFileHandler 开始创建您自己的处理程序,并且从 /usr/lib/python2.X/logging/handlers.py TimedRotatingFileHandler 类复制/粘贴 doRollover() 。并更改:
为:
Python logging handler don't allow to do that easily. You might have 2 way of achieve this :
The simplest way would to setup LOG_FILENAME to be already in logs/poller.log, and if you want to access to your poller.log anywhere else, use a symlink :)
Create your own handler starting from TimedRotatingFileHandler, and copy/paste the doRollover() from /usr/lib/python2.X/logging/handlers.py, TimedRotatingFileHandler class. And change :
to
如果您不介意额外的依赖性,您可以随时使用twisted 中的翻转日志记录模块。 Twisted 有一个日志文件模块,允许每日日志、每周日志,甚至每月日志(类似这种情况)。
If you don't mind the extra dependency you could always use the rollover logging module in twisted. Twisted has a logfile module that allows for daily logs, weekly logs, or even monthly logs like this situation.
我为单独的进程添加了这段代码,以将任何日志备份移动到文件夹。
只有扩展名为 3 部分的日志文件才会被移动到“name.log.date”上
我现在正在研究压缩存档文件夹的过程。
更新:
Zip 过程
这是删除旧文件的
:这是整个过程:
我将 runArchiveProcess 设置为每周运行一次。
和调度程序位:
I added this bit of code for a separate process to move any log backups to a folder.
Only log files with a 3 part extension will be moved over "name.log.date"
I am working on a process to zip the archive folder now.
update:
Here's is the Zip process
Deleting the old files:
Here's the whole process:
I have the runArchiveProcess set on a schedule to run once a week.
And the scheduler bit:
日志记录模块中的
BaseRotatingHandler
类提供了 接口因此,您可以像这样创建自己的客户RotatingHandler:
The
BaseRotatingHandler
class in logging module provides an interfaceSo, you can create your own customer RotatingHandler like this: