UsingSyslog: Difference between revisions
(→Tips) |
|||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
= Basis = | = Basis = | ||
==Calling syslog method from shell== | |||
To do that, use '''logger''' command : | |||
<pre class="target"> | |||
# logger -t "MYTAGNAME" "I like otters with cream" | |||
</pre> | |||
You can then see the message in /var/log/messages: | |||
<pre class="target"> | |||
# tail /var/log/messages | |||
... | |||
Oct 16 16:50:13 armadeus user.notice MYTAGNAME: I like otters with cream | |||
</pre> | |||
==Calling syslog method from your C source code== | ==Calling syslog method from your C source code== | ||
Line 83: | Line 95: | ||
</pre> | </pre> | ||
Then go to following menu : | Then go to following menu and choose your prefered syslog implementation ;-): | ||
<pre class="config"> | <pre class="config"> | ||
Target packages ---> | |||
System tools ---> | System tools ---> | ||
... | ... | ||
[ ] rsyslog | [ ] rsyslog | ||
[ ] | ... | ||
[ ] sysklogd | |||
... | |||
[ ] syslog-ng | |||
... | ... | ||
</pre> | </pre> | ||
== Tips == | |||
* By default logs are not persistent (/var/log points to /tmp). To have persistent logs with rotation every 1Mbytes, one can try to add this to his post_build.sh script: | |||
<source lang="bash"> | |||
# for persistent and rotating log messages | |||
rm -rf $1/var/log | |||
mkdir $1/var/log | |||
sed -i -e 's/SYSLOGD_ARGS=""/SYSLOGD_ARGS="-s 1024 -b 10"/' $1/etc/init.d/S01syslogd | |||
</source> |
Latest revision as of 14:52, 10 October 2025
Basis
Calling syslog method from shell
To do that, use logger command :
# logger -t "MYTAGNAME" "I like otters with cream"
You can then see the message in /var/log/messages:
# tail /var/log/messages ... Oct 16 16:50:13 armadeus user.notice MYTAGNAME: I like otters with cream
Calling syslog method from your C source code
This part is quite simple, but we need to correctly use each parameter. First step is to declare us as syslog client :
...
#include <syslog.h>
int main(int argc, char *argv[])
{
...
openlog("program_name", LOG_PID, LOG_USER);
...
closelog();
...
}
Then, you can call syslog from your code using printf like format :
...
syslog(LOG_INFO, "%s called with %d arguments\n", argv[0], argc);
...
If you compile the source file:
// log_syslog.c
#include <syslog.h>
int main(int argc, char *argv[])
{
openlog("program_name", LOG_PID, LOG_USER);
syslog(LOG_INFO, "%s called with %d arguments", argv[0], argc - 1);
closelog();
return 0;
}
With the command :
itsme@mycomputer:~/log_syslog$ gcc log_syslog.c -o log-syslog
Then run it 2 times :
itsme@mycomputer:~/log_syslog$ ./log_syslog itsme@mycomputer:~/log_syslog$ ./log_syslog pim pam poum
You will probably obtain no result in shell, but you can take a look in your system log (/var/log/syslog or /var/log/messages)
itsme@mycomputer:~/log_syslog$ tail -n 2 /var/log/syslog Sep 19 18:46:49 mycomputer program_name[3022]: ./log_syslog called with 0 arguments Sep 19 18:46:53 mycomputer program_name[3023]: ./log_syslog called with 3 arguments
We can notice, that the lines contain program_name[PID] pattern showing us the name we have specified in openlog and the pid of the process because we ask it with LOG_PID argument.
Packages
Busybox
By default, syslog is managed by busybox, it can be configured using menuconfig :
$ make busybox-menuconfig
The configuration menu can be found here :
System Logging Utilities --->
Buildroot packages
Some other packages are available under buildroot. To see it launch buildroot menuconfig :
$ make menuconfig
Select option :
Package Selection for the target ---> [*] Show packages that are also provided by busybox
Then go to following menu and choose your prefered syslog implementation ;-):
Target packages ---> System tools ---> ... [ ] rsyslog ... [ ] sysklogd ... [ ] syslog-ng ...
Tips
- By default logs are not persistent (/var/log points to /tmp). To have persistent logs with rotation every 1Mbytes, one can try to add this to his post_build.sh script:
# for persistent and rotating log messages
rm -rf $1/var/log
mkdir $1/var/log
sed -i -e 's/SYSLOGD_ARGS=""/SYSLOGD_ARGS="-s 1024 -b 10"/' $1/etc/init.d/S01syslogd