我在桌面上运行了一个linux应用程序,我想将syslog()调用重定向到printf()调用.
注:我不希望更换电话,只是重定向
所以我写了一些代码来做到这一点:
#ifndef EMBED
#define syslog(level, stuff) printf("SYSLOG: %s\n", stuff)
#endif
Run Code Online (Sandbox Code Playgroud)
在我使用它的一个文件中工作得很好.我将其移动到一个新文件并收到错误:
error: macro "syslog" passed 3 arguments, but takes just 2
Run Code Online (Sandbox Code Playgroud)
我知道错误是因为新文件中的调用是混合的,有些是使用2个参数连接到syslog,有些是使用3.我也知道我需要以某种方式通过变量参数列表重定向这个,但我该怎么做?我还没有工作呢......
据我了解,syslog()和printf()应该是:
void syslog(int priority, const char *format, ...)
int printf(const char *format, ...)
Run Code Online (Sandbox Code Playgroud)
所以我尝试过:
#define ERR 3
#ifndef EMBED // This is not defined in my env, btw
#define syslog(pri, fmt, ...) printf(fmt, ...)
#endif
...
void main() {
...
syslog(ERR, "test");
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误:
error: expected expression before ‘...’ token
Run Code Online (Sandbox Code Playgroud)
关于如何使用这个宏的建议?
我正在尝试使用标准Linux syslogger配置Python应用程序以记录到/ var/log/messages.但是,当我尝试创建syslog处理程序时,我收到错误socket.error: [Errno 111] Connection refused
.
>>> import logging
>>> import logging.handlers
>>> logger = logging.getLogger("my_logger")
>>> logger.setLevel(logging.DEBUG)
>>> handler = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON, address="/var/log/messages")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/logging/handlers.py", line 715, in __init__
self._connect_unixsocket(address)
File "/usr/lib64/python2.6/logging/handlers.py", line 731, in _connect_unixsocket
self.socket.connect(address)
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused
Run Code Online (Sandbox Code Playgroud)
/etc/rsyslog.conf配置了以下行:
kern.notice;*.err;local0.info;mail.none;authpriv.none;cron.none;local1.none;daemon.notice /var/log/messages
Run Code Online (Sandbox Code Playgroud)
我猜这个问题是在syslog配置中的某个地方,但据我所知,我做了正确的事情:
还有什么我应该做的才能使这项工作?
以前我刚刚使用了一个,logging.FileHandler
但是当消息文件换行时,这不能正常工作,Python继续记录到旧文件.
我使用SysLogHandler配置了一个Python记录器,并作为测试使用所有级别记录了一些消息:debug,info,warning,error,critical.如果我运行'syslog'或者我查看Console.app显示,我会看到所有消息.因此,所有消息都被正确记录.但是,当我tail /var/log/messages.log
没有看到DEBUG和INFO消息时.我读到了ASL,我看到一个名为/var/log/asl
full of binary files的目录,但是我根本不明白它是如何与syslog交互的.
我创建了自己的 C 库,我的同事打算使用它。在这个包装器中,我打算使用syslog
并根据输入参数,我希望在LOCAL0
和之间切换LOCAL1
。
我发现的最简单的方法是openlog()
使用LOCAL0
or LOCAL1
,取决于输入参数,然后使用syslog()
and `closelog()。
我在同一个包装器 API 中拥有所有 3 个(类似于下面的内容):
void syslog_wrap_api(int flag, const char *msg)
{
setlogmask(LOG_UPTO (LOG_INFO));
if(flag == 0)
openlog("myapplog",LOG_NDELAY,LOG_LOCAL0);
else
openlog("myapplog",LOG_NDELAY,LOG_LOCAL1);
syslog(LOG_INFO,"%s",msg);
closelog()
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这个 API 会不会在压力下导致问题(性能问题)?
--log-driver="syslog"
在OS X上使用时出现docker错误
我正在尝试学习如何docker
在OS X上使用容器(10.10.3),我理解与标准Linux实现的差异(需要boot2docker VM),我想知道我是否可以使用syslog记录消息的方式有任何影响
当我使用该--log-driver="syslog"
选项启动容器时,会创建容器但是在启动时出现错误
~$ docker run --log-driver="syslog" --name daemon_dwayne -d ubuntu /bin/sh -c "while true; do echo hello_world; sleep 2; done;"
1f623793049916d5c....
FATA[0000] Error response from daemon: Cannot start container 1f623793049916d5....: Unix syslog delivery error
Run Code Online (Sandbox Code Playgroud)
这在Linux机器上正常运行...感谢任何提示
在某些条件下/var/log/syslog
文件被保存到 /var/log/syslog.0
一个新的空/var/log/syslog
创建来为系统服务。
问题是 - 如果tail -f /var/log/syslog
在上述切换期间运行,则tail
停止显示任何内容,因为syslog
文件切换。
有什么解决办法吗?
我需要澄清一下,我不打算为日志输出着色,我只对写入syslog
.
所以这里是场景,我有一个systemd
运行脚本的单元服务,它指示 Bash 中的 256 种颜色。
这是服务单元文件:
[Unit]
Description=Bash Color Service
[Service]
Type=simple
EnvironmentFile=/etc/environment
ExecStart=/home/username/colors.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=bashcolors
Restart=on-failure
RestartSec=10
User=username
Group=username
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
这是下面的 Bash 脚本/home/username/colors.sh
(从这里抓取):
#!/bin/bash
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的webapp日志记录到local4级别的syslog中.环境:Tomcat6,OpenSolaris,Struts2,log4j.我的log4j.properties的内容如下 -
log4j.rootLogger=INFO, SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%d [%t] %-5p - %m%n
log4j.appender.SYSLOG.Facility=local4
Run Code Online (Sandbox Code Playgroud)
我编辑了/etc/syslog.conf并在最后添加了以下行 -
local4.notice /var/log/mylog.log
Run Code Online (Sandbox Code Playgroud)
在此之后,我重新启动了syslog服务.当我从shell运行以下命令时,它会正确记录在/var/log/mylog.log中.这主要意味着系统日志服务正常运行 -
logger -i -p local4.notice -t "check log" "test message"
Run Code Online (Sandbox Code Playgroud)
但我完全不明白为什么来自webapp的日志永远不会到达/var/log/mylog.log.我的log4j配置对SysLogAppender是否正确?
当我尝试普通的appender,如"DailyRollingFileAppender"等,日志工作正常..但我只是无法让SyslogAppender工作..
谢谢!-Keshav
java.util.logging.Logger似乎实现了"类似syslog"的日志记录,我希望日志实际使用本地syslog日志记录功能(因此管理员的生活更容易;他们不需要进行额外的日志轮换,等等).
有人有什么建议吗?我看到log4j(http://logging.apache.org/log4j/1.2)声称他们有syslog支持,但它公开的API与syslog(8)完全不同.
提前致谢,
我是Python的完全noob.现在我正在设置一个新项目,在某些时候我不得不打电话./manage.py syncdb
.这是我收到的:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/handlers.py", line 820, in _connect_unixsocket
self.socket.connect(address)
FileNotFoundError: [Errno 2] No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py", line 557, in configure
handler = self.configure_handler(handlers[name])
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py", line 725, in configure_handler
result = factory(**kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/handlers.py", line 803, in __init__
self._connect_unixsocket(address)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/handlers.py", line 831, in _connect_unixsocket
self.socket.connect(address)
FileNotFoundError: [Errno 2] No such file or directory
During handling …
Run Code Online (Sandbox Code Playgroud)