php- syslog()

syslog

(PHP 3, PHP 4, PHP 5)

syslog — Generate a system log message

Description

bool syslog ( int priority, string message )

syslog() generates a log message that will be distributed by the system logger. priority is a combination of the facility and the level, values for which are given in the next section. The remaining argument is the message to send, except that the two characters %m will be replaced by the error message string (strerror) corresponding to the present value of errno.

表格 1. syslog() Priorities (in descending order)

Constant Description
LOG_EMERG system is unusable
LOG_ALERT action must be taken immediately
LOG_CRIT critical conditions
LOG_ERR error conditions
LOG_WARNING warning conditions
LOG_NOTICE normal, but significant, condition
LOG_INFO informational message
LOG_DEBUG debug-level message
例子 1. Using syslog()

<?php
define_syslog_variables
();
// open syslog, include the process ID and also send
// the log to standard error, and use a user defined
// logging mechanism
openlog("myScriptLog", LOG_PID | LOG_PERROR, LOG_LOCAL0);

// some code

if (authorized_client()) {
// do something
} else {
// unauthorized client!
// log the attempt
$access = date("Y/m/d H:i:s");
syslog(LOG_WARNING, "Unauthorized client: $access $_SERVER[REMOTE_ADDR] ($_SERVER[HTTP_USER_AGENT])");
}

closelog();
?>

For information on setting up a user defined log handler, see the syslog.conf(5) Unix manual page. More information on the syslog facilities and option can be found in the man pages for syslog(3) on Unix machines.

On Windows NT, the syslog service is emulated using the Event Log.

注: Use of LOG_LOCAL0 through LOG_LOCAL7 for the facility parameter of openlog() is not available in Windows.

See also define_syslog_variables(), openlog() and closelog().

add a note add a note User Contributed Notes

Torsten
23-Apr-2004 09: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.

daniele dot patoner at biblio dot unitn dot it
07-Nov-2003 03: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();
?>

gregj at pdxperts dot com
29-Jul-2003 08:05

The message string sent to the log file is limited to 500 characters.

monte at ispi dot net
04-Jul-2003 02: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

nospam \100 jraxis com (that’s right!)
01-Apr-2002 12: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.

dpreece at paradise dot net dot nz
30-Jan-2002 08: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

mavetju at chello dot nl
22-Jan-2001 10: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");

gherson at snet dot net
21-Dec-2000 05:09

Example of where to look for syslog's output:  /var/log/httpd/access_log
(on Red Hat Linux Secure Server v6.2).

rcgraves+php at brandeis dot edu
17-Feb-2000 04: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.

fwo at obsidian dot co dot za
10-Dec-1999 01:59

The text was taken directly out of a unix man page. On a unix system do man 3 syslog and you wil get the info

bb at lb-data dot co dot at
08-Sep-1999 06:54

In Windows NT, use the following values of priority:
1 = error,
6 = info
分類: 未分類

在〈php- syslog()〉中有 1 則留言

  1. singles sex encounters 回覆

    I do not normally do stuff like this, however I really feel including Doing anything enjoyable tonight so i am living from the edge a little tonight.I attempted this after just before along with the girl I singled out and had a date with turned out to be really clever, and had me fooled for a total week that she wasn’t a psycho.I moved here inside the final year, so I really do not know extremely a lot of people, and i am still becoming myself proven here.Maybe she has a bit bit of experience, or perhaps is completely new to the situation, or she basically could uncover it challenging to muster up the courage to ask for this kind of thing.All in all, we would have exchanged a single imperfect marriage for another, with a lot heartache and suffering in amongst for both ourselves and our children, and nobody could be any happier than they already were.

發表迴響