- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
尝试在 python deamon 类中使用日志记录,这里是父 deamon 类和派生类
import sys, os, time, atexit, signal
import logging.handlers
logger = logging.getLogger(__name__)
fh = logging.handlers.RotatingFileHandler('./logs/application.log', maxBytes=10240, backupCount=5)
fh.setLevel(logging.INFO) # no matter what level I set here
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
class Deamon:
"""A generic daemon class.
Usage: subclass the daemon class and override the run() method."""
def __init__(self, pidfile):
self.pidfile = pidfile
logger.info('INFO')
logger.error('ERROR')
def daemonize(self):
"""Deamonize class. UNIX double fork mechanism."""
try:
pid = os.fork()
if pid > 0:
# exit first parent
sys.exit(0)
except OSError as err:
logger.error('We have a problem')
sys.stderr.write('fork #1 failed: {0}\n'.format(err))
sys.exit(1)
# decouple from parent environment
os.chdir('/')
os.setsid()
os.umask(0)
# do second fork
try:
pid = os.fork()
if pid > 0:
# exit from second parent
sys.exit(0)
except OSError as err:
sys.stderr.write('fork #2 failed: {0}\n'.format(err))
sys.exit(1)
# redirect standard file descriptors
sys.stdout.flush()
sys.stderr.flush()
si = open(os.devnull, 'r')
so = open(os.devnull, 'a+')
se = open(os.devnull, 'a+')
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
# write pidfile
atexit.register(self.delpid)
pid = str(os.getpid())
with open(self.pidfile, 'w+') as f:
f.write(pid + '\n')
def delpid(self):
os.remove(self.pidfile)
def start(self):
"""Start the daemon."""
logger.info('start the deamon')
# Check for a pidfile to see if the daemon already runs
try:
with open(self.pidfile, 'r') as pf:
pid = int(pf.read().strip())
except IOError:
pid = None
if pid:
message = "pidfile {0} already exist. " + \
"Daemon already running?\n"
sys.stderr.write(message.format(self.pidfile))
sys.exit(1)
# Start the daemon
self.daemonize()
self.run()
派生:
#!/usr/bin/env python
import sys, time
from Deamon import Deamon
import logging.handlers
logger = logging.getLogger(__name__)
fh = logging.handlers.RotatingFileHandler('./logs/application.log', maxBytes=10240, backupCount=5)
fh.setLevel(logging.INFO) # no matter what level I set here
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
class MyDaemon(Deamon):
def run(self):
while True:
time.sleep(1)
logger.info('Inside Running Method')
它只能在父类的init方法中工作我期望 tailf -f application.log 文件并查看日志消息。我怎样才能让它发挥作用?
我还想知道是否可以将记录器传递给派生,以便派生中不需要 redfine 日志记录对象我也在 pycharm 中调试它,没有异常(exception),它在 run 方法中循环但不记录日志。
最佳答案
您应该创建一个指向您的日志对象的局部变量。来自 logging docs :
Multiple calls to getLogger() with the same name will always return a reference to the same Logger object.
因此,首先设置了记录器对象,然后无论您想要在何处记录某些内容,都可以调用 getLogger()
。在您的类(class)中,最好在 __init__
中完成并创建一个实例属性,即:
self.log = logging.getLogger()
关于python 日志记录对象日志仅在 _init_ 方法内部起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48356422/
我是 python 初学者。我无法理解 None 类型的简单事物。当我在构造函数中为我的参数分配 None 值时。我得到错误。这是什么把戏。错误代码: class A(object): def _
我想在我的 _init_ 方法中使用一个参数 'term'。如您所见,当 _init 方法获取此参数时,我想将其用作我的数据库集合的名称并将数据插入其中。但是我不知道如何在整个类中使用 _init 中
尝试在 python deamon 类中使用日志记录,这里是父 deamon 类和派生类 import sys, os, time, atexit, signal import logging.han
我在一个小的测试程序中使用 SQLite,最近搬到了 Postgres。但是,当我尝试将用户添加到我的数据库时,我现在遇到了问题。我没有在 Postgres 上的 SQLite 上遇到这个问题。 我的
以下代码片段来自SQLAlchemy source code : class EngineStrategy(object): """An adaptor that processes inpu
我正在使用 monkeyrunner 测试 Android UI。我成功地使用 MonkeyRunner 使用 startActivity(component) 启动了一个 Activity 。但是现
我是 Python 和 BuildBot 的全新用户。目前我正在使用电子邮件警报当 BuildBot 构建状态发生变化(从成功变为失败,反之亦然)时,每次构建失败时都会通过电子邮件发送失败信息。我在尝
我不确定这里怎么有 3 个争论,如果是这样,我如何从 items.py 调用 DmozItem?这似乎是我缺少的一个简单的继承问题。此代码是直接从scrapy教程网站复制的。 -- 外壳错误 -- S
我是一名优秀的程序员,十分优秀!