(L)ubuntu 12.04 syslog to custom file (not /var/log/syslog but /var/log/mylog) - ubuntu 12.04

13,330

Solution 1

Here's how I succeeded.

In my folder /etc/rsyslog.d there are two files:

20-ufw.conf and 50-default.conf

I added a file:

sudo nano /etc/rsyslog.d/30-mycustomname.conf

With the following content:

# Log QSD Centro generated log messages to file
if $programname == 'centro' then /var/log/centro.log
# Uncomment the following to stop logging anything that matches the last rule.
& ~

Then I check that the file /var/log/centro.log does not exist

sudo rm -f /var/log/centro.log

Then I restart the service

sudo service rsyslog restart

Finally The following code works:

// gcc centro.c -o centro

#include <stdio.h>
#include <syslog.h>

int  main(int argc, char *argv[])
{
    openlog(NULL, 0, LOG_USER);

    syslog(LOG_INFO, "MORTACCI TUA!!!");

    closelog();
    return 0;
}

Solution 2

By default Ubuntu uses rsyslog. It's configuration files are in

/etc/rsyslog.conf

And

/etc/rsyslog.conf
Share:
13,330

Related videos on Youtube

giuspen
Author by

giuspen

Software development engineer, active open source developer.

Updated on September 18, 2022

Comments

  • giuspen
    giuspen over 1 year

    I successfully tested the following syslog "hello world" example on ubuntu 12.04:

    // gcc giuspexample.c -o giuspexample
    
    #include <syslog.h>
    
    int  main(int argc, char *argv[])
    {
        setlogmask(LOG_UPTO (LOG_NOTICE));
    
        openlog("atm", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL0);
    
        syslog(LOG_NOTICE, "Program started by User %d", getuid ());
        syslog(LOG_INFO, "A tree falls in a forest");
    
        closelog();
        return 0;
    }
    

    and I can read the entry in /var/log/syslog. I followed the instructions on http://www.codealias.info/technotes/syslog_simple_example on how to change the destination filepath

    echo "local0.*  /var/log/mylog" >> /etc/syslog.conf
    

    but trying to run

    sudo /etc/init.d/syslog restart
    

    doesn't work (command not found) and rebooting the pc anyway doesn't start to write on /var/log/mylog but still on /var/log/syslog. Does anybody know what's wrong? Thanks.

  • giuspen
    giuspen almost 12 years
    Thanks, I tried to add the line "local0.* /var/log/mylog" at the end of /etc/sysctl.conf but after rebooting the pc still doesn't log to /var/log/mylog
  • pappu
    pappu almost 12 years
    are you using syslog-ng ? I am running Precise. "sudo apt-cache search syslog" returns syslog-ng but not syslog. You may have to install that first.
  • pappu
    pappu almost 12 years
    OK. That seems to be the case on my system as well. /etc/rsyslog.conf is the conf file for that. This explains why sudo /etc/init.d/syslog restart did not work. It's rsyslog and not plain old syslog. man rsyslog and man /etc/rsyslog.conf will help you out. It says: " For more information see /usr/share/doc/rsyslog‐doc/html/rsys‐log_conf.html # # Default logging rules can be found in /etc/rsyslog.d/50‐default.conf
  • giuspen
    giuspen almost 12 years
    I did write to /etc/rsyslog.d/50-default.conf but with no result. I started to doubt that my C code is not correct for rsyslog but found no example specific for rsyslog and no other header other than syslog.h on my installation. Tried more filters posted in different forums for rsyslog and custom log file but nothing worked :(
  • pappu
    pappu almost 12 years
    I notice you are opening log atm. Can you try writing to one of the other logs? If you can then it is not your C program but the system configs that keeps you from writing to your custom log.
  • giuspen
    giuspen almost 12 years
    I posted the way I had the logging work to custom file. Many thanks for the help.
  • tolga9009
    tolga9009 almost 12 years
    Works great also on Fedora 16.
  • dmourati
    dmourati over 10 years
    Nice one. This fixed my issue of ordering that was driving me crazy.