3cd79bc5680cdc375a42b41f8d1f53956b923793
[framework/system/dlog.git] / include / logprint.h
1 /*
2  * DLOG
3  * Copyright (c) 2005-2008, The Android Open Source Project
4  * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the License);
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 #ifndef _LOGPRINT_H
20 #define _LOGPRINT_H
21
22 #include <time.h>
23 #include <pthread.h>
24
25 #include <logger.h>
26 #include <dlog.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 typedef enum {
33     FORMAT_OFF = 0,
34     FORMAT_BRIEF,
35     FORMAT_PROCESS,
36     FORMAT_TAG,
37     FORMAT_THREAD,
38     FORMAT_RAW,
39     FORMAT_TIME,
40     FORMAT_THREADTIME,
41     FORMAT_LONG,
42 } log_print_format;
43
44 typedef struct log_format_t log_format;
45
46 typedef struct log_entry_t {
47     time_t tv_sec;
48     long tv_nsec;
49     log_priority priority;
50     pid_t pid;
51     pthread_t tid;
52     const char * tag;
53     size_t messageLen;
54     const char * message;
55 } log_entry;
56
57 log_format *log_format_new();
58
59 void log_format_free(log_format *p_format);
60
61 void log_set_print_format(log_format *p_format, 
62         log_print_format format);
63
64 /**
65  * Returns FORMAT_OFF on invalid string
66  */
67 log_print_format log_format_from_string(const char *s);
68
69 /** 
70  * filterExpression: a single filter expression
71  * eg "AT:d"
72  *
73  * returns 0 on success and -1 on invalid expression
74  *
75  * Assumes single threaded execution
76  *
77  */
78
79 int log_add_filter_rule(log_format *p_format, 
80         const char *filterExpression);
81
82
83 /** 
84  * filterString: a whitespace-separated set of filter expressions 
85  * eg "AT:d *:i"
86  *
87  * returns 0 on success and -1 on invalid expression
88  *
89  * Assumes single threaded execution
90  *
91  */
92
93 int log_add_filter_string(log_format *p_format,
94         const char *filterString);
95
96
97 /** 
98  * returns 1 if this log line should be printed based on its priority
99  * and tag, and 0 if it should not
100  */
101 int log_should_print_line (
102         log_format *p_format, const char *tag, log_priority pri);
103
104
105 /**
106  * Splits a wire-format buffer into an log_entry
107  * entry allocated by caller. Pointers will point directly into buf
108  *
109  * Returns 0 on success and -1 on invalid wire format (entry will be
110  * in unspecified state)
111  */
112 int log_process_log_buffer(struct logger_entry *buf,
113                                  log_entry *entry);
114
115 /**
116  * Formats a log message into a buffer
117  *
118  * Uses defaultBuffer if it can, otherwise malloc()'s a new buffer
119  * If return value != defaultBuffer, caller must call free()
120  * Returns NULL on malloc error
121  */
122
123 char *log_format_log_line (    
124     log_format *p_format,
125     char *defaultBuffer,
126     size_t defaultBufferSize,
127     const log_entry *p_line,
128     size_t *p_outLength);
129
130
131 /**
132  * Either print or do not print log line, based on filter
133  *
134  * Assumes single threaded execution
135  *
136  */
137 int log_print_log_line(
138     log_format *p_format,
139     int fd,
140     const log_entry *entry);
141
142 /**
143  * logprint test furction
144  *
145  */
146 void logprint_run_tests(void);
147
148 #ifdef __cplusplus
149 }
150 #endif
151
152 #endif /*_LOGPRINT_H*/