1 | // |
---|
2 | // RemoteSyslogChannel.h |
---|
3 | // |
---|
4 | // $Id: //poco/1.3/Net/include/Poco/Net/RemoteSyslogChannel.h#2 $ |
---|
5 | // |
---|
6 | // Library: Net |
---|
7 | // Package: Logging |
---|
8 | // Module: RemoteSyslogChannel |
---|
9 | // |
---|
10 | // Definition of the RemoteSyslogChannel class. |
---|
11 | // |
---|
12 | // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. |
---|
13 | // and Contributors. |
---|
14 | // |
---|
15 | // Permission is hereby granted, free of charge, to any person or organization |
---|
16 | // obtaining a copy of the software and accompanying documentation covered by |
---|
17 | // this license (the "Software") to use, reproduce, display, distribute, |
---|
18 | // execute, and transmit the Software, and to prepare derivative works of the |
---|
19 | // Software, and to permit third-parties to whom the Software is furnished to |
---|
20 | // do so, all subject to the following: |
---|
21 | // |
---|
22 | // The copyright notices in the Software and this entire statement, including |
---|
23 | // the above license grant, this restriction and the following disclaimer, |
---|
24 | // must be included in all copies of the Software, in whole or in part, and |
---|
25 | // all derivative works of the Software, unless such copies or derivative |
---|
26 | // works are solely in the form of machine-executable object code generated by |
---|
27 | // a source language processor. |
---|
28 | // |
---|
29 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
---|
30 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
---|
31 | // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT |
---|
32 | // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE |
---|
33 | // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, |
---|
34 | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
---|
35 | // DEALINGS IN THE SOFTWARE. |
---|
36 | // |
---|
37 | |
---|
38 | |
---|
39 | #ifndef Net_RemoteSyslogChannel_INCLUDED |
---|
40 | #define Net_RemoteSyslogChannel_INCLUDED |
---|
41 | |
---|
42 | |
---|
43 | #include "Poco/Net/Net.h" |
---|
44 | #include "Poco/Channel.h" |
---|
45 | #include "Poco/Net/DatagramSocket.h" |
---|
46 | |
---|
47 | |
---|
48 | namespace Poco { |
---|
49 | namespace Net { |
---|
50 | |
---|
51 | |
---|
52 | class Net_API RemoteSyslogChannel: public Poco::Channel |
---|
53 | /// This Channel implements remote syslog logging over UDP according |
---|
54 | /// to the syslog Working Group Internet Draft: |
---|
55 | /// "The syslog Protocol" <http://www.ietf.org/internet-drafts/draft-ietf-syslog-protocol-17.txt>, |
---|
56 | /// and "Transmission of syslog messages over UDP" <http://www.ietf.org/internet-drafts/draft-ietf-syslog-transport-udp-07.txt>. |
---|
57 | /// |
---|
58 | /// In addition, RemoteSyslogChannel also supports the "old" BSD syslog |
---|
59 | /// protocol, as described in RFC 3164. |
---|
60 | { |
---|
61 | public: |
---|
62 | static const std::string BSD_TIMEFORMAT; |
---|
63 | static const std::string SYSLOG_TIMEFORMAT; |
---|
64 | |
---|
65 | enum Severity |
---|
66 | { |
---|
67 | SYSLOG_EMERGENCY = 0, /// Emergency: system is unusable |
---|
68 | SYSLOG_ALERT = 1, /// Alert: action must be taken immediately |
---|
69 | SYSLOG_CRITICAL = 2, /// Critical: critical conditions |
---|
70 | SYSLOG_ERROR = 3, /// Error: error conditions |
---|
71 | SYSLOG_WARNING = 4, /// Warning: warning conditions |
---|
72 | SYSLOG_NOTICE = 5, /// Notice: normal but significant condition |
---|
73 | SYSLOG_INFORMATIONAL = 6, /// Informational: informational messages |
---|
74 | SYSLOG_DEBUG = 7 /// Debug: debug-level messages |
---|
75 | }; |
---|
76 | |
---|
77 | enum Facility |
---|
78 | { |
---|
79 | SYSLOG_KERN = ( 0<<3), /// kernel messages |
---|
80 | SYSLOG_USER = ( 1<<3), /// random user-level messages |
---|
81 | SYSLOG_MAIL = ( 2<<3), /// mail system |
---|
82 | SYSLOG_DAEMON = ( 3<<3), /// system daemons |
---|
83 | SYSLOG_AUTH = ( 4<<3), /// security/authorization messages |
---|
84 | SYSLOG_SYSLOG = ( 5<<3), /// messages generated internally by syslogd |
---|
85 | SYSLOG_LPR = ( 6<<3), /// line printer subsystem |
---|
86 | SYSLOG_NEWS = ( 7<<3), /// network news subsystem |
---|
87 | SYSLOG_UUCP = ( 8<<3), /// UUCP subsystem |
---|
88 | SYSLOG_CRON = ( 9<<3), /// clock daemon |
---|
89 | SYSLOG_AUTHPRIV = (10<<3), /// security/authorization messages (private) |
---|
90 | SYSLOG_FTP = (11<<3), /// ftp daemon |
---|
91 | SYSLOG_NTP = (12<<3), /// ntp subsystem |
---|
92 | SYSLOG_LOGAUDIT = (13<<3), /// log audit |
---|
93 | SYSLOG_LOGALERT = (14<<3), /// log alert |
---|
94 | SYSLOG_CLOCK = (15<<3), /// clock deamon |
---|
95 | SYSLOG_LOCAL0 = (16<<3), /// reserved for local use |
---|
96 | SYSLOG_LOCAL1 = (17<<3), /// reserved for local use |
---|
97 | SYSLOG_LOCAL2 = (18<<3), /// reserved for local use |
---|
98 | SYSLOG_LOCAL3 = (19<<3), /// reserved for local use |
---|
99 | SYSLOG_LOCAL4 = (20<<3), /// reserved for local use |
---|
100 | SYSLOG_LOCAL5 = (21<<3), /// reserved for local use |
---|
101 | SYSLOG_LOCAL6 = (22<<3), /// reserved for local use |
---|
102 | SYSLOG_LOCAL7 = (23<<3) /// reserved for local use |
---|
103 | }; |
---|
104 | |
---|
105 | enum |
---|
106 | { |
---|
107 | SYSLOG_PORT = 514 |
---|
108 | }; |
---|
109 | |
---|
110 | RemoteSyslogChannel(); |
---|
111 | /// Creates a RemoteSyslogChannel. |
---|
112 | |
---|
113 | RemoteSyslogChannel(const std::string& address, const std::string& name, int facility = SYSLOG_USER, bool bsdFormat = false); |
---|
114 | /// Creates a RemoteSyslogChannel with the given target address, name, and facility. |
---|
115 | /// If bsdFormat is true, messages are formatted according to RFC 3164. |
---|
116 | |
---|
117 | void open(); |
---|
118 | /// Opens the RemoteSyslogChannel. |
---|
119 | |
---|
120 | void close(); |
---|
121 | /// Closes the RemoteSyslogChannel. |
---|
122 | |
---|
123 | void log(const Message& msg); |
---|
124 | /// Sends the message's text to the syslog service. |
---|
125 | |
---|
126 | void setProperty(const std::string& name, const std::string& value); |
---|
127 | /// Sets the property with the given value. |
---|
128 | /// |
---|
129 | /// The following properties are supported: |
---|
130 | /// * name: The name used to identify the source of log messages. |
---|
131 | /// * facility: The facility added to each log message. See the Facility enumeration for a list of supported values. |
---|
132 | /// The LOG_ prefix can be omitted and values are case insensitive (e.g. a facility value "mail" is recognized as SYSLOG_MAIL) |
---|
133 | /// * format: "bsd" (RFC 3164 format) or "new" (default) |
---|
134 | /// * loghost: The target IP address or host name where log messages are sent. Optionally, a port number (separated |
---|
135 | /// by a colon) can also be specified. |
---|
136 | /// * host: (optional) Host name included in syslog messages. If not specified, the host's real domain name or |
---|
137 | /// IP address will be used. |
---|
138 | |
---|
139 | std::string getProperty(const std::string& name) const; |
---|
140 | /// Returns the value of the property with the given name. |
---|
141 | |
---|
142 | static void registerChannel(); |
---|
143 | /// Registers the channel with the global LoggingFactory. |
---|
144 | |
---|
145 | static const std::string PROP_NAME; |
---|
146 | static const std::string PROP_FACILITY; |
---|
147 | static const std::string PROP_FORMAT; |
---|
148 | static const std::string PROP_LOGHOST; |
---|
149 | static const std::string PROP_HOST; |
---|
150 | |
---|
151 | protected: |
---|
152 | ~RemoteSyslogChannel(); |
---|
153 | static int getPrio(const Message& msg); |
---|
154 | |
---|
155 | private: |
---|
156 | std::string _logHost; |
---|
157 | std::string _name; |
---|
158 | std::string _host; |
---|
159 | int _facility; |
---|
160 | bool _bsdFormat; |
---|
161 | DatagramSocket _socket; |
---|
162 | bool _open; |
---|
163 | }; |
---|
164 | |
---|
165 | |
---|
166 | } } // namespace Poco::Net |
---|
167 | |
---|
168 | |
---|
169 | #endif // Net_RemoteSyslogChannel_INCLUDED |
---|