WebSocket++
0.8.4
C++ websocket client/server library
Toggle main menu visibility
Loading...
Searching...
No Matches
websocketpp
logger
syslog.hpp
1
/*
2
* Copyright (c) 2014, Peter Thorson. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
6
* * Redistributions of source code must retain the above copyright
7
* notice, this list of conditions and the following disclaimer.
8
* * Redistributions in binary form must reproduce the above copyright
9
* notice, this list of conditions and the following disclaimer in the
10
* documentation and/or other materials provided with the distribution.
11
* * Neither the name of the WebSocket++ Project nor the
12
* names of its contributors may be used to endorse or promote products
13
* derived from this software without specific prior written permission.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
* ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY
19
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
*
26
*
27
* The initial version of this logging policy was contributed to the WebSocket++
28
* project by Tom Hughes.
29
*/
30
31
#
ifndef
WEBSOCKETPP_LOGGER_SYSLOG_HPP
32
#
define
WEBSOCKETPP_LOGGER_SYSLOG_HPP
33
34
#
include
<
syslog
.
h
>
35
36
#
include
<
websocketpp
/
logger
/
basic
.
hpp
>
37
38
#
include
<
websocketpp
/
common
/
cpp11
.
hpp
>
39
#
include
<
websocketpp
/
logger
/
levels
.
hpp
>
40
41
namespace
websocketpp
{
42
namespace
log {
43
44
/// Basic logger that outputs to syslog
45
template
<
typename
concurrency,
typename
names>
46
class
syslog
:
public
basic
<concurrency, names> {
47
public
:
48
typedef
basic
<concurrency, names> base;
49
50
/// Construct the logger
51
/**
52
* @param hint A channel type specific hint for how to construct the logger
53
*/
54
syslog
(
channel_type_hint
::
value
hint =
55
channel_type_hint
::
access
)
56
:
basic
<concurrency,names>(hint), m_channel_type_hint(hint) {}
57
58
/// Construct the logger
59
/**
60
* @param channels A set of channels to statically enable
61
* @param hint A channel type specific hint for how to construct the logger
62
*/
63
syslog
(level channels,
channel_type_hint
::
value
hint =
64
channel_type_hint
::
access
)
65
:
basic
<concurrency,names>(channels, hint), m_channel_type_hint(hint) {}
66
67
/// Write a string message to the given channel
68
/**
69
* @param channel The channel to write to
70
* @param msg The message to write
71
*/
72
void
write
(level channel, std::string
const
& msg) {
73
write(channel, msg.c_str());
74
}
75
76
/// Write a cstring message to the given channel
77
/**
78
* @param channel The channel to write to
79
* @param msg The message to write
80
*/
81
void
write
(level channel,
char
const
* msg) {
82
scoped_lock_type lock(base::m_lock);
83
if
(!
this
->dynamic_test(channel)) {
return
; }
84
::syslog(syslog_priority(channel),
"[%s] %s"
,
85
names::channel_name(channel), msg);
86
}
87
private
:
88
typedef
typename
base::scoped_lock_type scoped_lock_type;
89
90
/// The default level is used for all access logs and any error logs that
91
/// don't trivially map to one of the standard syslog levels.
92
static
int
const
default_level = LOG_INFO;
93
94
/// retrieve the syslog priority code given a WebSocket++ channel
95
/**
96
* @param channel The level to look up
97
* @return The syslog level associated with `channel`
98
*/
99
int
syslog_priority(level channel)
const
{
100
if
(m_channel_type_hint ==
channel_type_hint
::
access
) {
101
return
syslog_priority_access(channel);
102
}
else
{
103
return
syslog_priority_error(channel);
104
}
105
}
106
107
/// retrieve the syslog priority code given a WebSocket++ error channel
108
/**
109
* @param channel The level to look up
110
* @return The syslog level associated with `channel`
111
*/
112
int
syslog_priority_error(level channel)
const
{
113
switch
(channel) {
114
case
elevel
::
devel
:
115
return
LOG_DEBUG;
116
case
elevel
::
library
:
117
return
LOG_DEBUG;
118
case
elevel
::
info
:
119
return
LOG_INFO;
120
case
elevel
::
warn
:
121
return
LOG_WARNING;
122
case
elevel
::
rerror
:
123
return
LOG_ERR;
124
case
elevel
::
fatal
:
125
return
LOG_CRIT;
126
default
:
127
return
default_level;
128
}
129
}
130
131
/// retrieve the syslog priority code given a WebSocket++ access channel
132
/**
133
* @param channel The level to look up
134
* @return The syslog level associated with `channel`
135
*/
136
_WEBSOCKETPP_CONSTEXPR_TOKEN_
int
syslog_priority_access(level)
const
{
137
return
default_level;
138
}
139
140
channel_type_hint
::
value
m_channel_type_hint;
141
};
142
143
}
// log
144
}
// websocketpp
145
146
#
endif
// WEBSOCKETPP_LOGGER_SYSLOG_HPP
websocketpp::log::basic
Basic logger that outputs to an ostream.
Definition
basic.hpp:59
websocketpp::log::syslog
Basic logger that outputs to syslog.
Definition
syslog.hpp:46
websocketpp::log::syslog::syslog
syslog(level channels, channel_type_hint::value hint=channel_type_hint::access)
Construct the logger.
Definition
syslog.hpp:63
websocketpp::log::syslog::write
void write(level channel, char const *msg)
Write a cstring message to the given channel.
Definition
syslog.hpp:81
websocketpp::log::syslog::write
void write(level channel, std::string const &msg)
Write a string message to the given channel.
Definition
syslog.hpp:72
websocketpp::log::syslog::syslog
syslog(channel_type_hint::value hint=channel_type_hint::access)
Construct the logger.
Definition
syslog.hpp:54
_WEBSOCKETPP_CONSTEXPR_TOKEN_
#define _WEBSOCKETPP_CONSTEXPR_TOKEN_
Definition
cpp11.hpp:134
websocketpp
Namespace for the WebSocket++ project.
Definition
asio_no_tls_client.hpp:34
websocketpp::log::channel_type_hint
Package of values for hinting at the nature of a given logger.
Definition
levels.hpp:46
websocketpp::log::channel_type_hint::access
static value const access
Access log.
Definition
levels.hpp:53
websocketpp::log::channel_type_hint::value
uint32_t value
Type of a channel type hint value.
Definition
levels.hpp:48
websocketpp::log::elevel
Package of log levels for logging errors.
Definition
levels.hpp:59
websocketpp::log::elevel::devel
static level const devel
Low level debugging information (warning: very chatty).
Definition
levels.hpp:63
websocketpp::log::elevel::library
static level const library
Definition
levels.hpp:66
websocketpp::log::elevel::info
static level const info
Definition
levels.hpp:69
websocketpp::log::elevel::fatal
static level const fatal
Definition
levels.hpp:78
websocketpp::log::elevel::rerror
static level const rerror
Definition
levels.hpp:75
websocketpp::log::elevel::warn
static level const warn
Definition
levels.hpp:72
Generated by
1.17.0