\hypertarget{group__Eina__Log__Group}{}\doxysection{Log}
\label{group__Eina__Log__Group}\index{Log@{Log}}


Full-\/featured logging system.  


\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \mbox{\hyperlink{struct__Eina__Log__Domain}{\+\_\+\+Eina\+\_\+\+Log\+\_\+\+Domain}}
\begin{DoxyCompactList}\small\item\em The domain used for logging. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga41d6e3b51ce5f50ef403428776a02626}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+DEFAULT}}~\mbox{\hyperlink{group__Eina__Log__Group_ga27a5fa58c9e63b1f4653a9e888c81cc0}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+GLOBAL}}
\begin{DoxyCompactList}\small\item\em This macro defines the domain to use with the macros \mbox{\hyperlink{group__Eina__Log__Group_ga4423c9d7bdc95555cf045b66e21e1f5c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+DBG()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga782f84a4805166d2707cb4d59217c64e}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+INFO()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga5073ce1fbcc1f6ea8d0670aac2ecce70}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+WARN()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga698d954a5fc2d120a553277361d68047}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+ERR()}} and \mbox{\hyperlink{group__Eina__Log__Group_ga50e2b86707c08c89e49759cb31b7b91c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+CRIT()}}. \end{DoxyCompactList}\item 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(DOM,  LEVEL,  fmt, ...)~  do \{ (void) DOM; (void) LEVEL; (void) fmt; \} while (0)
\begin{DoxyCompactList}\small\item\em Logs a message on the specified domain, level and format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga50e2b86707c08c89e49759cb31b7b91c}\label{group__Eina__Log__Group_ga50e2b86707c08c89e49759cb31b7b91c}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga50e2b86707c08c89e49759cb31b7b91c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+CRIT}}(DOM,  fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(DOM, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa620ee82716c2c262ad2929823cf24ebd}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+CRITICAL}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level CRITICAL on the specified domain and format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga698d954a5fc2d120a553277361d68047}\label{group__Eina__Log__Group_ga698d954a5fc2d120a553277361d68047}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga698d954a5fc2d120a553277361d68047}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+ERR}}(DOM,  fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(DOM, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa8252243003214c2e38a3b228fc85eb80}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+ERR}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level ERROR on the specified domain and format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga782f84a4805166d2707cb4d59217c64e}\label{group__Eina__Log__Group_ga782f84a4805166d2707cb4d59217c64e}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga782f84a4805166d2707cb4d59217c64e}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+INFO}}(DOM,  fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(DOM, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa0368139789af856a6ad9bbe4f21d195f}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+INFO}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level INFO on the specified domain and format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga4423c9d7bdc95555cf045b66e21e1f5c}\label{group__Eina__Log__Group_ga4423c9d7bdc95555cf045b66e21e1f5c}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga4423c9d7bdc95555cf045b66e21e1f5c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+DBG}}(DOM,  fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(DOM, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aafdc5a5cfb78f5e4d5851447ed798af50}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+DBG}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level DEBUG on the specified domain and format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga5073ce1fbcc1f6ea8d0670aac2ecce70}\label{group__Eina__Log__Group_ga5073ce1fbcc1f6ea8d0670aac2ecce70}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga5073ce1fbcc1f6ea8d0670aac2ecce70}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+WARN}}(DOM,  fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(DOM, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aae6fda047b87c6d22a23cbb7143dd2fe8}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+WARN}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level WARN on the specified domain and format. \end{DoxyCompactList}\item 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga5b50827f35399f9ff87f5d9d817c764a}{EINA\+\_\+\+LOG\+\_\+\+CRIT}}(fmt, ...)
\begin{DoxyCompactList}\small\item\em Logs a message with level CRITICAL on the default domain with the specified format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga2e33caeeeb6051526c01b7fea4d6c91b}\label{group__Eina__Log__Group_ga2e33caeeeb6051526c01b7fea4d6c91b}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga2e33caeeeb6051526c01b7fea4d6c91b}{EINA\+\_\+\+LOG\+\_\+\+ERR}}(fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(\mbox{\hyperlink{group__Eina__Log__Group_ga41d6e3b51ce5f50ef403428776a02626}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+DEFAULT}}, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa8252243003214c2e38a3b228fc85eb80}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+ERR}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level ERROR on the default domain with the specified format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_gafb145e82df0f9441244832c94e87a21b}\label{group__Eina__Log__Group_gafb145e82df0f9441244832c94e87a21b}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_gafb145e82df0f9441244832c94e87a21b}{EINA\+\_\+\+LOG\+\_\+\+INFO}}(fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(\mbox{\hyperlink{group__Eina__Log__Group_ga41d6e3b51ce5f50ef403428776a02626}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+DEFAULT}}, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa0368139789af856a6ad9bbe4f21d195f}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+INFO}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level INFO on the default domain with the specified format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga21c44f66537533db16ee8f475ae2ae70}\label{group__Eina__Log__Group_ga21c44f66537533db16ee8f475ae2ae70}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga21c44f66537533db16ee8f475ae2ae70}{EINA\+\_\+\+LOG\+\_\+\+WARN}}(fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(\mbox{\hyperlink{group__Eina__Log__Group_ga41d6e3b51ce5f50ef403428776a02626}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+DEFAULT}}, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aae6fda047b87c6d22a23cbb7143dd2fe8}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+WARN}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level WARN on the default domain with the specified format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga09b88349373c2158f988d72375af5849}\label{group__Eina__Log__Group_ga09b88349373c2158f988d72375af5849}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga09b88349373c2158f988d72375af5849}{EINA\+\_\+\+LOG\+\_\+\+DBG}}(fmt, ...)~  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG}}(\mbox{\hyperlink{group__Eina__Log__Group_ga41d6e3b51ce5f50ef403428776a02626}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+DEFAULT}}, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aafdc5a5cfb78f5e4d5851447ed798af50}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+DBG}}, fmt, \#\# \+\_\+\+\_\+\+VA\+\_\+\+ARGS\+\_\+\+\_\+)
\begin{DoxyCompactList}\small\item\em Logs a message with level DEBUG on the default domain with the specified format. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga079e9de9602815a6de0d5188b65c07a2}\label{group__Eina__Log__Group_ga079e9de9602815a6de0d5188b65c07a2}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga079e9de9602815a6de0d5188b65c07a2}{EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+INIT}}~\mbox{\hyperlink{group__Eina__Log__Group_gae6f969b21b4b371519f8ab4705eb2fa4}{\+\_\+eina\+\_\+log\+\_\+state\+\_\+init}}
\begin{DoxyCompactList}\small\item\em String that indicates the log system is initializing. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga527ad9352599d503a53bf834868d3461}\label{group__Eina__Log__Group_ga527ad9352599d503a53bf834868d3461}} 
\#define \mbox{\hyperlink{group__Eina__Log__Group_ga527ad9352599d503a53bf834868d3461}{EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+SHUTDOWN}}~\mbox{\hyperlink{group__Eina__Log__Group_ga18925c475ddee5bb69f8f58c7ba7abf6}{\+\_\+eina\+\_\+log\+\_\+state\+\_\+shutdown}}
\begin{DoxyCompactList}\small\item\em String that indicates the log system is shutting down. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}\label{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}} 
typedef struct \mbox{\hyperlink{struct__Eina__Log__Domain}{\+\_\+\+Eina\+\_\+\+Log\+\_\+\+Domain}} \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}}
\begin{DoxyCompactList}\small\item\em The domain used for logging. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}\label{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}} 
typedef enum \mbox{\hyperlink{group__Eina__Log__Group_ga326699509b2e7578ace7c0a15b4a8c1a}{\+\_\+\+Eina\+\_\+\+Log\+\_\+\+Level}} \mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}}
\begin{DoxyCompactList}\small\item\em List of available logging levels. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga76501a2d10e374980c4012664e4ca96f}\label{group__Eina__Log__Group_ga76501a2d10e374980c4012664e4ca96f}} 
typedef void($\ast$ \mbox{\hyperlink{group__Eina__Log__Group_ga76501a2d10e374980c4012664e4ca96f}{Eina\+\_\+\+Log\+\_\+\+Print\+\_\+\+Cb}}) (const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$d, \mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}} level, const char $\ast$file, const char $\ast$fnc, int line, const char $\ast$fmt, void $\ast$data, va\+\_\+list args)
\begin{DoxyCompactList}\small\item\em Type for print callbacks. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_gadfcd7fc51aaa188de388a7f4c6164d83}\label{group__Eina__Log__Group_gadfcd7fc51aaa188de388a7f4c6164d83}} 
typedef enum \mbox{\hyperlink{group__Eina__Log__Group_ga125f3b55502884020a1546d0575ae052}{\+\_\+\+Eina\+\_\+\+Log\+\_\+\+State}} \mbox{\hyperlink{group__Eina__Log__Group_gadfcd7fc51aaa188de388a7f4c6164d83}{Eina\+\_\+\+Log\+\_\+\+State}}
\begin{DoxyCompactList}\small\item\em List of available log states. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \mbox{\hyperlink{group__Eina__Log__Group_ga326699509b2e7578ace7c0a15b4a8c1a}{\+\_\+\+Eina\+\_\+\+Log\+\_\+\+Level}} \{ \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa620ee82716c2c262ad2929823cf24ebd}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+CRITICAL}}
, \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa8252243003214c2e38a3b228fc85eb80}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+ERR}}
, \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aae6fda047b87c6d22a23cbb7143dd2fe8}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+WARN}}
, \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa0368139789af856a6ad9bbe4f21d195f}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+INFO}}
, \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aafdc5a5cfb78f5e4d5851447ed798af50}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+DBG}}
, \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa880f2906e9b871ce8f590316d2f60652}{EINA\+\_\+\+LOG\+\_\+\+LEVELS}}
, \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aaa3ab2a3e3ae9d08a60e939d56198bb96}{EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+UNKNOWN}} = (-\/2147483647 -\/ 1)
 \}
\begin{DoxyCompactList}\small\item\em List of available logging levels. \end{DoxyCompactList}\item 
enum \mbox{\hyperlink{group__Eina__Log__Group_ga125f3b55502884020a1546d0575ae052}{\+\_\+\+Eina\+\_\+\+Log\+\_\+\+State}} \{ \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga125f3b55502884020a1546d0575ae052a42e956e3a69ea29632f7e9d27a269903}{EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+START}}
, \newline
\mbox{\hyperlink{group__Eina__Log__Group_gga125f3b55502884020a1546d0575ae052adcc235504e74cbd641635c0af36e9d47}{EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+STOP}}
 \}
\begin{DoxyCompactList}\small\item\em List of available log states. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Log__Group_ga6506707f51c09f5876cf8b4cf47e7e26}{eina\+\_\+log\+\_\+level\+\_\+check}} (int level)
\begin{DoxyCompactList}\small\item\em Checks whenever the given level should be printed out. \end{DoxyCompactList}\item 
static \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Log__Group_gaca5019f970a269e25e956a73de60fe4d}{eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+check}} (int domain, int level)
\begin{DoxyCompactList}\small\item\em Checks whenever the given level should be printed out. \end{DoxyCompactList}\item 
static const char $\ast$ \mbox{\hyperlink{group__Eina__Log__Group_gabd4f96ea6f37e826d7a328372a25ab2d}{eina\+\_\+log\+\_\+level\+\_\+name\+\_\+get}} (int level, char name\mbox{[}4\mbox{]})
\begin{DoxyCompactList}\small\item\em Function to format the level as a 3 character (+1 null byte) string. \end{DoxyCompactList}\item 
static const char $\ast$ \mbox{\hyperlink{group__Eina__Log__Group_gaefc8431ec990c48713475e4e3e7f1612}{eina\+\_\+log\+\_\+level\+\_\+color\+\_\+get}} (int level)
\begin{DoxyCompactList}\small\item\em Function to get recommended color value for level. \end{DoxyCompactList}\item 
static const char $\ast$ \mbox{\hyperlink{group__Eina__Log__Group_gad61f8a4f117ddcf79e0074fae945219e}{eina\+\_\+log\+\_\+level\+\_\+color\+\_\+if\+\_\+enabled\+\_\+get}} (int level)
\begin{DoxyCompactList}\small\item\em Function to get recommended color value for level, if colors are enabled. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga2b7f1556ccee03f1351a1ff0a059ecfa}{eina\+\_\+log\+\_\+threads\+\_\+enable}} (void)
\begin{DoxyCompactList}\small\item\em Enable logging module to handle threads. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_gac7291079db979a0195d62d5526b27c30}{eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+set}} (\mbox{\hyperlink{group__Eina__Log__Group_ga76501a2d10e374980c4012664e4ca96f}{Eina\+\_\+\+Log\+\_\+\+Print\+\_\+\+Cb}} cb, void $\ast$data)
\begin{DoxyCompactList}\small\item\em Sets logging method to use. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga3588dded50cc324ab6f84da2f328bd8e}{eina\+\_\+log\+\_\+level\+\_\+set}} (int level)
\begin{DoxyCompactList}\small\item\em Sets the default log level. \end{DoxyCompactList}\item 
int \mbox{\hyperlink{group__Eina__Log__Group_ga91a8e7d7cfd25939b64589212d391c38}{eina\+\_\+log\+\_\+level\+\_\+get}} (void)
\begin{DoxyCompactList}\small\item\em Gets the default log level. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Log__Group_gac5ce77a36dc70b40f8d6708135829917}{eina\+\_\+log\+\_\+main\+\_\+thread\+\_\+check}} (void)
\begin{DoxyCompactList}\small\item\em Checks if current thread is the main thread. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_gac034e165604088379530e6c67f0233d6}{eina\+\_\+log\+\_\+color\+\_\+disable\+\_\+set}} (\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} disabled)
\begin{DoxyCompactList}\small\item\em Enables or disables colored text in the logs. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Log__Group_ga77a96439127b855203bb7f6ba711ada5}{eina\+\_\+log\+\_\+color\+\_\+disable\+\_\+get}} (void)
\begin{DoxyCompactList}\small\item\em Determines if color logging is enabled or disabled. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga85ea9e96d9907172d24dfbd43158c04a}{eina\+\_\+log\+\_\+file\+\_\+disable\+\_\+set}} (\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} disabled)
\begin{DoxyCompactList}\small\item\em Sets if originating file name logging should be disabled. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Log__Group_gaf1b681a61bb7fb83294fd89665f39047}{eina\+\_\+log\+\_\+file\+\_\+disable\+\_\+get}} (void)
\begin{DoxyCompactList}\small\item\em Gets if originating file name logging should be disabled. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_gafd20b0417b03d215dab420d29ab14ff5}{eina\+\_\+log\+\_\+function\+\_\+disable\+\_\+set}} (\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} disabled)
\begin{DoxyCompactList}\small\item\em Sets if originating function name logging should be disabled. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Log__Group_ga9c65b1b471b68f50c584adf1b916885e}{eina\+\_\+log\+\_\+function\+\_\+disable\+\_\+get}} (void)
\begin{DoxyCompactList}\small\item\em Gets if originating function name logging should be disabled. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_gafd5bd8f8b44c19d0970bd21bb2d72e34}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+set}} (\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} abort\+\_\+on\+\_\+critical)
\begin{DoxyCompactList}\small\item\em Sets if critical messages should abort the program. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Log__Group_ga6ac58025ffeb43fc110317cf3d3c9831}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+get}} (void)
\begin{DoxyCompactList}\small\item\em Gets if critical messages should abort the program. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_gaa1f9627ef1c76a369e38c02971c634a7}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+set}} (int critical\+\_\+level)
\begin{DoxyCompactList}\small\item\em Sets level that triggers abort if abort-\/on-\/critical is set. \end{DoxyCompactList}\item 
int \mbox{\hyperlink{group__Eina__Log__Group_ga7b23128aa5512aff0a4698a5cfa9a2e9}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+get}} (void)
\begin{DoxyCompactList}\small\item\em Gets level that triggers abort if abort-\/on-\/critical is set. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_gae44848ef2d3ce7b407d62f3de0036913}{eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+set}} (const char $\ast$domain\+\_\+name, int level)
\begin{DoxyCompactList}\small\item\em Sets the domain level given its name. \end{DoxyCompactList}\item 
int \mbox{\hyperlink{group__Eina__Log__Group_gab2027f5a6e7554dcff6a58dfc92f5550}{eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+get}} (const char $\ast$domain\+\_\+name)
\begin{DoxyCompactList}\small\item\em Gets the domain level given its name. \end{DoxyCompactList}\item 
int \mbox{\hyperlink{group__Eina__Log__Group_gaf923006303d86304c2a24f3299aaafe8}{eina\+\_\+log\+\_\+domain\+\_\+registered\+\_\+level\+\_\+get}} (int domain)
\begin{DoxyCompactList}\small\item\em Gets the domain level given its identifier. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga0f8ccce51c24a6ae4f43d1fe55903572}{eina\+\_\+log\+\_\+domain\+\_\+registered\+\_\+level\+\_\+set}} (int domain, int level)
\begin{DoxyCompactList}\small\item\em Sets the domain level given its identifier. \end{DoxyCompactList}\item 
int \mbox{\hyperlink{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}{eina\+\_\+log\+\_\+domain\+\_\+register}} (const char $\ast$name, const char $\ast$color)
\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga94c62d918308a366a26352ff4a7fb0c8}{eina\+\_\+log\+\_\+domain\+\_\+unregister}} (int domain)
\begin{DoxyCompactList}\small\item\em Forgets about a logging domain registered by \mbox{\hyperlink{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}{eina\+\_\+log\+\_\+domain\+\_\+register()}} \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print}} (int domain, \mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}} level, const char $\ast$file, const char $\ast$function, int line, const char $\ast$fmt,...) \mbox{\hyperlink{group__Eina__Types__Group_ga50265482f1d9b18e4b98e97cfa2c8d05}{EINA\+\_\+\+PRINTF}}(6
\begin{DoxyCompactList}\small\item\em Prints out log message using given domain and level. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga6f8a0c04a92a75499957a230faf2f7fa}{eina\+\_\+log\+\_\+vprint}} (int domain, \mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}} level, const char $\ast$file, const char $\ast$fnc, int line, const char $\ast$fmt, va\+\_\+list args) \mbox{\hyperlink{group__Eina__Types__Group_ga6eb1a3925291d82fe83a1bf842890d5b}{EINA\+\_\+\+NOINSTRUMENT}}
\begin{DoxyCompactList}\small\item\em Prints out log message using given domain and level. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga294021e9b33b39b39d2f6c6ddc8fcd9b}{eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+stdout}} (const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$d, \mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}} level, const char $\ast$file, const char $\ast$fnc, int line, const char $\ast$fmt, void $\ast$data, va\+\_\+list args)
\begin{DoxyCompactList}\small\item\em Alternative logging method, this will output to standard output stream. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga38af538700301b2aa201e92837ca9c46}{eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+stderr}} (const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$d, \mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}} level, const char $\ast$file, const char $\ast$fnc, int line, const char $\ast$fmt, void $\ast$data, va\+\_\+list args)
\begin{DoxyCompactList}\small\item\em Default logging method, this will output to standard error stream. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga8bae9ff20acfb94f8dcb29b66440123d}{eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+file}} (const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$d, \mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}} level, const char $\ast$file, const char $\ast$fnc, int line, const char $\ast$fmt, void $\ast$data, va\+\_\+list args)
\begin{DoxyCompactList}\small\item\em Alternative logging method, this will output to given file stream. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga6b686425922b1117946cf869e18bc672}{eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+journald}} (const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$d, \mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}} level, const char $\ast$file, const char $\ast$fnc, int line, const char $\ast$fmt, void $\ast$data, va\+\_\+list args)
\begin{DoxyCompactList}\small\item\em Alternative logging method, this will output to systemd journal. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_ga8dcfef1baf5777089448b212b05899e2}{eina\+\_\+log\+\_\+console\+\_\+color\+\_\+set}} (FILE $\ast$fp, const char $\ast$color)
\begin{DoxyCompactList}\small\item\em Configures console color of given file. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Log__Group_gaf1521fab496ea03a641f44868c7da5ce}{eina\+\_\+log\+\_\+timing}} (int domain, \mbox{\hyperlink{group__Eina__Log__Group_gadfcd7fc51aaa188de388a7f4c6164d83}{Eina\+\_\+\+Log\+\_\+\+State}} state, const char $\ast$phase)
\begin{DoxyCompactList}\small\item\em Starts or stops the timing of a phase. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga27a5fa58c9e63b1f4653a9e888c81cc0}\label{group__Eina__Log__Group_ga27a5fa58c9e63b1f4653a9e888c81cc0}} 
int \mbox{\hyperlink{group__Eina__Log__Group_ga27a5fa58c9e63b1f4653a9e888c81cc0}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+GLOBAL}}
\begin{DoxyCompactList}\small\item\em EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+GLOBAL is the general purpose log domain to be used, it is always registered and available everywhere. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga36b2dfe80e0c95878535f88a42ca7702}\label{group__Eina__Log__Group_ga36b2dfe80e0c95878535f88a42ca7702}} 
void {\bfseries EINA\+\_\+\+NOINSTRUMENT}
\item 
\mbox{\Hypertarget{group__Eina__Log__Group_gae6f969b21b4b371519f8ab4705eb2fa4}\label{group__Eina__Log__Group_gae6f969b21b4b371519f8ab4705eb2fa4}} 
const char $\ast$ \mbox{\hyperlink{group__Eina__Log__Group_gae6f969b21b4b371519f8ab4705eb2fa4}{\+\_\+eina\+\_\+log\+\_\+state\+\_\+init}}
\begin{DoxyCompactList}\small\item\em String that indicates the log system is initializing. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Log__Group_ga18925c475ddee5bb69f8f58c7ba7abf6}\label{group__Eina__Log__Group_ga18925c475ddee5bb69f8f58c7ba7abf6}} 
const char $\ast$ \mbox{\hyperlink{group__Eina__Log__Group_ga18925c475ddee5bb69f8f58c7ba7abf6}{\+\_\+eina\+\_\+log\+\_\+state\+\_\+shutdown}}
\begin{DoxyCompactList}\small\item\em String that indicates the log system is shutting down. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
Full-\/featured logging system. 

Eina provides \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}}, a standard function to manage all logging messages. This function may be called directly or using the helper macros such as \mbox{\hyperlink{group__Eina__Log__Group_ga09b88349373c2158f988d72375af5849}{EINA\+\_\+\+LOG\+\_\+\+DBG()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga2e33caeeeb6051526c01b7fea4d6c91b}{EINA\+\_\+\+LOG\+\_\+\+ERR()}} or those that take a specific domain as argument \mbox{\hyperlink{group__Eina__Log__Group_ga4423c9d7bdc95555cf045b66e21e1f5c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+DBG()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga698d954a5fc2d120a553277361d68047}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+ERR()}}. Internally, \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}} will call the function defined with \mbox{\hyperlink{group__Eina__Log__Group_gac7291079db979a0195d62d5526b27c30}{eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+set()}}, that defaults to \mbox{\hyperlink{group__Eina__Log__Group_ga38af538700301b2aa201e92837ca9c46}{eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+stderr()}}, but may be changed to do whatever you need, such as networking or syslog logging.

The logging system is thread safe once initialized with \mbox{\hyperlink{group__Eina__Log__Group_ga2b7f1556ccee03f1351a1ff0a059ecfa}{eina\+\_\+log\+\_\+threads\+\_\+enable()}}. The thread that calls this function first is considered \char`\"{}main thread\char`\"{} and other threads will have their thread id (pthread\+\_\+self()) printed in the log message so it is easy to detect from where it is coming.

Log domains is the Eina way to differentiate messages. There might be different domains to represent different modules, different feature-\/set, different categories and so on. Filtering can be applied to domain names by means of {\ttfamily EINA\+\_\+\+LOG\+\_\+\+LEVELS} environment variable or \mbox{\hyperlink{group__Eina__Log__Group_gae44848ef2d3ce7b407d62f3de0036913}{eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+set()}}.

The different logging levels serve to customize the amount of debugging one want to take and may be used to automatically call abort() once some given level message is printed. This is controlled by environment variable {\ttfamily EINA\+\_\+\+LOG\+\_\+\+ABORT} and the level to be considered critical with {\ttfamily EINA\+\_\+\+LOG\+\_\+\+ABORT\+\_\+\+LEVEL}. These can be changed with \mbox{\hyperlink{group__Eina__Log__Group_gafd5bd8f8b44c19d0970bd21bb2d72e34}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+set()}} and \mbox{\hyperlink{group__Eina__Log__Group_gaa1f9627ef1c76a369e38c02971c634a7}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+set()}}.

The default maximum level to print is defined by environment variable {\ttfamily EINA\+\_\+\+LOG\+\_\+\+LEVEL}, but may be set per-\/domain with {\ttfamily EINA\+\_\+\+LOG\+\_\+\+LEVELS}. It will default to \mbox{\hyperlink{group__Eina__Log__Group_ga2e33caeeeb6051526c01b7fea4d6c91b}{EINA\+\_\+\+LOG\+\_\+\+ERR}}. This can be changed with \mbox{\hyperlink{group__Eina__Log__Group_ga3588dded50cc324ab6f84da2f328bd8e}{eina\+\_\+log\+\_\+level\+\_\+set()}}.

To use the log system Eina must be initialized with \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\+\_\+init()}} and later shut down with \mbox{\hyperlink{group__Eina__Main__Group_ga2c8b4020427108a30c44707af22c99d3}{eina\+\_\+shutdown()}}. Here is a straightforward example\+:


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{comment}{//Compile with:}}
\DoxyCodeLine{\textcolor{comment}{//gcc -\/Wall -\/o eina\_log\_01 eina\_log\_01.c `pkg-\/config -\/-\/cflags -\/-\/libs eina`}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <stdlib.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <stdio.h>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{Eina_8h}{Eina.h}}>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{void} test\_warn(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Log__Group_ga21c44f66537533db16ee8f475ae2ae70}{EINA\_LOG\_WARN}}(\textcolor{stringliteral}{"{}Here is a warning message"{}});}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int} main(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\_init}}())}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        printf(\textcolor{stringliteral}{"{}log during the initialization of Eina\_Log module\(\backslash\)n"{}});}
\DoxyCodeLine{        \textcolor{keywordflow}{return} EXIT\_FAILURE;}
\DoxyCodeLine{     \}}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Log__Group_ga3588dded50cc324ab6f84da2f328bd8e}{eina\_log\_level\_set}}(\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aae6fda047b87c6d22a23cbb7143dd2fe8}{EINA\_LOG\_LEVEL\_WARN}});}
\DoxyCodeLine{}
\DoxyCodeLine{   test\_warn();}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Main__Group_ga2c8b4020427108a30c44707af22c99d3}{eina\_shutdown}}();}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{return} EXIT\_SUCCESS;}
\DoxyCodeLine{\}}

\end{DoxyCodeInclude}


Compile this code with the following command\+:

\begin{DoxyVerb}gcc -Wall -o eina_log_01 eina_log_01.c `pkg-config --cflags --libs eina`\end{DoxyVerb}


Now execute the program with\+:

\begin{DoxyVerb}EINA_LOG_LEVEL=2 ./eina_log_01\end{DoxyVerb}


You should see a message displayed in the terminal.

For more information, you can look at the \mbox{\hyperlink{tutorial_log_page}{Log Tutorial}}. 

\doxysubsection{Macro Definition Documentation}
\mbox{\Hypertarget{group__Eina__Log__Group_ga41d6e3b51ce5f50ef403428776a02626}\label{group__Eina__Log__Group_ga41d6e3b51ce5f50ef403428776a02626}} 
\index{Log@{Log}!EINA\_LOG\_DOMAIN\_DEFAULT@{EINA\_LOG\_DOMAIN\_DEFAULT}}
\index{EINA\_LOG\_DOMAIN\_DEFAULT@{EINA\_LOG\_DOMAIN\_DEFAULT}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{EINA\_LOG\_DOMAIN\_DEFAULT}{EINA\_LOG\_DOMAIN\_DEFAULT}}
{\footnotesize\ttfamily \#define EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+DEFAULT~\mbox{\hyperlink{group__Eina__Log__Group_ga27a5fa58c9e63b1f4653a9e888c81cc0}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+GLOBAL}}}



This macro defines the domain to use with the macros \mbox{\hyperlink{group__Eina__Log__Group_ga4423c9d7bdc95555cf045b66e21e1f5c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+DBG()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga782f84a4805166d2707cb4d59217c64e}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+INFO()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga5073ce1fbcc1f6ea8d0670aac2ecce70}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+WARN()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga698d954a5fc2d120a553277361d68047}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+ERR()}} and \mbox{\hyperlink{group__Eina__Log__Group_ga50e2b86707c08c89e49759cb31b7b91c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+CRIT()}}. 

If not defined prior to the inclusion of this header, then it defaults to \mbox{\hyperlink{group__Eina__Log__Group_ga27a5fa58c9e63b1f4653a9e888c81cc0}{EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+GLOBAL}}.

\begin{DoxyNote}{Note}
One may like to redefine this in its code to avoid typing too much. In this case the recommended way is\+:
\end{DoxyNote}

\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{Eina_8h}{Eina.h}}>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#undef EINA\_LOG\_DOMAIN\_DEFAULT}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define EINA\_LOG\_DOMAIN\_DEFAULT \_log\_dom}}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{int} \_log\_dom = -\/1;}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int} main(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\_init}}();}
\DoxyCodeLine{   \_log\_dom = \mbox{\hyperlink{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}{eina\_log\_domain\_register}}(\textcolor{stringliteral}{"{}mydom"{}}, EINA\_COLOR\_CYAN);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Log__Group_ga2e33caeeeb6051526c01b7fea4d6c91b}{EINA\_LOG\_ERR}}(\textcolor{stringliteral}{"{}using my own domain"{}});}
\DoxyCodeLine{   \textcolor{keywordflow}{return} 0;}
\DoxyCodeLine{\}}

\end{DoxyCode}


\begin{DoxyWarning}{Warning}
If one defines the domain prior to inclusion of this header, the defined log domain symbol must be defined prior as well, otherwise the inlined functions defined by Eina will fail to find the symbol, causing build failure.
\end{DoxyWarning}

\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{preprocessor}{\#define EINA\_LOG\_DOMAIN\_DEFAULT \_log\_dom}}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{int} \_log\_dom = -\/1; \textcolor{comment}{// must come before inclusion of Eina.h!}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{Eina_8h}{Eina.h}}>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int} main(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\_init}}();}
\DoxyCodeLine{   \_log\_dom = \mbox{\hyperlink{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}{eina\_log\_domain\_register}}(\textcolor{stringliteral}{"{}mydom"{}}, EINA\_COLOR\_CYAN);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Log__Group_ga2e33caeeeb6051526c01b7fea4d6c91b}{EINA\_LOG\_ERR}}(\textcolor{stringliteral}{"{}using my own domain"{}});}
\DoxyCodeLine{   \textcolor{keywordflow}{return} 0;}
\DoxyCodeLine{\}}

\end{DoxyCode}
 \mbox{\Hypertarget{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}\label{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}} 
\index{Log@{Log}!EINA\_LOG@{EINA\_LOG}}
\index{EINA\_LOG@{EINA\_LOG}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{EINA\_LOG}{EINA\_LOG}}
{\footnotesize\ttfamily \#define EINA\+\_\+\+LOG(\begin{DoxyParamCaption}\item[{}]{DOM,  }\item[{}]{LEVEL,  }\item[{}]{fmt,  }\item[{}]{... }\end{DoxyParamCaption})~  do \{ (void) DOM; (void) LEVEL; (void) fmt; \} while (0)}



Logs a message on the specified domain, level and format. 

\begin{DoxyNote}{Note}
If {\ttfamily EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+MAXIMUM} is defined, then messages larger than this value will be ignored regardless of current domain level, the \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}} is not even called! Most compilers will just detect the two integers make the branch impossible and remove the branch and function call all together. Take this as optimization tip and possible remove debug messages from binaries to be deployed, saving on hot paths. Never define {\ttfamily EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+MAXIMUM} on public header files. 
\end{DoxyNote}
\mbox{\Hypertarget{group__Eina__Log__Group_ga5b50827f35399f9ff87f5d9d817c764a}\label{group__Eina__Log__Group_ga5b50827f35399f9ff87f5d9d817c764a}} 
\index{Log@{Log}!EINA\_LOG\_CRIT@{EINA\_LOG\_CRIT}}
\index{EINA\_LOG\_CRIT@{EINA\_LOG\_CRIT}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{EINA\_LOG\_CRIT}{EINA\_LOG\_CRIT}}
{\footnotesize\ttfamily \#define EINA\+\_\+\+LOG\+\_\+\+CRIT(\begin{DoxyParamCaption}\item[{}]{fmt,  }\item[{}]{... }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{  \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\_LOG}}(\mbox{\hyperlink{group__Eina__Log__Group_ga41d6e3b51ce5f50ef403428776a02626}{EINA\_LOG\_DOMAIN\_DEFAULT}}, \(\backslash\)}
\DoxyCodeLine{           \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa620ee82716c2c262ad2929823cf24ebd}{EINA\_LOG\_LEVEL\_CRITICAL}}, \(\backslash\)}
\DoxyCodeLine{           fmt,                     \(\backslash\)}
\DoxyCodeLine{           \#\# \_\_VA\_ARGS\_\_)}

\end{DoxyCode}


Logs a message with level CRITICAL on the default domain with the specified format. 



\doxysubsection{Enumeration Type Documentation}
\mbox{\Hypertarget{group__Eina__Log__Group_ga326699509b2e7578ace7c0a15b4a8c1a}\label{group__Eina__Log__Group_ga326699509b2e7578ace7c0a15b4a8c1a}} 
\index{Log@{Log}!\_Eina\_Log\_Level@{\_Eina\_Log\_Level}}
\index{\_Eina\_Log\_Level@{\_Eina\_Log\_Level}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{\_Eina\_Log\_Level}{\_Eina\_Log\_Level}}
{\footnotesize\ttfamily enum \mbox{\hyperlink{group__Eina__Log__Group_ga326699509b2e7578ace7c0a15b4a8c1a}{\+\_\+\+Eina\+\_\+\+Log\+\_\+\+Level}}}



List of available logging levels. 

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_LEVEL\_CRITICAL@{EINA\_LOG\_LEVEL\_CRITICAL}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_LEVEL\_CRITICAL@{EINA\_LOG\_LEVEL\_CRITICAL}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa620ee82716c2c262ad2929823cf24ebd}\label{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa620ee82716c2c262ad2929823cf24ebd}} 
EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+CRITICAL&Critical log level. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_LEVEL\_ERR@{EINA\_LOG\_LEVEL\_ERR}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_LEVEL\_ERR@{EINA\_LOG\_LEVEL\_ERR}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa8252243003214c2e38a3b228fc85eb80}\label{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa8252243003214c2e38a3b228fc85eb80}} 
EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+ERR&Error log level. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_LEVEL\_WARN@{EINA\_LOG\_LEVEL\_WARN}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_LEVEL\_WARN@{EINA\_LOG\_LEVEL\_WARN}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aae6fda047b87c6d22a23cbb7143dd2fe8}\label{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aae6fda047b87c6d22a23cbb7143dd2fe8}} 
EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+WARN&Warning log level. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_LEVEL\_INFO@{EINA\_LOG\_LEVEL\_INFO}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_LEVEL\_INFO@{EINA\_LOG\_LEVEL\_INFO}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa0368139789af856a6ad9bbe4f21d195f}\label{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa0368139789af856a6ad9bbe4f21d195f}} 
EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+INFO&Information log level. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_LEVEL\_DBG@{EINA\_LOG\_LEVEL\_DBG}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_LEVEL\_DBG@{EINA\_LOG\_LEVEL\_DBG}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aafdc5a5cfb78f5e4d5851447ed798af50}\label{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aafdc5a5cfb78f5e4d5851447ed798af50}} 
EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+DBG&Debug log level. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_LEVELS@{EINA\_LOG\_LEVELS}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_LEVELS@{EINA\_LOG\_LEVELS}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa880f2906e9b871ce8f590316d2f60652}\label{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aa880f2906e9b871ce8f590316d2f60652}} 
EINA\+\_\+\+LOG\+\_\+\+LEVELS&Count of default log levels. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_LEVEL\_UNKNOWN@{EINA\_LOG\_LEVEL\_UNKNOWN}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_LEVEL\_UNKNOWN@{EINA\_LOG\_LEVEL\_UNKNOWN}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aaa3ab2a3e3ae9d08a60e939d56198bb96}\label{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aaa3ab2a3e3ae9d08a60e939d56198bb96}} 
EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+UNKNOWN&Unknown level. \\
\hline

\end{DoxyEnumFields}
\mbox{\Hypertarget{group__Eina__Log__Group_ga125f3b55502884020a1546d0575ae052}\label{group__Eina__Log__Group_ga125f3b55502884020a1546d0575ae052}} 
\index{Log@{Log}!\_Eina\_Log\_State@{\_Eina\_Log\_State}}
\index{\_Eina\_Log\_State@{\_Eina\_Log\_State}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{\_Eina\_Log\_State}{\_Eina\_Log\_State}}
{\footnotesize\ttfamily enum \mbox{\hyperlink{group__Eina__Log__Group_ga125f3b55502884020a1546d0575ae052}{\+\_\+\+Eina\+\_\+\+Log\+\_\+\+State}}}



List of available log states. 

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_STATE\_START@{EINA\_LOG\_STATE\_START}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_STATE\_START@{EINA\_LOG\_STATE\_START}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga125f3b55502884020a1546d0575ae052a42e956e3a69ea29632f7e9d27a269903}\label{group__Eina__Log__Group_gga125f3b55502884020a1546d0575ae052a42e956e3a69ea29632f7e9d27a269903}} 
EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+START&Logging is Started. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{EINA\_LOG\_STATE\_STOP@{EINA\_LOG\_STATE\_STOP}!Log@{Log}}\index{Log@{Log}!EINA\_LOG\_STATE\_STOP@{EINA\_LOG\_STATE\_STOP}}}\mbox{\Hypertarget{group__Eina__Log__Group_gga125f3b55502884020a1546d0575ae052adcc235504e74cbd641635c0af36e9d47}\label{group__Eina__Log__Group_gga125f3b55502884020a1546d0575ae052adcc235504e74cbd641635c0af36e9d47}} 
EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+STOP&Logging is Stopped. \\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\Hypertarget{group__Eina__Log__Group_ga6506707f51c09f5876cf8b4cf47e7e26}\label{group__Eina__Log__Group_ga6506707f51c09f5876cf8b4cf47e7e26}} 
\index{Log@{Log}!eina\_log\_level\_check@{eina\_log\_level\_check}}
\index{eina\_log\_level\_check@{eina\_log\_level\_check}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_level\_check()}{eina\_log\_level\_check()}}
{\footnotesize\ttfamily static \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+log\+\_\+level\+\_\+check (\begin{DoxyParamCaption}\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Checks whenever the given level should be printed out. 


\begin{DoxyParams}{Parameters}
{\em level} & The level to print\\
\hline
\end{DoxyParams}
This is useful to enable certain blocks of code just when given level is to be used.


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{Eina_8h}{Eina.h}}>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{void} my\_func(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (\mbox{\hyperlink{group__Eina__Log__Group_ga6506707f51c09f5876cf8b4cf47e7e26}{eina\_log\_level\_check}}(\mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aae6fda047b87c6d22a23cbb7143dd2fe8}{EINA\_LOG\_LEVEL\_WARN}}))}
\DoxyCodeLine{      expensive\_debugging\_code(data);}
\DoxyCodeLine{}
\DoxyCodeLine{   my\_func\_code(data);}
\DoxyCodeLine{\}}

\end{DoxyCode}


\begin{DoxyReturn}{Returns}
\mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}} if level is equal or smaller than the current global logging level. 
\end{DoxyReturn}


References eina\+\_\+log\+\_\+level\+\_\+get().

\mbox{\Hypertarget{group__Eina__Log__Group_gaca5019f970a269e25e956a73de60fe4d}\label{group__Eina__Log__Group_gaca5019f970a269e25e956a73de60fe4d}} 
\index{Log@{Log}!eina\_log\_domain\_level\_check@{eina\_log\_domain\_level\_check}}
\index{eina\_log\_domain\_level\_check@{eina\_log\_domain\_level\_check}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_domain\_level\_check()}{eina\_log\_domain\_level\_check()}}
{\footnotesize\ttfamily static \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+check (\begin{DoxyParamCaption}\item[{int}]{domain,  }\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Checks whenever the given level should be printed out. 


\begin{DoxyParams}{Parameters}
{\em domain} & The domain to check \\
\hline
{\em level} & The level to print\\
\hline
\end{DoxyParams}
This is useful to enable certain blocks of code just when given level is to be used.


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{Eina_8h}{Eina.h}}>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{extern} \textcolor{keywordtype}{int} \_my\_log\_dom;}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{void} my\_func(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (\mbox{\hyperlink{group__Eina__Log__Group_gaca5019f970a269e25e956a73de60fe4d}{eina\_log\_domain\_level\_check}}(\_my\_log\_dom, \mbox{\hyperlink{group__Eina__Log__Group_gga326699509b2e7578ace7c0a15b4a8c1aae6fda047b87c6d22a23cbb7143dd2fe8}{EINA\_LOG\_LEVEL\_WARN}}))}
\DoxyCodeLine{      expensive\_debugging\_code(data);}
\DoxyCodeLine{}
\DoxyCodeLine{   my\_func\_code(data);}
\DoxyCodeLine{\}}

\end{DoxyCode}


\begin{DoxyReturn}{Returns}
\mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}} if level is equal or smaller than the current domain logging level. 
\end{DoxyReturn}


References EINA\+\_\+\+FALSE, EINA\+\_\+\+LIKELY, eina\+\_\+log\+\_\+domain\+\_\+registered\+\_\+level\+\_\+get(), and EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+UNKNOWN.

\mbox{\Hypertarget{group__Eina__Log__Group_gabd4f96ea6f37e826d7a328372a25ab2d}\label{group__Eina__Log__Group_gabd4f96ea6f37e826d7a328372a25ab2d}} 
\index{Log@{Log}!eina\_log\_level\_name\_get@{eina\_log\_level\_name\_get}}
\index{eina\_log\_level\_name\_get@{eina\_log\_level\_name\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_level\_name\_get()}{eina\_log\_level\_name\_get()}}
{\footnotesize\ttfamily static const char$\ast$ eina\+\_\+log\+\_\+level\+\_\+name\+\_\+get (\begin{DoxyParamCaption}\item[{int}]{level,  }\item[{char}]{name\mbox{[}4\mbox{]} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Function to format the level as a 3 character (+1 null byte) string. 

This function converts the given level to a known string name (CRI, ERR, WRN, INF or DBG) or a zero-\/padded 3-\/character string. In any case the last byte will contain a trailing null byte.

If extreme level values are used (greater than 999 and smaller than -\/99), then the value will just consider the less significant part. This is so uncommon that users should handle this in their code.


\begin{DoxyParams}{Parameters}
{\em level} & what level value to use. \\
\hline
{\em name} & where to write the actual value.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to {\ttfamily name}. 
\end{DoxyReturn}


References EINA\+\_\+\+LOG\+\_\+\+LEVELS, and EINA\+\_\+\+UNLIKELY.

\mbox{\Hypertarget{group__Eina__Log__Group_gaefc8431ec990c48713475e4e3e7f1612}\label{group__Eina__Log__Group_gaefc8431ec990c48713475e4e3e7f1612}} 
\index{Log@{Log}!eina\_log\_level\_color\_get@{eina\_log\_level\_color\_get}}
\index{eina\_log\_level\_color\_get@{eina\_log\_level\_color\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_level\_color\_get()}{eina\_log\_level\_color\_get()}}
{\footnotesize\ttfamily static const char$\ast$ eina\+\_\+log\+\_\+level\+\_\+color\+\_\+get (\begin{DoxyParamCaption}\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Function to get recommended color value for level. 

This function will not check if colors are enabled or not before returning the level color. If you desire such check, use \mbox{\hyperlink{group__Eina__Log__Group_gad61f8a4f117ddcf79e0074fae945219e}{eina\+\_\+log\+\_\+level\+\_\+color\+\_\+if\+\_\+enabled\+\_\+get()}}.


\begin{DoxyParams}{Parameters}
{\em level} & what level value to use.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to null byte terminated ANSI color string to be used in virtual terminals supporting VT100 color codes.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_gad61f8a4f117ddcf79e0074fae945219e}{eina\+\_\+log\+\_\+level\+\_\+color\+\_\+if\+\_\+enabled\+\_\+get()}} 
\end{DoxySeeAlso}


Referenced by eina\+\_\+log\+\_\+level\+\_\+color\+\_\+if\+\_\+enabled\+\_\+get().

\mbox{\Hypertarget{group__Eina__Log__Group_gad61f8a4f117ddcf79e0074fae945219e}\label{group__Eina__Log__Group_gad61f8a4f117ddcf79e0074fae945219e}} 
\index{Log@{Log}!eina\_log\_level\_color\_if\_enabled\_get@{eina\_log\_level\_color\_if\_enabled\_get}}
\index{eina\_log\_level\_color\_if\_enabled\_get@{eina\_log\_level\_color\_if\_enabled\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_level\_color\_if\_enabled\_get()}{eina\_log\_level\_color\_if\_enabled\_get()}}
{\footnotesize\ttfamily static const char$\ast$ eina\+\_\+log\+\_\+level\+\_\+color\+\_\+if\+\_\+enabled\+\_\+get (\begin{DoxyParamCaption}\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Function to get recommended color value for level, if colors are enabled. 

This function will check if colors are enabled or not before returning the level color. If colors are disabled, then empty string is returned.


\begin{DoxyParams}{Parameters}
{\em level} & what level value to use.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to null byte terminated ANSI color string to be used in virtual terminals supporting VT100 color codes. If colors are disabled, the empty string is returned. 
\end{DoxyReturn}


References eina\+\_\+log\+\_\+color\+\_\+disable\+\_\+get(), and eina\+\_\+log\+\_\+level\+\_\+color\+\_\+get().

\mbox{\Hypertarget{group__Eina__Log__Group_ga2b7f1556ccee03f1351a1ff0a059ecfa}\label{group__Eina__Log__Group_ga2b7f1556ccee03f1351a1ff0a059ecfa}} 
\index{Log@{Log}!eina\_log\_threads\_enable@{eina\_log\_threads\_enable}}
\index{eina\_log\_threads\_enable@{eina\_log\_threads\_enable}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_threads\_enable()}{eina\_log\_threads\_enable()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+threads\+\_\+enable (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Enable logging module to handle threads. 

There is no disable option on purpose, if it is enabled, there is no way back until you call the last \mbox{\hyperlink{group__Eina__Main__Group_ga2c8b4020427108a30c44707af22c99d3}{eina\+\_\+shutdown()}}.

There is no function to retrieve if threads are enabled as one is not supposed to know this from outside.

After this call is executed at least once, if Eina was compiled with threads support then logging will lock around debug messages and threads that are not the main thread will have its identifier printed.

The main thread is considered the thread where the first \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\+\_\+init()}} was called. 

References EINA\+\_\+\+TRUE.

\mbox{\Hypertarget{group__Eina__Log__Group_gac7291079db979a0195d62d5526b27c30}\label{group__Eina__Log__Group_gac7291079db979a0195d62d5526b27c30}} 
\index{Log@{Log}!eina\_log\_print\_cb\_set@{eina\_log\_print\_cb\_set}}
\index{eina\_log\_print\_cb\_set@{eina\_log\_print\_cb\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_print\_cb\_set()}{eina\_log\_print\_cb\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+set (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__Eina__Log__Group_ga76501a2d10e374980c4012664e4ca96f}{Eina\+\_\+\+Log\+\_\+\+Print\+\_\+\+Cb}}}]{cb,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})}



Sets logging method to use. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em cb} & The callback to call when printing a log. \\
\hline
\mbox{\texttt{ in}}  & {\em data} & The data to pass to the callback.\\
\hline
\end{DoxyParams}
By default, \mbox{\hyperlink{group__Eina__Log__Group_ga38af538700301b2aa201e92837ca9c46}{eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+stderr()}} is used.

\begin{DoxyNote}{Note}
MT\+: Safe to call from any thread.

MT\+: Given function {\itshape cb} will be called protected by mutex. This means you\textquotesingle{}re safe from other calls but you should never call \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}}, directly or indirectly. 
\end{DoxyNote}


References eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+stderr().

\mbox{\Hypertarget{group__Eina__Log__Group_ga3588dded50cc324ab6f84da2f328bd8e}\label{group__Eina__Log__Group_ga3588dded50cc324ab6f84da2f328bd8e}} 
\index{Log@{Log}!eina\_log\_level\_set@{eina\_log\_level\_set}}
\index{eina\_log\_level\_set@{eina\_log\_level\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_level\_set()}{eina\_log\_level\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+level\+\_\+set (\begin{DoxyParamCaption}\item[{int}]{level }\end{DoxyParamCaption})}



Sets the default log level. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em level} & The log level.\\
\hline
\end{DoxyParams}
This function sets the log level {\ttfamily level}. It is used in \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}}.

\begin{DoxyNote}{Note}
this is initially set to envvar EINA\+\_\+\+LOG\+\_\+\+LEVEL by \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\+\_\+init()}}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_ga91a8e7d7cfd25939b64589212d391c38}{eina\+\_\+log\+\_\+level\+\_\+get()}} 
\end{DoxySeeAlso}


References EINA\+\_\+\+LIKELY, EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+GLOBAL, and \+\_\+\+Eina\+\_\+\+Log\+\_\+\+Domain\+::level.

\mbox{\Hypertarget{group__Eina__Log__Group_ga91a8e7d7cfd25939b64589212d391c38}\label{group__Eina__Log__Group_ga91a8e7d7cfd25939b64589212d391c38}} 
\index{Log@{Log}!eina\_log\_level\_get@{eina\_log\_level\_get}}
\index{eina\_log\_level\_get@{eina\_log\_level\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_level\_get()}{eina\_log\_level\_get()}}
{\footnotesize\ttfamily int eina\+\_\+log\+\_\+level\+\_\+get (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Gets the default log level. 

\begin{DoxyReturn}{Returns}
The log level that limits \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}}.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_ga3588dded50cc324ab6f84da2f328bd8e}{eina\+\_\+log\+\_\+level\+\_\+set()}} 
\end{DoxySeeAlso}


Referenced by eina\+\_\+log\+\_\+level\+\_\+check().

\mbox{\Hypertarget{group__Eina__Log__Group_gac5ce77a36dc70b40f8d6708135829917}\label{group__Eina__Log__Group_gac5ce77a36dc70b40f8d6708135829917}} 
\index{Log@{Log}!eina\_log\_main\_thread\_check@{eina\_log\_main\_thread\_check}}
\index{eina\_log\_main\_thread\_check@{eina\_log\_main\_thread\_check}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_main\_thread\_check()}{eina\_log\_main\_thread\_check()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+log\+\_\+main\+\_\+thread\+\_\+check (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Checks if current thread is the main thread. 

If there is no thread support (compiled with --disable-\/pthreads) or threads were not enabled, then \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}} is returned. The only case where \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\+\_\+\+FALSE}} is returned is when threads were successfully enabled but the current thread is not the one that called eina\+\_\+log\+\_\+threads\+\_\+init() (the main thread).

\begin{DoxyReturn}{Returns}
\mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}} if the current thread is the one that called eina\+\_\+log\+\_\+threads\+\_\+init(), otherwise \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\+\_\+\+FALSE}}. 
\end{DoxyReturn}


References EINA\+\_\+\+TRUE.

\mbox{\Hypertarget{group__Eina__Log__Group_gac034e165604088379530e6c67f0233d6}\label{group__Eina__Log__Group_gac034e165604088379530e6c67f0233d6}} 
\index{Log@{Log}!eina\_log\_color\_disable\_set@{eina\_log\_color\_disable\_set}}
\index{eina\_log\_color\_disable\_set@{eina\_log\_color\_disable\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_color\_disable\_set()}{eina\_log\_color\_disable\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+color\+\_\+disable\+\_\+set (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}}}]{disabled }\end{DoxyParamCaption})}



Enables or disables colored text in the logs. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em disabled} & If \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}, color logging should be disabled.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
this is initially set to envvar EINA\+\_\+\+LOG\+\_\+\+COLOR\+\_\+\+DISABLE by \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\+\_\+init()}}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_ga77a96439127b855203bb7f6ba711ada5}{eina\+\_\+log\+\_\+color\+\_\+disable\+\_\+get()}} 
\end{DoxySeeAlso}


References \+\_\+\+Eina\+\_\+\+Log\+\_\+\+Domain\+::color, \+\_\+\+Eina\+\_\+\+Log\+\_\+\+Domain\+::domain\+\_\+str, and \+\_\+\+Eina\+\_\+\+Log\+\_\+\+Domain\+::name.

\mbox{\Hypertarget{group__Eina__Log__Group_ga77a96439127b855203bb7f6ba711ada5}\label{group__Eina__Log__Group_ga77a96439127b855203bb7f6ba711ada5}} 
\index{Log@{Log}!eina\_log\_color\_disable\_get@{eina\_log\_color\_disable\_get}}
\index{eina\_log\_color\_disable\_get@{eina\_log\_color\_disable\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_color\_disable\_get()}{eina\_log\_color\_disable\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+log\+\_\+color\+\_\+disable\+\_\+get (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Determines if color logging is enabled or disabled. 

\begin{DoxyReturn}{Returns}
If \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}, color logging is disabled.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_gac034e165604088379530e6c67f0233d6}{eina\+\_\+log\+\_\+color\+\_\+disable\+\_\+set()}} 
\end{DoxySeeAlso}


References EINA\+\_\+\+TRUE.



Referenced by eina\+\_\+log\+\_\+level\+\_\+color\+\_\+if\+\_\+enabled\+\_\+get().

\mbox{\Hypertarget{group__Eina__Log__Group_ga85ea9e96d9907172d24dfbd43158c04a}\label{group__Eina__Log__Group_ga85ea9e96d9907172d24dfbd43158c04a}} 
\index{Log@{Log}!eina\_log\_file\_disable\_set@{eina\_log\_file\_disable\_set}}
\index{eina\_log\_file\_disable\_set@{eina\_log\_file\_disable\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_file\_disable\_set()}{eina\_log\_file\_disable\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+file\+\_\+disable\+\_\+set (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}}}]{disabled }\end{DoxyParamCaption})}



Sets if originating file name logging should be disabled. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em disabled} & If \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}, file name logging should be disabled.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
this is initially set to envvar EINA\+\_\+\+LOG\+\_\+\+FILE\+\_\+\+DISABLE by \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\+\_\+init()}}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_gaf1b681a61bb7fb83294fd89665f39047}{eina\+\_\+log\+\_\+file\+\_\+disable\+\_\+get()}} 
\end{DoxySeeAlso}
\mbox{\Hypertarget{group__Eina__Log__Group_gaf1b681a61bb7fb83294fd89665f39047}\label{group__Eina__Log__Group_gaf1b681a61bb7fb83294fd89665f39047}} 
\index{Log@{Log}!eina\_log\_file\_disable\_get@{eina\_log\_file\_disable\_get}}
\index{eina\_log\_file\_disable\_get@{eina\_log\_file\_disable\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_file\_disable\_get()}{eina\_log\_file\_disable\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+log\+\_\+file\+\_\+disable\+\_\+get (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Gets if originating file name logging should be disabled. 

\begin{DoxyReturn}{Returns}
If \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}, file name logging should be disabled.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_ga85ea9e96d9907172d24dfbd43158c04a}{eina\+\_\+log\+\_\+file\+\_\+disable\+\_\+set()}} 
\end{DoxySeeAlso}


References EINA\+\_\+\+TRUE.

\mbox{\Hypertarget{group__Eina__Log__Group_gafd20b0417b03d215dab420d29ab14ff5}\label{group__Eina__Log__Group_gafd20b0417b03d215dab420d29ab14ff5}} 
\index{Log@{Log}!eina\_log\_function\_disable\_set@{eina\_log\_function\_disable\_set}}
\index{eina\_log\_function\_disable\_set@{eina\_log\_function\_disable\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_function\_disable\_set()}{eina\_log\_function\_disable\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+function\+\_\+disable\+\_\+set (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}}}]{disabled }\end{DoxyParamCaption})}



Sets if originating function name logging should be disabled. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em disabled} & If \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}, function name logging should be disabled.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
this is initially set to envvar EINA\+\_\+\+LOG\+\_\+\+FUNCTION\+\_\+\+DISABLE by \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\+\_\+init()}}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_ga9c65b1b471b68f50c584adf1b916885e}{eina\+\_\+log\+\_\+function\+\_\+disable\+\_\+get()}} 
\end{DoxySeeAlso}
\mbox{\Hypertarget{group__Eina__Log__Group_ga9c65b1b471b68f50c584adf1b916885e}\label{group__Eina__Log__Group_ga9c65b1b471b68f50c584adf1b916885e}} 
\index{Log@{Log}!eina\_log\_function\_disable\_get@{eina\_log\_function\_disable\_get}}
\index{eina\_log\_function\_disable\_get@{eina\_log\_function\_disable\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_function\_disable\_get()}{eina\_log\_function\_disable\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+log\+\_\+function\+\_\+disable\+\_\+get (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Gets if originating function name logging should be disabled. 

\begin{DoxyReturn}{Returns}
If \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}, function name logging should be disabled.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_gafd20b0417b03d215dab420d29ab14ff5}{eina\+\_\+log\+\_\+function\+\_\+disable\+\_\+set()}} 
\end{DoxySeeAlso}


References EINA\+\_\+\+TRUE.

\mbox{\Hypertarget{group__Eina__Log__Group_gafd5bd8f8b44c19d0970bd21bb2d72e34}\label{group__Eina__Log__Group_gafd5bd8f8b44c19d0970bd21bb2d72e34}} 
\index{Log@{Log}!eina\_log\_abort\_on\_critical\_set@{eina\_log\_abort\_on\_critical\_set}}
\index{eina\_log\_abort\_on\_critical\_set@{eina\_log\_abort\_on\_critical\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_abort\_on\_critical\_set()}{eina\_log\_abort\_on\_critical\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+set (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}}}]{abort\+\_\+on\+\_\+critical }\end{DoxyParamCaption})}



Sets if critical messages should abort the program. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em abort\+\_\+on\+\_\+critical} & If \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}, messages with level equal or smaller than \mbox{\hyperlink{group__Eina__Log__Group_ga7b23128aa5512aff0a4698a5cfa9a2e9}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+get()}} will abort the program.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
this is initially set to envvar EINA\+\_\+\+LOG\+\_\+\+ABORT by \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\+\_\+init()}}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_ga6ac58025ffeb43fc110317cf3d3c9831}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+get()}} 

\mbox{\hyperlink{group__Eina__Log__Group_gaa1f9627ef1c76a369e38c02971c634a7}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+set()}} 
\end{DoxySeeAlso}


Referenced by ecore\+\_\+buffer\+\_\+queue\+\_\+init().

\mbox{\Hypertarget{group__Eina__Log__Group_ga6ac58025ffeb43fc110317cf3d3c9831}\label{group__Eina__Log__Group_ga6ac58025ffeb43fc110317cf3d3c9831}} 
\index{Log@{Log}!eina\_log\_abort\_on\_critical\_get@{eina\_log\_abort\_on\_critical\_get}}
\index{eina\_log\_abort\_on\_critical\_get@{eina\_log\_abort\_on\_critical\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_abort\_on\_critical\_get()}{eina\_log\_abort\_on\_critical\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+get (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Gets if critical messages should abort the program. 

\begin{DoxyReturn}{Returns}
If \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}, any messages with level equal or smaller than \mbox{\hyperlink{group__Eina__Log__Group_ga7b23128aa5512aff0a4698a5cfa9a2e9}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+get()}} will abort the program.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_gafd5bd8f8b44c19d0970bd21bb2d72e34}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+set()}} 

\mbox{\hyperlink{group__Eina__Log__Group_gaa1f9627ef1c76a369e38c02971c634a7}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+set()}} 
\end{DoxySeeAlso}


References EINA\+\_\+\+FALSE.

\mbox{\Hypertarget{group__Eina__Log__Group_gaa1f9627ef1c76a369e38c02971c634a7}\label{group__Eina__Log__Group_gaa1f9627ef1c76a369e38c02971c634a7}} 
\index{Log@{Log}!eina\_log\_abort\_on\_critical\_level\_set@{eina\_log\_abort\_on\_critical\_level\_set}}
\index{eina\_log\_abort\_on\_critical\_level\_set@{eina\_log\_abort\_on\_critical\_level\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_abort\_on\_critical\_level\_set()}{eina\_log\_abort\_on\_critical\_level\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+set (\begin{DoxyParamCaption}\item[{int}]{critical\+\_\+level }\end{DoxyParamCaption})}



Sets level that triggers abort if abort-\/on-\/critical is set. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em critical\+\_\+level} & Levels equal or smaller than the given value will trigger program abortion if \mbox{\hyperlink{group__Eina__Log__Group_ga6ac58025ffeb43fc110317cf3d3c9831}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+get()}} returns \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
this is initially set to envvar EINA\+\_\+\+LOG\+\_\+\+ABORT\+\_\+\+LEVEL by \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\+\_\+init()}}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_ga7b23128aa5512aff0a4698a5cfa9a2e9}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+get()}} 

\mbox{\hyperlink{group__Eina__Log__Group_ga6ac58025ffeb43fc110317cf3d3c9831}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+get()}} 
\end{DoxySeeAlso}


Referenced by ecore\+\_\+buffer\+\_\+queue\+\_\+init().

\mbox{\Hypertarget{group__Eina__Log__Group_ga7b23128aa5512aff0a4698a5cfa9a2e9}\label{group__Eina__Log__Group_ga7b23128aa5512aff0a4698a5cfa9a2e9}} 
\index{Log@{Log}!eina\_log\_abort\_on\_critical\_level\_get@{eina\_log\_abort\_on\_critical\_level\_get}}
\index{eina\_log\_abort\_on\_critical\_level\_get@{eina\_log\_abort\_on\_critical\_level\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_abort\_on\_critical\_level\_get()}{eina\_log\_abort\_on\_critical\_level\_get()}}
{\footnotesize\ttfamily int eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+get (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Gets level that triggers abort if abort-\/on-\/critical is set. 

\begin{DoxyReturn}{Returns}
Critical level equal or smaller than value will trigger program abortion if \mbox{\hyperlink{group__Eina__Log__Group_ga6ac58025ffeb43fc110317cf3d3c9831}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+get()}} returns \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}}.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_gaa1f9627ef1c76a369e38c02971c634a7}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+level\+\_\+set()}} 

\mbox{\hyperlink{group__Eina__Log__Group_ga6ac58025ffeb43fc110317cf3d3c9831}{eina\+\_\+log\+\_\+abort\+\_\+on\+\_\+critical\+\_\+get()}} 
\end{DoxySeeAlso}
\mbox{\Hypertarget{group__Eina__Log__Group_gae44848ef2d3ce7b407d62f3de0036913}\label{group__Eina__Log__Group_gae44848ef2d3ce7b407d62f3de0036913}} 
\index{Log@{Log}!eina\_log\_domain\_level\_set@{eina\_log\_domain\_level\_set}}
\index{eina\_log\_domain\_level\_set@{eina\_log\_domain\_level\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_domain\_level\_set()}{eina\_log\_domain\_level\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+set (\begin{DoxyParamCaption}\item[{const char $\ast$}]{domain\+\_\+name,  }\item[{int}]{level }\end{DoxyParamCaption})}



Sets the domain level given its name. 

This call has the same effect as setting EINA\+\_\+\+LOG\+\_\+\+LEVELS=$<${\ttfamily domain\+\_\+name$>$}\+:$<${\ttfamily level$>$} 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em domain\+\_\+name} & Domain name to change the level. It may be of a still not registered domain. If the domain is not registered yet, it will be saved as a pending set and applied upon registration. \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Level to use to limit \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}} for given domain. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{group__Eina__Log__Group_gab2027f5a6e7554dcff6a58dfc92f5550}\label{group__Eina__Log__Group_gab2027f5a6e7554dcff6a58dfc92f5550}} 
\index{Log@{Log}!eina\_log\_domain\_level\_get@{eina\_log\_domain\_level\_get}}
\index{eina\_log\_domain\_level\_get@{eina\_log\_domain\_level\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_domain\_level\_get()}{eina\_log\_domain\_level\_get()}}
{\footnotesize\ttfamily int eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+get (\begin{DoxyParamCaption}\item[{const char $\ast$}]{domain\+\_\+name }\end{DoxyParamCaption})}



Gets the domain level given its name. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em domain\+\_\+name} & Domain name to retrieve the level. It may be of a still not registered domain. If the domain is not registered yet, but there is a pending value, either from \mbox{\hyperlink{group__Eina__Log__Group_gae44848ef2d3ce7b407d62f3de0036913}{eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+set()}},EINA\+\_\+\+LOG\+\_\+\+LEVELS environment variable or from EINA\+\_\+\+LOG\+\_\+\+LEVELS\+\_\+\+GLOB, these are returned. If nothing else was found, then the global/default level (\mbox{\hyperlink{group__Eina__Log__Group_ga91a8e7d7cfd25939b64589212d391c38}{eina\+\_\+log\+\_\+level\+\_\+get()}}) is returned.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Level to use to limit \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}} for given domain. On error ({\ttfamily domain\+\_\+name} == NULL), EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+UNKNOWN is returned.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_gae44848ef2d3ce7b407d62f3de0036913}{eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+set()}} 

\mbox{\hyperlink{group__Eina__Log__Group_gaf923006303d86304c2a24f3299aaafe8}{eina\+\_\+log\+\_\+domain\+\_\+registered\+\_\+level\+\_\+get()}} 
\end{DoxySeeAlso}
\mbox{\Hypertarget{group__Eina__Log__Group_gaf923006303d86304c2a24f3299aaafe8}\label{group__Eina__Log__Group_gaf923006303d86304c2a24f3299aaafe8}} 
\index{Log@{Log}!eina\_log\_domain\_registered\_level\_get@{eina\_log\_domain\_registered\_level\_get}}
\index{eina\_log\_domain\_registered\_level\_get@{eina\_log\_domain\_registered\_level\_get}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_domain\_registered\_level\_get()}{eina\_log\_domain\_registered\_level\_get()}}
{\footnotesize\ttfamily int eina\+\_\+log\+\_\+domain\+\_\+registered\+\_\+level\+\_\+get (\begin{DoxyParamCaption}\item[{int}]{domain }\end{DoxyParamCaption})}



Gets the domain level given its identifier. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em domain} & Identifier, so it must be previously registered with \mbox{\hyperlink{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}{eina\+\_\+log\+\_\+domain\+\_\+register()}}. It\textquotesingle{}s a much faster version of \mbox{\hyperlink{group__Eina__Log__Group_gab2027f5a6e7554dcff6a58dfc92f5550}{eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+get()}}, but relies on domain being present.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\+\_\+\+TRUE}} if level should be printed, \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\+\_\+\+FALSE}} if not. (domain\textquotesingle{}s level is greater or equal {\itshape level}). 
\end{DoxyReturn}


References EINA\+\_\+\+LOG\+\_\+\+LEVEL\+\_\+\+UNKNOWN, EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+FALSE\+\_\+\+RETURN\+\_\+\+VAL, EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+TRUE\+\_\+\+RETURN\+\_\+\+VAL, and \+\_\+\+Eina\+\_\+\+Log\+\_\+\+Domain\+::level.



Referenced by eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+check().

\mbox{\Hypertarget{group__Eina__Log__Group_ga0f8ccce51c24a6ae4f43d1fe55903572}\label{group__Eina__Log__Group_ga0f8ccce51c24a6ae4f43d1fe55903572}} 
\index{Log@{Log}!eina\_log\_domain\_registered\_level\_set@{eina\_log\_domain\_registered\_level\_set}}
\index{eina\_log\_domain\_registered\_level\_set@{eina\_log\_domain\_registered\_level\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_domain\_registered\_level\_set()}{eina\_log\_domain\_registered\_level\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+domain\+\_\+registered\+\_\+level\+\_\+set (\begin{DoxyParamCaption}\item[{int}]{domain,  }\item[{int}]{level }\end{DoxyParamCaption})}



Sets the domain level given its identifier. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em domain} & Identifier, so it must be previously registered with \mbox{\hyperlink{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}{eina\+\_\+log\+\_\+domain\+\_\+register()}}. It\textquotesingle{}s a much faster version of \mbox{\hyperlink{group__Eina__Log__Group_gab2027f5a6e7554dcff6a58dfc92f5550}{eina\+\_\+log\+\_\+domain\+\_\+level\+\_\+get()}}, but relies on domain being present. \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Level to use to limit \mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}} for given domain. \\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+10 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+FALSE\+\_\+\+RETURN, EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+TRUE\+\_\+\+RETURN, and \+\_\+\+Eina\+\_\+\+Log\+\_\+\+Domain\+::level.

\mbox{\Hypertarget{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}\label{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}} 
\index{Log@{Log}!eina\_log\_domain\_register@{eina\_log\_domain\_register}}
\index{eina\_log\_domain\_register@{eina\_log\_domain\_register}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_domain\_register()}{eina\_log\_domain\_register()}}
{\footnotesize\ttfamily int eina\+\_\+log\+\_\+domain\+\_\+register (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name,  }\item[{const char $\ast$}]{color }\end{DoxyParamCaption})}


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em name} & Domain name \\
\hline
\mbox{\texttt{ in}}  & {\em color} & Color of the domain name\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Domain index that will be used as the DOMAIN parameter on log macros. A negative return value means an error occurred.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
MT\+: Safe to call from any thread. 
\end{DoxyNote}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL.



Referenced by ecore\+\_\+audio\+\_\+init(), ecore\+\_\+buffer\+\_\+init(), ecore\+\_\+buffer\+\_\+queue\+\_\+init(), ecore\+\_\+con\+\_\+init(), ecore\+\_\+drm2\+\_\+init(), ecore\+\_\+drm\+\_\+init(), ecore\+\_\+evas\+\_\+init(), ecore\+\_\+event\+\_\+init(), ecore\+\_\+file\+\_\+init(), ecore\+\_\+imf\+\_\+init(), ecore\+\_\+init(), ecore\+\_\+ipc\+\_\+init(), ecore\+\_\+sdl\+\_\+init(), ecore\+\_\+win32\+\_\+init(), ecore\+\_\+wl2\+\_\+init(), ecore\+\_\+wl\+\_\+init(), ector\+\_\+init(), edje\+\_\+init(), eet\+\_\+init(), eeze\+\_\+init(), eina\+\_\+init(), eina\+\_\+mmap\+\_\+safety\+\_\+enabled\+\_\+set(), eio\+\_\+init(), eldbus\+\_\+init(), elm\+\_\+quicklaunch\+\_\+init(), elput\+\_\+init(), elua\+\_\+init(), embryo\+\_\+init(), emile\+\_\+init(), and evas\+\_\+init().

\mbox{\Hypertarget{group__Eina__Log__Group_ga94c62d918308a366a26352ff4a7fb0c8}\label{group__Eina__Log__Group_ga94c62d918308a366a26352ff4a7fb0c8}} 
\index{Log@{Log}!eina\_log\_domain\_unregister@{eina\_log\_domain\_unregister}}
\index{eina\_log\_domain\_unregister@{eina\_log\_domain\_unregister}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_domain\_unregister()}{eina\_log\_domain\_unregister()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+domain\+\_\+unregister (\begin{DoxyParamCaption}\item[{int}]{domain }\end{DoxyParamCaption})}



Forgets about a logging domain registered by \mbox{\hyperlink{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}{eina\+\_\+log\+\_\+domain\+\_\+register()}} 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em domain} & Domain identifier as reported by \mbox{\hyperlink{group__Eina__Log__Group_gabdd5fedabf0f175017222bfbc78e86b4}{eina\+\_\+log\+\_\+domain\+\_\+register()}}, must be $>$= 0.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
MT\+: Safe to call from any thread. 
\end{DoxyNote}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+FALSE\+\_\+\+RETURN.



Referenced by ecore\+\_\+audio\+\_\+shutdown(), ecore\+\_\+buffer\+\_\+init(), ecore\+\_\+buffer\+\_\+queue\+\_\+init(), ecore\+\_\+buffer\+\_\+queue\+\_\+shutdown(), ecore\+\_\+buffer\+\_\+shutdown(), ecore\+\_\+con\+\_\+shutdown(), ecore\+\_\+evas\+\_\+shutdown(), ecore\+\_\+file\+\_\+shutdown(), ecore\+\_\+ipc\+\_\+init(), ecore\+\_\+win32\+\_\+init(), ecore\+\_\+win32\+\_\+shutdown(), ecore\+\_\+x\+\_\+init(), ecore\+\_\+x\+\_\+init\+\_\+from\+\_\+display(), ector\+\_\+shutdown(), eet\+\_\+init(), eet\+\_\+shutdown(), eeze\+\_\+init(), eeze\+\_\+shutdown(), eldbus\+\_\+init(), elua\+\_\+shutdown(), embryo\+\_\+shutdown(), emile\+\_\+shutdown(), emotion\+\_\+shutdown(), ethumb\+\_\+client\+\_\+shutdown(), evas\+\_\+init(), and evas\+\_\+shutdown().

\mbox{\Hypertarget{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}\label{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}} 
\index{Log@{Log}!eina\_log\_print@{eina\_log\_print}}
\index{eina\_log\_print@{eina\_log\_print}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_print()}{eina\_log\_print()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+print (\begin{DoxyParamCaption}\item[{int}]{domain,  }\item[{\mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}}}]{level,  }\item[{const char $\ast$}]{file,  }\item[{const char $\ast$}]{function,  }\item[{int}]{line,  }\item[{const char $\ast$}]{fmt,  }\item[{}]{... }\end{DoxyParamCaption})}



Prints out log message using given domain and level. 

\begin{DoxyNote}{Note}
Usually you\textquotesingle{}ll not use this function directly but the helper macros \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga50e2b86707c08c89e49759cb31b7b91c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+CRIT()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga5b50827f35399f9ff87f5d9d817c764a}{EINA\+\_\+\+LOG\+\_\+\+CRIT()}} and so on. See eina\+\_\+log.\+h
\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em domain} & Logging domain to use or {\ttfamily EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+GLOBAL} if you registered none. It is recommended that modules and applications have their own logging domain. \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Message level, those with level greater than user specified value (\mbox{\hyperlink{group__Eina__Log__Group_ga3588dded50cc324ab6f84da2f328bd8e}{eina\+\_\+log\+\_\+level\+\_\+set()}} or environment variables EINA\+\_\+\+LOG\+\_\+\+LEVEL, EINA\+\_\+\+LOG\+\_\+\+LEVELS) will be ignored. \\
\hline
\mbox{\texttt{ in}}  & {\em file} & Filename that originated the call, must {\bfseries{not}} be {\ttfamily NULL}. \\
\hline
\mbox{\texttt{ in}}  & {\em function} & Function that originated the call, must {\bfseries{not}} be {\ttfamily NULL}. \\
\hline
\mbox{\texttt{ in}}  & {\em line} & Originating line in {\itshape file}. \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & Printf-\/like format to use. Should not provide trailing \textquotesingle{}~\newline
\textquotesingle{} as it is automatically included. \\
\hline
\mbox{\texttt{ in}}  & {\em ...} & Variadic args.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
MT\+: This function may be called from different threads if \mbox{\hyperlink{group__Eina__Log__Group_ga2b7f1556ccee03f1351a1ff0a059ecfa}{eina\+\_\+log\+\_\+threads\+\_\+enable()}} was called before. 
\end{DoxyNote}


Referenced by eina\+\_\+magic\+\_\+fail().

\mbox{\Hypertarget{group__Eina__Log__Group_ga6f8a0c04a92a75499957a230faf2f7fa}\label{group__Eina__Log__Group_ga6f8a0c04a92a75499957a230faf2f7fa}} 
\index{Log@{Log}!eina\_log\_vprint@{eina\_log\_vprint}}
\index{eina\_log\_vprint@{eina\_log\_vprint}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_vprint()}{eina\_log\_vprint()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+vprint (\begin{DoxyParamCaption}\item[{int}]{domain,  }\item[{\mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}}}]{level,  }\item[{const char $\ast$}]{file,  }\item[{const char $\ast$}]{fnc,  }\item[{int}]{line,  }\item[{const char $\ast$}]{fmt,  }\item[{va\+\_\+list}]{args }\end{DoxyParamCaption})}



Prints out log message using given domain and level. 

\begin{DoxyNote}{Note}
Usually you\textquotesingle{}ll not use this function directly but the helper macros \mbox{\hyperlink{group__Eina__Log__Group_ga00e2a10370282673064d2bd3579b463c}{EINA\+\_\+\+LOG()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga50e2b86707c08c89e49759cb31b7b91c}{EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+CRIT()}}, \mbox{\hyperlink{group__Eina__Log__Group_ga5b50827f35399f9ff87f5d9d817c764a}{EINA\+\_\+\+LOG\+\_\+\+CRIT()}} and so on. See eina\+\_\+log.\+h
\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em domain} & Logging domain to use or {\ttfamily EINA\+\_\+\+LOG\+\_\+\+DOMAIN\+\_\+\+GLOBAL} if you registered none. It is recommended that modules and applications have their own logging domain. \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Message level, those with level greater than user specified value (\mbox{\hyperlink{group__Eina__Log__Group_ga3588dded50cc324ab6f84da2f328bd8e}{eina\+\_\+log\+\_\+level\+\_\+set()}} or environment variables EINA\+\_\+\+LOG\+\_\+\+LEVEL, EINA\+\_\+\+LOG\+\_\+\+LEVELS) will be ignored. \\
\hline
\mbox{\texttt{ in}}  & {\em file} & Filename that originated the call, must {\bfseries{not}} be {\ttfamily NULL}. \\
\hline
\mbox{\texttt{ in}}  & {\em fnc} & Function that originated the call, must {\bfseries{not}} be {\ttfamily NULL}. \\
\hline
\mbox{\texttt{ in}}  & {\em line} & Originating line in {\itshape file}. \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & Printf-\/like format to use. Should not provide trailing \textquotesingle{}~\newline
\textquotesingle{} as it is automatically included. \\
\hline
\mbox{\texttt{ in}}  & {\em args} & The arguments needed by the format.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
MT\+: this function may be called from different threads if \mbox{\hyperlink{group__Eina__Log__Group_ga2b7f1556ccee03f1351a1ff0a059ecfa}{eina\+\_\+log\+\_\+threads\+\_\+enable()}} was called before.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Log__Group_ga2ad47c77225cbcf8d35840547b5bbbe4}{eina\+\_\+log\+\_\+print()}} 
\end{DoxySeeAlso}


References EINA\+\_\+\+UNLIKELY.

\mbox{\Hypertarget{group__Eina__Log__Group_ga294021e9b33b39b39d2f6c6ddc8fcd9b}\label{group__Eina__Log__Group_ga294021e9b33b39b39d2f6c6ddc8fcd9b}} 
\index{Log@{Log}!eina\_log\_print\_cb\_stdout@{eina\_log\_print\_cb\_stdout}}
\index{eina\_log\_print\_cb\_stdout@{eina\_log\_print\_cb\_stdout}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_print\_cb\_stdout()}{eina\_log\_print\_cb\_stdout()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+stdout (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$}]{d,  }\item[{\mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}}}]{level,  }\item[{const char $\ast$}]{file,  }\item[{const char $\ast$}]{fnc,  }\item[{int}]{line,  }\item[{const char $\ast$}]{fmt,  }\item[{void $\ast$}]{data,  }\item[{va\+\_\+list}]{args }\end{DoxyParamCaption})}



Alternative logging method, this will output to standard output stream. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em d} & The domain. \\
\hline
\mbox{\texttt{ in}}  & {\em level} & The level. \\
\hline
\mbox{\texttt{ in}}  & {\em file} & The file which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em fnc} & The function which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em line} & The line which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & The output format to use. \\
\hline
\mbox{\texttt{ in}}  & {\em data} & Not used. \\
\hline
\mbox{\texttt{ in}}  & {\em args} & The arguments needed by the format.\\
\hline
\end{DoxyParams}
This method will colorize output based on domain provided color and message logging level. To disable color, set environment variable EINA\+\_\+\+LOG\+\_\+\+COLOR\+\_\+\+DISABLE=1. Similarly, to disable file and line information, set EINA\+\_\+\+LOG\+\_\+\+FILE\+\_\+\+DISABLE=1 or EINA\+\_\+\+LOG\+\_\+\+FUNCTION\+\_\+\+DISABLE=1 to avoid function name in output. It is not acceptable to have both EINA\+\_\+\+LOG\+\_\+\+FILE\+\_\+\+DISABLE and EINA\+\_\+\+LOG\+\_\+\+FUNCTION\+\_\+\+DISABLE at the same time, in this case just EINA\+\_\+\+LOG\+\_\+\+FUNCTION\+\_\+\+DISABLE will be considered and file information will be printed anyways.

\begin{DoxyNote}{Note}
MT\+: If threads are enabled, this function is called within locks. 

MT\+: Threads different from main thread will have thread id appended to domain name. 
\end{DoxyNote}
\mbox{\Hypertarget{group__Eina__Log__Group_ga38af538700301b2aa201e92837ca9c46}\label{group__Eina__Log__Group_ga38af538700301b2aa201e92837ca9c46}} 
\index{Log@{Log}!eina\_log\_print\_cb\_stderr@{eina\_log\_print\_cb\_stderr}}
\index{eina\_log\_print\_cb\_stderr@{eina\_log\_print\_cb\_stderr}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_print\_cb\_stderr()}{eina\_log\_print\_cb\_stderr()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+stderr (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$}]{d,  }\item[{\mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}}}]{level,  }\item[{const char $\ast$}]{file,  }\item[{const char $\ast$}]{fnc,  }\item[{int}]{line,  }\item[{const char $\ast$}]{fmt,  }\item[{void $\ast$}]{data,  }\item[{va\+\_\+list}]{args }\end{DoxyParamCaption})}



Default logging method, this will output to standard error stream. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em d} & The domain. \\
\hline
\mbox{\texttt{ in}}  & {\em level} & The level. \\
\hline
\mbox{\texttt{ in}}  & {\em file} & The file which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em fnc} & The function which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em line} & The line which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & The output format to use. \\
\hline
\mbox{\texttt{ in}}  & {\em data} & Not used. \\
\hline
\mbox{\texttt{ in}}  & {\em args} & The arguments needed by the format.\\
\hline
\end{DoxyParams}
This method will colorize output based on domain provided color and message logging level.

To disable color, set environment variable EINA\+\_\+\+LOG\+\_\+\+COLOR\+\_\+\+DISABLE=1. To enable color, even if directing to a file or when using a non-\/supported color terminal, use EINA\+\_\+\+LOG\+\_\+\+COLOR\+\_\+\+DISABLE=0. If EINA\+\_\+\+LOG\+\_\+\+COLOR\+\_\+\+DISABLE is unset (or -\/1), then Eina will disable color if terminal (\$\+TERM) is unsupported or if redirecting to a file. Similarly, to disable file and line information, set EINA\+\_\+\+LOG\+\_\+\+FILE\+\_\+\+DISABLE=1 or EINA\+\_\+\+LOG\+\_\+\+FUNCTION\+\_\+\+DISABLE=1 to avoid function name in output. It is not acceptable to have both EINA\+\_\+\+LOG\+\_\+\+FILE\+\_\+\+DISABLE and EINA\+\_\+\+LOG\+\_\+\+FUNCTION\+\_\+\+DISABLE at the same time, in this case just EINA\+\_\+\+LOG\+\_\+\+FUNCTION\+\_\+\+DISABLE will be considered and file information will be printed anyways.

\begin{DoxyNote}{Note}
MT\+: If threads are enabled, this function is called within locks. 

MT\+: Threads different from main thread will have thread id appended to domain name. 
\end{DoxyNote}


Referenced by eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+journald(), and eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+set().

\mbox{\Hypertarget{group__Eina__Log__Group_ga8bae9ff20acfb94f8dcb29b66440123d}\label{group__Eina__Log__Group_ga8bae9ff20acfb94f8dcb29b66440123d}} 
\index{Log@{Log}!eina\_log\_print\_cb\_file@{eina\_log\_print\_cb\_file}}
\index{eina\_log\_print\_cb\_file@{eina\_log\_print\_cb\_file}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_print\_cb\_file()}{eina\_log\_print\_cb\_file()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+file (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$}]{d,  }\item[{\mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}}}]{level,  }\item[{const char $\ast$}]{file,  }\item[{const char $\ast$}]{fnc,  }\item[{int}]{line,  }\item[{const char $\ast$}]{fmt,  }\item[{void $\ast$}]{data,  }\item[{va\+\_\+list}]{args }\end{DoxyParamCaption})}



Alternative logging method, this will output to given file stream. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em d} & The domain. \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Not used. \\
\hline
\mbox{\texttt{ in}}  & {\em file} & The file which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em fnc} & The function which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em line} & The line which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & The output format to use. \\
\hline
\mbox{\texttt{ in}}  & {\em data} & The file which will store the output (as a FILE $\ast$). \\
\hline
\mbox{\texttt{ in}}  & {\em args} & The arguments needed by the format.\\
\hline
\end{DoxyParams}
This method will never output color.

\begin{DoxyNote}{Note}
MT\+: If threads are enabled, this function is called within locks. 

MT\+: Threads different from main thread will have thread id appended to domain name. 
\end{DoxyNote}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN.

\mbox{\Hypertarget{group__Eina__Log__Group_ga6b686425922b1117946cf869e18bc672}\label{group__Eina__Log__Group_ga6b686425922b1117946cf869e18bc672}} 
\index{Log@{Log}!eina\_log\_print\_cb\_journald@{eina\_log\_print\_cb\_journald}}
\index{eina\_log\_print\_cb\_journald@{eina\_log\_print\_cb\_journald}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_print\_cb\_journald()}{eina\_log\_print\_cb\_journald()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+journald (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__Eina__Log__Group_ga3e8bc7f3b9aa9140d1e5b91baf08ebe8}{Eina\+\_\+\+Log\+\_\+\+Domain}} $\ast$}]{d,  }\item[{\mbox{\hyperlink{group__Eina__Log__Group_ga5c0cd3a8463b76bb855805b70f58c7dd}{Eina\+\_\+\+Log\+\_\+\+Level}}}]{level,  }\item[{const char $\ast$}]{file,  }\item[{const char $\ast$}]{fnc,  }\item[{int}]{line,  }\item[{const char $\ast$}]{fmt,  }\item[{void $\ast$}]{data,  }\item[{va\+\_\+list}]{args }\end{DoxyParamCaption})}



Alternative logging method, this will output to systemd journal. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em d} & The domain. \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Not used. \\
\hline
\mbox{\texttt{ in}}  & {\em file} & The file which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em fnc} & The function which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em line} & The line which is logged. \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & The output format to use. \\
\hline
\mbox{\texttt{ in}}  & {\em data} & The file which will store the output (as a FILE $\ast$). \\
\hline
\mbox{\texttt{ in}}  & {\em args} & The arguments needed by the format.\\
\hline
\end{DoxyParams}
This method will never output color.

\begin{DoxyNote}{Note}
If systemd journal is not there it will display error on stderr. 

If the process has been started by systemd this will be the default logging method.
\end{DoxyNote}
\begin{DoxySince}{Since}
1.\+8 
\end{DoxySince}


References EINA\+\_\+\+LIKELY, eina\+\_\+log\+\_\+print\+\_\+cb\+\_\+stderr(), eina\+\_\+strbuf\+\_\+append\+\_\+printf(), eina\+\_\+strbuf\+\_\+free(), eina\+\_\+strbuf\+\_\+new(), and eina\+\_\+strbuf\+\_\+string\+\_\+get().

\mbox{\Hypertarget{group__Eina__Log__Group_ga8dcfef1baf5777089448b212b05899e2}\label{group__Eina__Log__Group_ga8dcfef1baf5777089448b212b05899e2}} 
\index{Log@{Log}!eina\_log\_console\_color\_set@{eina\_log\_console\_color\_set}}
\index{eina\_log\_console\_color\_set@{eina\_log\_console\_color\_set}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_console\_color\_set()}{eina\_log\_console\_color\_set()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+console\+\_\+color\+\_\+set (\begin{DoxyParamCaption}\item[{FILE $\ast$}]{fp,  }\item[{const char $\ast$}]{color }\end{DoxyParamCaption})}



Configures console color of given file. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em fp} & File to configure console color (usually stderr or stdout). \\
\hline
\mbox{\texttt{ in}}  & {\em color} & A VT color code such as EINA\+\_\+\+COLOR\+\_\+\+RED or EINA\+\_\+\+COLOR\+\_\+\+RESET.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
If color is disabled, nothing is done. See \mbox{\hyperlink{group__Eina__Log__Group_ga77a96439127b855203bb7f6ba711ada5}{eina\+\_\+log\+\_\+color\+\_\+disable\+\_\+get()}} 

On windows, both {\itshape fp} and {\itshape color} is converted automatically.
\end{DoxyNote}
\begin{DoxySince}{Since}
1.\+7 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN.

\mbox{\Hypertarget{group__Eina__Log__Group_gaf1521fab496ea03a641f44868c7da5ce}\label{group__Eina__Log__Group_gaf1521fab496ea03a641f44868c7da5ce}} 
\index{Log@{Log}!eina\_log\_timing@{eina\_log\_timing}}
\index{eina\_log\_timing@{eina\_log\_timing}!Log@{Log}}
\doxysubsubsection{\texorpdfstring{eina\_log\_timing()}{eina\_log\_timing()}}
{\footnotesize\ttfamily void eina\+\_\+log\+\_\+timing (\begin{DoxyParamCaption}\item[{int}]{domain,  }\item[{\mbox{\hyperlink{group__Eina__Log__Group_gadfcd7fc51aaa188de388a7f4c6164d83}{Eina\+\_\+\+Log\+\_\+\+State}}}]{state,  }\item[{const char $\ast$}]{phase }\end{DoxyParamCaption})}



Starts or stops the timing of a phase. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em domain} & The domain. \\
\hline
\mbox{\texttt{ in}}  & {\em state} & State indicating if we are starting or stopping a phase. \\
\hline
\mbox{\texttt{ in}}  & {\em phase} & The name of the phase to be used in the log.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
One domain can be in only one phase at a time. 

If you change the name of the phase, it is assumed that the previous phase has stopped. 

The phase name should be available for all the life of the timing. 
\end{DoxyNote}
\begin{DoxySince}{Since}
1.\+8 
\end{DoxySince}


References EINA\+\_\+\+LOG\+\_\+\+DOM\+\_\+\+INFO, EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+INIT, EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+SHUTDOWN, EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+START, EINA\+\_\+\+LOG\+\_\+\+STATE\+\_\+\+STOP, and EINA\+\_\+\+UNLIKELY.



Referenced by ecore\+\_\+audio\+\_\+init(), ecore\+\_\+audio\+\_\+shutdown(), ecore\+\_\+con\+\_\+init(), ecore\+\_\+con\+\_\+shutdown(), ecore\+\_\+evas\+\_\+init(), ecore\+\_\+evas\+\_\+shutdown(), ector\+\_\+init(), ector\+\_\+shutdown(), eet\+\_\+init(), eet\+\_\+shutdown(), eina\+\_\+shutdown(), eio\+\_\+shutdown(), elm\+\_\+quicklaunch\+\_\+shutdown(), elua\+\_\+init(), elua\+\_\+shutdown(), embryo\+\_\+init(), embryo\+\_\+shutdown(), emile\+\_\+init(), emile\+\_\+shutdown(), evas\+\_\+init(), and evas\+\_\+shutdown().

