If anyone is wondering why their log messages are appearing in multiple log files, here is one answer applying to *nix systems:
If your syslog.conf looks like this (assuming you use LOG_LOCAL0 for web app logging) :
local0.info /var/log/web/info.log
This will collect *all* messages of LOG_INFO level and higher, i.e everything except debug messages
Try this instead to ensure that only messages of the named log level go into the relevant log file:
local0.=info /var/log/web/info.log
Additionally, you may like to add this to ensure your messages don't end up in generic log files like "messages" "all" "syslog" and "debug":
local0.none /var/log/messages
local0.none /var/log/debug
etc
saves disk space among other things - more at "man syslog.conf"
syslog
(PHP 4, PHP 5)
syslog — Bir sistem günlüğü iletisi üretir
Açıklama
syslog() işlevi sistem günlük yöneticisi tarafından dağıtılacak bir günlük iletisi üretir.
Kullanıcı tanımlı bir günlük eylemci tanımlamak için gerekli bilgileri syslog.conf (5) Unix kılavuz sayfasında bulabilirsiniz. Unix sistemlerindeki syslog oluşumları ve seçenekleri hakkında daha fazla bilgi için syslog (3) kılavuz sayfasına bakınız.
Değiştirgeler
- öncelik
-
öncelik , oluşum ve düzeyin birleşimidir. Olası değerler:
syslog() Öncelikleri (azalan sırada) Sabit Açıklama LOG_EMERG sistem kullanışsız LOG_ALERT eylem hemen ele alınmalı LOG_CRIT hayati durum LOG_ERR hata durumları LOG_WARNING uyarı durumları LOG_NOTICE normal, fakat önemli durum LOG_INFO bilgilendirme iletisi LOG_DEBUG hata ayıklama iletisi - ileti
-
Gönderilecek ileti; mevcut errno değerine karşı düşen hata iletisi dizgesinin (strerror) yerleştirileceği %m karakterleri hariç.
Dönen Değerler
Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.
Örnekler
Örnek 1 - syslog() kullanımı
<?php
// syslog'u aç, süreç kimliğini dahil edip günlüğü ayrıca
// standart hataya gönder ve kullanıcı tanımlı günlük kayıt
// mekanizmasını kullan
openlog("Betik günlüğüm", LOG_PID | LOG_PERROR, LOG_LOCAL0);
// bazı kodlar
if (authorized_client()) {
// bir şeyler yap
} else {
// yetkisiz istemci!
// olayı günlüğe kaydet
$access = date("d/m/Y H:i:s");
syslog(LOG_WARNING, "Yetkisiz istemci: ".
$access." {$_SERVER['REMOTE_ADDR']} ({$_SERVER['HTTP_USER_AGENT']})");
}
closelog();
?>
Notlar
Windows NT'de, syslog hizmeti Event Log kullanılarak taklit edilir.
Bilginize: openlog() işlevinin oluşum değiştirgesinin değerlerinden LOG_LOCAL0'dan LOG_LOCAL7'ye kadar olanlar Windows'ta geçersizdir.
Ayrıca Bakınız
- openlog() - Sistem günlükçüsüne erişim için bağlantı açar
- closelog() - Sistem günlükçüsü bağlantısını kapatır
syslog
03-Dec-2007 04:26
13-Apr-2007 12:49
If you are using syslog-ng and want errors send to syslog then use ini setting "error_log = syslog" and add something like the following to your syslog-ng.conf:
destination php { file("/var/log/php.log" owner(root) group(devel) perm(0620)); };
log { source(src); filter(f_php); destination(php); };
11-Apr-2007 01:32
Be aware when using syslog() that if you set the timezone of environment to be something other than the standard, syslog() may log the time to the log(s) with the wrong time zone information. For example:
<?php
openlog('mylog', LOG_PID | LOG_ODELAY,LOG_LOCAL4);
putenv('TZ=UTC');
syslog(LOG_INFO, 'UTC Log line');
putenv('TZ=US/Pacific');
syslog(LOG_INFO, 'US/Pacific Log line');
closelog();
?>
Viewing the /usr/log/messages log will display these two lines:
Apr 11 01:25:39 hostname mylog[1400]: UTC Log line
Apr 10 18:25:39 hostname mylog[1400]: US/Pacific Log line
Adam.
23-Apr-2004 01:27
I had a problem trying to issue a syslog message with IIS 5.1 under Windows XP. The function call seemed to succeed, but the event viewer showed that no entry was made.
Finally I found out that the user account used for the webserver (IUSR_<Computername>) did not have enough permissions to issue syslog alerts. I changed this by adding this user to the Users group instead of only Guest.
06-Nov-2003 07:00
This work for me, to redirect logs to a separate syslog file
put this line in your /etc/syslog.conf :
local0.debug /var/log/php.log
Then restart syslogd:
/etc/init.d/syslog restart
php example:
<?php
define_syslog_variables();
openlog("TextLog", LOG_PID, LOG_LOCAL0);
$data = date("Y/m/d H:i:s");
syslog(LOG_DEBUG,"Messagge: $data");
closelog();
?>
29-Jul-2003 12:05
The message string sent to the log file is limited to 500 characters.
03-Jul-2003 06:05
If you have php.ini setup to send PHP errors to syslog, they will all get dumped into /var/log/messages (at least it does with RedHat 9 by default). I wanted to figure out how to get PHP errors to go to their own syslog file.
After some trial and error, I figured out what facility and priority PHP uses, which is "user.notice". So, to get your PHP errors going to a separate syslog file, put this line in your /etc/syslog.conf :
user.notice /var/log/php.log
Then restart syslogd:
/etc/init.d/syslog restart
Why PHP uses "user" as the facility I'm not sure, probably because it's the only one that works under Windows?
Monte
31-Mar-2002 04:32
This *does* actually goto the system log as configured in /etc/syslog.conf (such as /var/log/messages), it doesn't goto Apache's ErrorLog (such as /var/log/httpd/error_log). At least under my Debian Potato with Apache 1.3.23.
Use error_log() to be sure it gets into Apache's ErrorLog.
30-Jan-2002 12:08
To set up a custom log file via the syslog daemon (FreeBSD in this case)...
Add to /etc/syslog.conf a line that says all errors from the httpd process are to go to a file called (for example) /var/log/httpd-php.log
!httpd
*.* {tab} /var/log/httpd-php.log
Note the tab, being a tab character! Next create a blank file to be written to. I'm sure there are 1e+6 ways to do this, but I choose
# cat > httpd-php.log << EOF
? EOF
Finally find your syslog daemon and send it a sighup to inform it of the change:
# ps ax | grep syslogd
133 ?? Ss 0:07.23 syslogd -s
# kill -1 133
Et voila! Php syslog calls will now arrive in /var/log/httpd-php.log
22-Jan-2001 02:11
With FreeBSD I can use: syslog(LOG_INFO,"test");
BSD/OS does not support this, I had to use the literal values for the priority (158: local3.info):
syslog(158,"test");
20-Dec-2000 09:09
Example of where to look for syslog's output: /var/log/httpd/access_log
(on Red Hat Linux Secure Server v6.2).
17-Feb-2000 08:51
For the-header-file-enabled:
man 3 syslog defines the priorities, but not the integer values. For that you'll need to read your system header file.
Let's suppose I want to log an informational message in the mail log (which happens to be true). The man page tells me I want LOG_MAIL|LOG_INFO. So I look in /usr/include/sys/syslog.h and find (this happens to be Linux, your system could be different):
#define LOG_INFO 6 /* informational */
#define LOG_MAIL (2<<3) /* mail system */
2<<3 means shift 3 bits left, which means multiply by 8. So I want 2*8 + 6 = 22. syslog(22,"this message will appear in the mail log"); And indeed it does.
08-Sep-1999 10:54
In Windows NT, use the following values of priority:
1 = error,
6 = info
