<refnamediv>
<refname>sd_journal_add_match</refname>
<refname>sd_journal_add_disjunction</refname>
+ <refname>sd_journal_add_conjunction</refname>
<refname>sd_journal_flush_matches</refname>
<refpurpose>Add or remove entry matches</refpurpose>
</refnamediv>
</funcprototype>
<funcprototype>
- <funcdef>int <function>sd_journal_flush_matches</function></funcdef>
+ <funcdef>int <function>sd_journal_add_conjunction</function></funcdef>
+ <paramdef>sd_journal* <parameter>j</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
+ <funcdef>void <function>sd_journal_flush_matches</function></funcdef>
<paramdef>sd_journal* <parameter>j</parameter></paramdef>
</funcprototype>
</funcsynopsis>
only of 0-9, A-Z and the underscore. It may not begin
with two underscores or be the empty string. The value
part may be any value, including binary. If a match is
- applied only entries with this field set will be
+ applied, only entries with this field set will be
iterated. Multiple matches may be active at the same
- time: if they apply to different fields only entries
- with both fields set like this will be iterated, if
- they apply to the same fields only entries where the
+ time: If they apply to different fields, only entries
+ with both fields set like this will be iterated. If
+ they apply to the same fields, only entries where the
field takes one of the specified values will be
iterated. Well known fields are documented in
<citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>. Whenever
<para><function>sd_journal_add_disjunction()</function>
may be used to insert a disjunction (i.e. logical OR)
- in the match list. If this call is invoked all
- previously added matches are combined in an OR with
- all matches added afterwards, until
- <function>sd_journal_add_disjunction()</function> is
- invoked again to begin the next OR term. The
+ in the match list. If this call is invoked, all
+ previously added matches since the last invocation of
+ <function>sd_journal_add_disjunction()</function> or
+ <function>sd_journal_add_conjunction()</function> are
+ combined in an OR with all matches added afterwards,
+ until
+ <function>sd_journal_add_disjunction()</function> or
+ <function>sd_journal_add_conjunction()</function> is
+ invoked again to begin the next OR or AND
+ term. </para>
+
+ <para><function>sd_journal_add_conjunction()</function>
+ may be used to insert a conjunction (i.e. logical AND)
+ in the match list. If this call is invoked, all
+ previously added matches since the last invocation of
+ <function>sd_journal_add_conjunction()</function> are
+ combined in an AND with all matches added afterwards,
+ until
+ <function>sd_journal_add_conjunction()</function> is
+ invoked again to begin the next AND term. The
combination of
- <function>sd_journal_add_match()</function> and
- <function>sd_journal_add_disjunction()</function> may
+ <function>sd_journal_add_match()</function>,
+ <function>sd_journal_add_disjunction()</function> and
+ <function>sd_journal_add_conjunction()</function> may
be used to build complex search terms, even though
- full logical expressions are not available.</para>
+ full logical expressions are not available. Note that
+ <function>sd_journal_add_conjunction()</function>
+ operates one level 'higher' than
+ <function>sd_journal_add_disjunction()</function>. It
+ is hence possible to build an expression of AND terms,
+ consisting of OR terms, consisting of AND terms,
+ consisting of OR terms of matches (the latter OR
+ expression is implicitly created for matches with the
+ same field name, see above).</para>
<para><function>sd_journal_flush_matches()</function>
- may be used to flush all matches and disjunction terms
- again. After this call all filtering is removed and
- all entries in the journal will be iterated
- again.</para>
+ may be used to flush all matches, disjunction and
+ conjunction terms again. After this call all filtering
+ is removed and all entries in the journal will be
+ iterated again.</para>
<para>Note that filtering via matches only applies to
the way the journal is read, it has no effect on storage
<refsect1>
<title>Return Value</title>
- <para><function>sd_journal_add_match()</function> and
- <function>sd_journal_add_disjunction()</function>
+ <para><function>sd_journal_add_match()</function>,
+ <function>sd_journal_add_disjunction()</function> and
+ <function>sd_journal_add_conjunction()</function>
return 0 on success or a negative errno-style error
code. <function>sd_journal_flush_matches()</function>
returns nothing.</para>
<title>Notes</title>
<para>The <function>sd_journal_add_match()</function>,
- <function>sd_journal_add_disjunction()</function> and
- <function>sd_journal_flush_matches()</function> interfaces are
- available as shared library, which can be compiled and
- linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <function>sd_journal_add_disjunction()</function>,
+ <function>sd_journal_add_conjunction()</function> and
+ <function>sd_journal_flush_matches()</function>
+ interfaces are available as shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
<programlisting>...
int add_matches(sd_journal *j) {
- sd_journal_add_match(j, "_SYSTEMD_UNIT=avahi-daemon.service");
- sd_journal_add_match(j, "PRIORITY=0");
- sd_journal_add_match(j, "PRIORITY=1");
- sd_journal_add_match(j, "PRIORITY=2");
- sd_journal_add_match(j, "PRIORITY=3");
+ sd_journal_add_match(j, "_SYSTEMD_UNIT=avahi-daemon.service", 0);
+ sd_journal_add_match(j, "PRIORITY=0", 0);
+ sd_journal_add_match(j, "PRIORITY=1", 0);
+ sd_journal_add_match(j, "PRIORITY=2", 0);
+ sd_journal_add_match(j, "PRIORITY=3", 0);
sd_journal_add_disjunction(j);
- sd_journal_add_match(j, "MESSAGE_ID=03bb1dab98ab4ecfbf6fff2738bdd964");
+ sd_journal_add_match(j, "MESSAGE_ID=03bb1dab98ab4ecfbf6fff2738bdd964", 0);
}</programlisting>
</refsect1>