Answers:
您不能以普通用户的身份写入/ var / log,但是syslog守护程序会为您执行此操作。如果您想将消息记录到标准系统日志中(例如/var/log/syslog
),则4.4BSD实用程序logger
可能在您的系统上可用。它默认安装在Debian上,并且bsdutils
在Debian派生软件包中。
您将获得任何预先存在的日志轮转,维护和监视工具的优点,其缺点是需要特权来读取系统日志,并且需要将脚本的消息与其他程序的消息混合在一起。
$ logger Hello
$ echo Goodbye | logger
$ sudo tail -2 /var/log/syslog
Feb 19 21:16:15 debian-host jander: Hello
Feb 19 21:16:21 debian-host logger: Goodbye
有几个可用的配置选项。您可以在中阅读更多内容man logger
。
syslog
是一个C库函数和C ++可以任何C使用调用extern "C"
。其他语言通常提供对任何C的泛型绑定或对特定事物的绑定,但这取决于语言。
如果您作为普通用户决定运行程序,则其日志的自然位置位于您的主目录中。您的主目录用于存储所有文件,无论它们是您运行的程序的日志还是其他任何文件。
如果该程序是作为系统的一部分执行的,并且以通常专用的系统用户身份运行,则其日志的自然位置为/var/log
。创建一个子目录/var/log/myapp
并为其赋予适当的权限,以便您的应用程序可以在其中写入。
如果相关并且您的操作系统允许,请将日志文件标记为仅追加。只有root可以执行此操作。这样做的好处是,如果您的应用程序受到威胁,它将无法删除过去的日志,这对于对威胁的取证分析非常有用。您将需要root的干预来旋转日志:chown
这样应用程序将无法再打开rename
日志文件,日志文件,创建具有适当所有权的新的仅追加文件,然后通知应用程序打开新的空文件。
通常,对于守护程序,将通过创建日志文件root
然后更改权限,以便非特权用户可以写入该文件。logrotate
然后设置为在轮换期间保留权限。
如果是命令而不是守护程序,则登录/tmp
(最好使用mktemp
)并通过STDOUT
日志的位置通知用户。
&
以避免出现提示提示,但开始将dropbox写入控制台。我目前正在将其输出重定向到/dev/null
,但是如果Dropbox无法启动,则想用某种方法进行调试。
chmod
。通常,0644
或0664
,并且用户/组的所有权也更改为预期向其写入的守护程序的所有权。
我对用户空间程序的印象是默认情况下会丢弃日志。我见过各种程序都可以随意转储日志,在我的系统上从来没有特别欢迎它。倾向于在除非/直到它变得巨大之前从未发现过的某个地方聚集。
我希望有一个适合他们的地方,我正在我的系统上玩耍,试图为他们找到一个稳定的地方。
我的第一个想法是使用/var/run/user/$UID/log
,但是发现在我的系统上这是TMPFS挂载,不够大,或者真的很适合与日志一起使用。
由于我对/ var / run / user的理解不够充分,无法与之集成,因此我选择手动模拟1000用户。
# mkdir /var/log/user
# install -d /var/log/user/1000 --owner 1000 -g 1000 -m 0700
我建议坚持使用FHS / var / log spc作为该文件夹中的结构,但该规范为自由格式,因此没有太多要遵循的规范。
您的系统提供的此目录上没有现有的日志轮换,我建议为您的系统创建一个:
# /etc/logrotate.d/userlogs
/var/log/user/*/log/*.log
/var/log/user/*/log/**/*.log
{
daily
missingok
rotate 7
compress
notifempty
nocreate
}
以下是我之前的/ var / run / user / 1000 / log帖子,除非您真的知道自己在做什么,否则我不建议您这样做(如果这样做,请告诉我怎么做!)
也许如下,但我只是弥补了这一点,因为这对我来说很有意义。
/var/run/user/1000/log/<app>.log
/var/run/user/1000/log/<app>/<context>.log
与/ var / log / user / 1000集成:
# Integrate with above /var/run/user, probably a bad idea:
# ln -s /var/log/user/1000/ /var/run/user/1000/log