编程语言
首页 > 编程语言> > Python记录到同一文件,不同用户

Python记录到同一文件,不同用户

作者:互联网

我正在使用python的日志记录模块.

对于单元测试(每次使用py.test),每次启动测试时,一些日志信息都会进入某个文件.在集成服务器中,每当有人推送代码时(我们也使用git :),我们都会运行测试.

问题在于,一旦用户B创建了文件,当用户B尝试运行测试时,由于用户B没有写相同文件的权限,测试将失败.

到目前为止,我们已经手动更改了文件权限,但是看起来像是一个肮脏的解决方案.同样,我们虽然为每个用​​户创建了一个日志文件,但是同样,感觉也不对.

我们用于测试记录的代码是

logging.basicConfig(level=logging.DEBUG,
    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
    datefmt='%m-%d %H:%M',
    filename='/tmp/py.test.log',
    filemode='w')
log.setLevel(logging.DEBUG)
log.addHandler(logging.StreamHandler())

有办法避免这个问题吗?也许使用filemode =’a’可以做到,但是假设我每次都想要一个新文件(说实话,这是一个真正的问题,出于好奇,我还是想做对)

谢谢 :)

解决方法:

听起来好像日志记录过程正在尝试在另一个用户拥有的现有文件之上进行写入.这是允许组日志组对目录logdir进行组访问的过程.

>使包含目录可写.

$chgrp loggroup logdir
$chmod g+w logdir

>在logdir上设置setgid位.这使得logdir中的新文件始终归该组所有.否则,新文件归创建者组所有.

$chmod g+s logdir

>确保所有日志记录用户都属于日志组.

$usermod -a -G loggroup myuser

>确保所有写入过程都具有正确的umask,以便它们可以使新创建的文件成组可写.

$umask 0002

>现在,日志组组的所有成员都可以在logdir中创建文件,并覆盖彼此的文件.

标签:logging,file-permissions,linux,python
来源: https://codeday.me/bug/20191127/2074169.html