blob: 3bdf552ab6e2f54e01c42a1680aba224f53e61f0 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.20"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Qpid Proton C API: Logger</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Qpid Proton C API
&#160;<span id="projectnumber">0.32.0</span>
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.svg"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.20 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__logger.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Logger<div class="ingroups"><a class="el" href="group__core.html">Core</a></div></div> </div>
</div><!--header-->
<div class="contents">
<p>Facility for logging messages.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gaff413c562d91f0c5eb2ec3ef4082165e"><td class="memItemLeft" align="right" valign="top"><a id="gaff413c562d91f0c5eb2ec3ef4082165e"></a>
typedef struct <a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a></td></tr>
<tr class="memdesc:gaff413c562d91f0c5eb2ec3ef4082165e"><td class="mdescLeft">&#160;</td><td class="mdescRight">The logger object allows library logging to be controlled. <br /></td></tr>
<tr class="separator:gaff413c562d91f0c5eb2ec3ef4082165e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9caac23d5ca18bd2a9e93ca2d5fd2a38"><td class="memItemLeft" align="right" valign="top"><a id="ga9caac23d5ca18bd2a9e93ca2d5fd2a38"></a>
typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#ga9caac23d5ca18bd2a9e93ca2d5fd2a38">pn_log_sink_t</a>) (intptr_t sink_context, <a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a> subsystem, <a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a> severity, const char *message)</td></tr>
<tr class="memdesc:ga9caac23d5ca18bd2a9e93ca2d5fd2a38"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback for sinking logger messages. <br /></td></tr>
<tr class="separator:ga9caac23d5ca18bd2a9e93ca2d5fd2a38"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gac861c944f890f31c1c2b22a3271250e4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a> { <br />
&#160;&#160;<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4a022f156826c787470f72fb9a95bc4d95">PN_SUBSYSTEM_NONE</a>,
<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4a6a76fd3fe99ddec0374913b1e485c5b9">PN_SUBSYSTEM_MEMORY</a>,
<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4a13eae69ba33a4d7ee9445d02af40972b">PN_SUBSYSTEM_IO</a>,
<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4a726d1eb8786aa7e8471959d5dac87e48">PN_SUBSYSTEM_EVENT</a>,
<br />
&#160;&#160;<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4a77ecacd1382a7c551f59c6377776b20f">PN_SUBSYSTEM_AMQP</a>,
<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4a67702d482bd03004cbf6af31fa5264a2">PN_SUBSYSTEM_SSL</a>,
<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4af2fc564994c4beb4fa6a3d785a2ac9ff">PN_SUBSYSTEM_SASL</a>,
<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4ade35e5aebedd972db6494ac630edfd70">PN_SUBSYSTEM_BINDING</a>,
<br />
&#160;&#160;<a class="el" href="group__logger.html#ggac861c944f890f31c1c2b22a3271250e4ae33b641a4f88f896adda4e8f6259a3cf">PN_SUBSYSTEM_ALL</a>
<br />
}</td></tr>
<tr class="memdesc:gac861c944f890f31c1c2b22a3271250e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Definitions for different subsystems that can log messages. <a href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">More...</a><br /></td></tr>
<tr class="separator:gac861c944f890f31c1c2b22a3271250e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacff7629aa49e187a5e6182b80febabf1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a> { <br />
&#160;&#160;<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1a6baab72a20a8abd567f45cd8c0ce636c">PN_LEVEL_NONE</a>,
<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1ace763a2251fc672b06492f1ee429e5d0">PN_LEVEL_CRITICAL</a>,
<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1a6a508b3057bf453821713f13ad91f77f">PN_LEVEL_ERROR</a>,
<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1abaa10f830bf8dcb13964525c7dbacdfb">PN_LEVEL_WARNING</a>,
<br />
&#160;&#160;<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1ad4a6295d0f6acc4afc347a18d25e046f">PN_LEVEL_INFO</a>,
<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1ac9f4862a837876a830eb21060368229c">PN_LEVEL_DEBUG</a>,
<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1a3a8d546a3464507929859580c8bdacc6">PN_LEVEL_TRACE</a>,
<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1a07ed98e7988f169c5c7282bfd3a82c63">PN_LEVEL_FRAME</a>,
<br />
&#160;&#160;<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1a6a26f859bdc36ee208a7594067219b27">PN_LEVEL_RAW</a>,
<a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1ae6ded7b53fb95447ef1a69ce45a1f9a2">PN_LEVEL_ALL</a>
<br />
}</td></tr>
<tr class="memdesc:gacff7629aa49e187a5e6182b80febabf1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Definitions for different severities of log messages Note that these are exclusive bits so that you can specify multiple severities to filter. <a href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">More...</a><br /></td></tr>
<tr class="separator:gacff7629aa49e187a5e6182b80febabf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2c101762fd4e0d97921bcba70450621d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#ga2c101762fd4e0d97921bcba70450621d">pn_default_logger</a> (void)</td></tr>
<tr class="memdesc:ga2c101762fd4e0d97921bcba70450621d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the default library logger. <a href="group__logger.html#ga2c101762fd4e0d97921bcba70450621d">More...</a><br /></td></tr>
<tr class="separator:ga2c101762fd4e0d97921bcba70450621d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga46b5f48f58923c128a5d2caf3205cdad"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#ga46b5f48f58923c128a5d2caf3205cdad">pn_logger_level_name</a> (<a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a> level)</td></tr>
<tr class="memdesc:ga46b5f48f58923c128a5d2caf3205cdad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a human readable name for a logger severity. <a href="group__logger.html#ga46b5f48f58923c128a5d2caf3205cdad">More...</a><br /></td></tr>
<tr class="separator:ga46b5f48f58923c128a5d2caf3205cdad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga100247ad047bfc0419f972d502bdf7a2"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#ga100247ad047bfc0419f972d502bdf7a2">pn_logger_subsystem_name</a> (<a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a> subsystem)</td></tr>
<tr class="memdesc:ga100247ad047bfc0419f972d502bdf7a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a human readable name for a logger subsystem. <a href="group__logger.html#ga100247ad047bfc0419f972d502bdf7a2">More...</a><br /></td></tr>
<tr class="separator:ga100247ad047bfc0419f972d502bdf7a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab14280cd88100c6ad4f9b1860bd753b4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#gab14280cd88100c6ad4f9b1860bd753b4">pn_logger_set_mask</a> (<a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *logger, uint16_t subsystem, uint16_t level)</td></tr>
<tr class="memdesc:gab14280cd88100c6ad4f9b1860bd753b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set a logger's tracing flags. <a href="group__logger.html#gab14280cd88100c6ad4f9b1860bd753b4">More...</a><br /></td></tr>
<tr class="separator:gab14280cd88100c6ad4f9b1860bd753b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaad8620929266e9ffa61e9ac9c2a64f57"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#gaad8620929266e9ffa61e9ac9c2a64f57">pn_logger_reset_mask</a> (<a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *logger, uint16_t subsystem, uint16_t level)</td></tr>
<tr class="memdesc:gaad8620929266e9ffa61e9ac9c2a64f57"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear a logger's tracing flags. <a href="group__logger.html#gaad8620929266e9ffa61e9ac9c2a64f57">More...</a><br /></td></tr>
<tr class="separator:gaad8620929266e9ffa61e9ac9c2a64f57"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa8d8e14368ce0eeca38ee203b3b4dbd9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#gaa8d8e14368ce0eeca38ee203b3b4dbd9">pn_logger_set_log_sink</a> (<a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *logger, <a class="el" href="group__logger.html#ga9caac23d5ca18bd2a9e93ca2d5fd2a38">pn_log_sink_t</a> sink, intptr_t sink_context)</td></tr>
<tr class="memdesc:gaa8d8e14368ce0eeca38ee203b3b4dbd9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the tracing function used by a logger. <a href="group__logger.html#gaa8d8e14368ce0eeca38ee203b3b4dbd9">More...</a><br /></td></tr>
<tr class="separator:gaa8d8e14368ce0eeca38ee203b3b4dbd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacb5ddef6bc8a469e7babec8f055894f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__logger.html#ga9caac23d5ca18bd2a9e93ca2d5fd2a38">pn_log_sink_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#gacb5ddef6bc8a469e7babec8f055894f6">pn_logger_get_log_sink</a> (<a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *logger)</td></tr>
<tr class="memdesc:gacb5ddef6bc8a469e7babec8f055894f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the tracing function used by a logger. <a href="group__logger.html#gacb5ddef6bc8a469e7babec8f055894f6">More...</a><br /></td></tr>
<tr class="separator:gacb5ddef6bc8a469e7babec8f055894f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga788982b1120f98537d698c1b61be4cf1"><td class="memItemLeft" align="right" valign="top">intptr_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#ga788982b1120f98537d698c1b61be4cf1">pn_logger_get_log_sink_context</a> (<a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *logger)</td></tr>
<tr class="memdesc:ga788982b1120f98537d698c1b61be4cf1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the sink context used by a logger. <a href="group__logger.html#ga788982b1120f98537d698c1b61be4cf1">More...</a><br /></td></tr>
<tr class="separator:ga788982b1120f98537d698c1b61be4cf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga592fd3c902fced39d89f588f8fad3ba3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__logger.html#ga592fd3c902fced39d89f588f8fad3ba3">pn_logger_logf</a> (<a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *logger, <a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a> subsystem, <a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a> level, const char *fmt,...)</td></tr>
<tr class="memdesc:ga592fd3c902fced39d89f588f8fad3ba3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Log a printf formatted message using the logger. <a href="group__logger.html#ga592fd3c902fced39d89f588f8fad3ba3">More...</a><br /></td></tr>
<tr class="separator:ga592fd3c902fced39d89f588f8fad3ba3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Facility for logging messages. </p>
<p>The proton library has internal logging which provides information about the functioning of the library. This Logger system (see <a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a>) allows applications to customize how the logging is recorded and output.</p>
<p>Each logged message has an attached level (see <a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a>) which indicates how important the message is; and also has an attached subsystem (see <a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a>) which indicates which part of proton is producing# the log message. The levels go from "Critical" which indicates a condition the library cannot recover from.</p>
<p>Applications receive log messages by registering a callback function (<a class="el" href="group__logger.html#ga9caac23d5ca18bd2a9e93ca2d5fd2a38">pn_log_sink_t</a>). This receives the logged message and other information and allows the application to consume the logged messages as it wants. Applications can filter the messages that they receive by setting bit masks in the logger. They can set the logger filtering both by subsystem and by level. Additionally, since the callback contains both the subsystem and level information for each logged message, applications can impose further, more complex, filters of their own.</p>
<p>Each application will have a default logger which can be retrieved with <a class="el" href="group__logger.html#ga2c101762fd4e0d97921bcba70450621d">pn_default_logger</a>. The default logger is used as the template for every other logger that is created. So an efficient way to configure logging is to configure the default logger at the very start of the application before any other loggers get created.</p>
<p>Loggers are associated with different proton objects, primarily the transport object (<a class="el" href="group__transport.html#gac26eda05f649bbf0399f3d8d78d12fa8">pn_transport_t</a>) and each logger controls the logging for the associated object. This means that for example in order to control the logging for an AMQP connection you need to acquire the logger object from the transport object using <a class="el" href="group__transport.html#ga3a539904a3de515110377b41c185c615">pn_transport_logger</a> and to configure that.</p>
<p>Initially the defaults are to log every subsystem but not any level (except 'Critical' which is always logged). This means in effect that it is only necessary to turn on the log levels that are interesting and all subsystems will log. Of course you can turn off subsystems that are not interesting or are too verbose.</p>
<p>There is also a default log sink if the application does not register their own, but logging is turned on - this will output the log message to standard error. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="gac861c944f890f31c1c2b22a3271250e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac861c944f890f31c1c2b22a3271250e4">&#9670;&nbsp;</a></span>pn_log_subsystem_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Definitions for different subsystems that can log messages. </p>
<p>Note that these are exclusive bits so that you can specify multiple subsystems to filter </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4a022f156826c787470f72fb9a95bc4d95"></a>PN_SUBSYSTEM_NONE&#160;</td><td class="fielddoc"><p>No subsystem. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4a6a76fd3fe99ddec0374913b1e485c5b9"></a>PN_SUBSYSTEM_MEMORY&#160;</td><td class="fielddoc"><p>Memory usage. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4a13eae69ba33a4d7ee9445d02af40972b"></a>PN_SUBSYSTEM_IO&#160;</td><td class="fielddoc"><p>Low level Input/Output. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4a726d1eb8786aa7e8471959d5dac87e48"></a>PN_SUBSYSTEM_EVENT&#160;</td><td class="fielddoc"><p>Events. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4a77ecacd1382a7c551f59c6377776b20f"></a>PN_SUBSYSTEM_AMQP&#160;</td><td class="fielddoc"><p>AMQP protocol processing. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4a67702d482bd03004cbf6af31fa5264a2"></a>PN_SUBSYSTEM_SSL&#160;</td><td class="fielddoc"><p>TLS/SSL protocol processing. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4af2fc564994c4beb4fa6a3d785a2ac9ff"></a>PN_SUBSYSTEM_SASL&#160;</td><td class="fielddoc"><p>SASL protocol processing. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4ade35e5aebedd972db6494ac630edfd70"></a>PN_SUBSYSTEM_BINDING&#160;</td><td class="fielddoc"><p>Language binding. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac861c944f890f31c1c2b22a3271250e4ae33b641a4f88f896adda4e8f6259a3cf"></a>PN_SUBSYSTEM_ALL&#160;</td><td class="fielddoc"><p>Every subsystem. </p>
</td></tr>
</table>
</div>
</div>
<a id="gacff7629aa49e187a5e6182b80febabf1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacff7629aa49e187a5e6182b80febabf1">&#9670;&nbsp;</a></span>pn_log_level_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Definitions for different severities of log messages Note that these are exclusive bits so that you can specify multiple severities to filter. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1a6baab72a20a8abd567f45cd8c0ce636c"></a>PN_LEVEL_NONE&#160;</td><td class="fielddoc"><p>No level. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1ace763a2251fc672b06492f1ee429e5d0"></a>PN_LEVEL_CRITICAL&#160;</td><td class="fielddoc"><p>Something is wrong and can't be fixed - probably a library bug. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1a6a508b3057bf453821713f13ad91f77f"></a>PN_LEVEL_ERROR&#160;</td><td class="fielddoc"><p>Something went wrong. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1abaa10f830bf8dcb13964525c7dbacdfb"></a>PN_LEVEL_WARNING&#160;</td><td class="fielddoc"><p>Something unusual happened but not necessarily an error. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1ad4a6295d0f6acc4afc347a18d25e046f"></a>PN_LEVEL_INFO&#160;</td><td class="fielddoc"><p>Something that might be interesting happened. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1ac9f4862a837876a830eb21060368229c"></a>PN_LEVEL_DEBUG&#160;</td><td class="fielddoc"><p>Something you might want to know about happened. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1a3a8d546a3464507929859580c8bdacc6"></a>PN_LEVEL_TRACE&#160;</td><td class="fielddoc"><p>Detail about something that happened. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1a07ed98e7988f169c5c7282bfd3a82c63"></a>PN_LEVEL_FRAME&#160;</td><td class="fielddoc"><p>Protocol frame traces. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1a6a26f859bdc36ee208a7594067219b27"></a>PN_LEVEL_RAW&#160;</td><td class="fielddoc"><p>Raw protocol bytes. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacff7629aa49e187a5e6182b80febabf1ae6ded7b53fb95447ef1a69ce45a1f9a2"></a>PN_LEVEL_ALL&#160;</td><td class="fielddoc"><p>Every possible level. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga2c101762fd4e0d97921bcba70450621d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2c101762fd4e0d97921bcba70450621d">&#9670;&nbsp;</a></span>pn_default_logger()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a>* pn_default_logger </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return the default library logger. </p>
<dl class="section return"><dt>Returns</dt><dd>The global default logger </dd></dl>
</div>
</div>
<a id="ga46b5f48f58923c128a5d2caf3205cdad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga46b5f48f58923c128a5d2caf3205cdad">&#9670;&nbsp;</a></span>pn_logger_level_name()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char* pn_logger_level_name </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a>&#160;</td>
<td class="paramname"><em>level</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get a human readable name for a logger severity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">level</td><td>the logging level </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>readable name for that level </dd></dl>
</div>
</div>
<a id="ga100247ad047bfc0419f972d502bdf7a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga100247ad047bfc0419f972d502bdf7a2">&#9670;&nbsp;</a></span>pn_logger_subsystem_name()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char* pn_logger_subsystem_name </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a>&#160;</td>
<td class="paramname"><em>subsystem</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get a human readable name for a logger subsystem. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">subsystem</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>readable name for that subsystem </dd></dl>
</div>
</div>
<a id="gab14280cd88100c6ad4f9b1860bd753b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab14280cd88100c6ad4f9b1860bd753b4">&#9670;&nbsp;</a></span>pn_logger_set_mask()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void pn_logger_set_mask </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *&#160;</td>
<td class="paramname"><em>logger</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>subsystem</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>level</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set a logger's tracing flags. </p>
<p>Set individual trace flags to control what a logger logs.</p>
<p>The trace flags for a logger control what sort of information is logged. See <a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a> and <a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a> for more details.</p>
<p>Note that log messages with a level of <a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1ace763a2251fc672b06492f1ee429e5d0">PN_LEVEL_CRITICAL</a> will always be logged. Otherwise log message are only logged if the subsystem and level flags both match a flag in the masks held by the logger.</p>
<p>If you don't want to affect the subsystem flags then you can set subsystem to PN_SUBSYSTEM_NONE. likewise level to PN_LEVEL_NONE if you don't want to affect the level flags.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">logger</td><td>the logger </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">subsystem</td><td>bits representing subsystems to turn on trace for </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">level</td><td>bits representing log levels to turn on trace for </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gaad8620929266e9ffa61e9ac9c2a64f57"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaad8620929266e9ffa61e9ac9c2a64f57">&#9670;&nbsp;</a></span>pn_logger_reset_mask()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void pn_logger_reset_mask </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *&#160;</td>
<td class="paramname"><em>logger</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>subsystem</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>level</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Clear a logger's tracing flags. </p>
<p>Clear individual trace flags to control what a logger logs.</p>
<p>The trace flags for a logger control what sort of information is logged. See <a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a> and <a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a> for more details.</p>
<p>Note that log messages with a level of <a class="el" href="group__logger.html#ggacff7629aa49e187a5e6182b80febabf1ace763a2251fc672b06492f1ee429e5d0">PN_LEVEL_CRITICAL</a> will always be logged. Otherwise log message are only logged if the subsystem and level flags both match a flag in the masks held by the logger.</p>
<p>If you don't want to affect the subsystem flags then you can set subsystem to PN_SUBSYSTEM_NONE. likewise level to PN_LEVEL_NONE if you don't want to affect the level flags.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">logger</td><td>the logger </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">subsystem</td><td>bits representing subsystems to turn off trace for </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">level</td><td>bits representing log levels to turn off trace for </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gaa8d8e14368ce0eeca38ee203b3b4dbd9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa8d8e14368ce0eeca38ee203b3b4dbd9">&#9670;&nbsp;</a></span>pn_logger_set_log_sink()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void pn_logger_set_log_sink </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *&#160;</td>
<td class="paramname"><em>logger</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__logger.html#ga9caac23d5ca18bd2a9e93ca2d5fd2a38">pn_log_sink_t</a>&#160;</td>
<td class="paramname"><em>sink</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">intptr_t&#160;</td>
<td class="paramname"><em>sink_context</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the tracing function used by a logger. </p>
<p>The tracing function is called to perform logging. Overriding this function allows embedding applications to divert the engine's logging to a place of their choice.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">logger</td><td>the logger </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">sink</td><td>the tracing function </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">sink_context</td><td>user specified context to pass into each call of the tracing callback </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gacb5ddef6bc8a469e7babec8f055894f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacb5ddef6bc8a469e7babec8f055894f6">&#9670;&nbsp;</a></span>pn_logger_get_log_sink()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__logger.html#ga9caac23d5ca18bd2a9e93ca2d5fd2a38">pn_log_sink_t</a> pn_logger_get_log_sink </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *&#160;</td>
<td class="paramname"><em>logger</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the tracing function used by a logger. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">logger</td><td>the logger </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the tracing sink function used by a logger </dd></dl>
</div>
</div>
<a id="ga788982b1120f98537d698c1b61be4cf1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga788982b1120f98537d698c1b61be4cf1">&#9670;&nbsp;</a></span>pn_logger_get_log_sink_context()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">intptr_t pn_logger_get_log_sink_context </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *&#160;</td>
<td class="paramname"><em>logger</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the sink context used by a logger. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">logger</td><td>the logger </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the sink context used by a logger </dd></dl>
</div>
</div>
<a id="ga592fd3c902fced39d89f588f8fad3ba3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga592fd3c902fced39d89f588f8fad3ba3">&#9670;&nbsp;</a></span>pn_logger_logf()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void pn_logger_logf </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__logger.html#gaff413c562d91f0c5eb2ec3ef4082165e">pn_logger_t</a> *&#160;</td>
<td class="paramname"><em>logger</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__logger.html#gac861c944f890f31c1c2b22a3271250e4">pn_log_subsystem_t</a>&#160;</td>
<td class="paramname"><em>subsystem</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__logger.html#gacff7629aa49e187a5e6182b80febabf1">pn_log_level_t</a>&#160;</td>
<td class="paramname"><em>level</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>fmt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Log a printf formatted message using the logger. </p>
<p>This is mainly for use in proton internals , but will allow application log messages to be processed the same way.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">logger</td><td>the logger </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">subsystem</td><td>the subsystem which is producing this log message </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">level</td><td>the log level of the log message </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">fmt</td><td>the printf formatted message to be logged </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20 </li>
</ul>
</div>
</body>
</html>