1  /*
2   * Copyright (C) 2015-2019 Alibaba Group Holding Limited
3   */
4  
5  #ifndef U_LOG_CONFIG_H_
6  #define U_LOG_CONFIG_H_
7  
8  #include <stdbool.h>
9  #include <stdint.h>
10  #include <stdio.h>
11  
12  #define ULOG_TAG_SELF "ULOG"
13  
14  #define ULOG_POLICY_RQST   '?'
15  #define ULOG_LEVEL_RSP     "{\"cloud log level\":%d}"
16  
17  /**
18   * syslog management command mark
19   * NOT RECOMMEND MODIFY THIS VALUE, READ ONLY!!
20   */
21  #define ULOG_CMD_PREFIX "#@"
22  
23  #define ULOG_HEADER_TYPE_LEN 5
24  
25  /**
26   * syslog protocol, facility local use 0
27   * NOT RECOMMEND MODIFY THIS VALUE, READ ONLY!!
28   */
29  #define SYSLOG_FACILITY        128
30  
31  #define TAG_FILE_NAME_MAX_LEN  16
32  
33  #define UNDEFINE_FILE_NAME "unknown"
34  
35  #define MOD_MAX_LEN 10
36  
37  #define FACILITY_NORMAL_LOG 248
38  
39  #define FACILITY_NORMAL_LOG_NO_POP_CLOUD 240
40  
41  #define HTTP_REQ_RETRY 3
42  
43  #define HTTP_RSP_RETRY  3
44  
45  #define URL_PREFIX_HTTP "http://"
46  #define URL_PREFIX_HTTPS "https://"
47  
48  #define RSP_BUF_SIZE 512
49  
50  #define HTTP_UP_HDR_SIZE 64
51  
52  /* 5 is result of cost <%03d> */
53  #define LOG_PREFIX_LEN 5
54  
55  typedef enum {
56      http_upload_file_operate_fail = -4,
57      http_upload_text_empty        = -3,
58      http_upload_memory_fail       = -2,
59      http_upload_common_fail       = -1,
60      http_upload_start             = 0,
61      http_upload_finish            = 1,
62  } http_upload_fail_t;
63  
64  /**
65   * sometimes found the pop log into file always fail, may result from file attribute,
66   * or other unknown reason. If the fail operte on the same file keeps 3 times, then
67   * destroy the log file and create new one.
68   */
69  #define ULOG_FILE_FAIL_COUNT        3
70  
71  /**
72   * Specify the port of syslog watcher
73   * NOT RECOMMEND MODIFY THIS VALUE, READ ONLY!!
74   */
75  #define SYSLOG_WATCHER_DEFAULT_PORT 514
76  
77  /* Specify if details mode used under sync log */
78  #ifndef ULOG_CONFIG_SYNC_LOG_DETAILS
79  #define SYNC_LOG_DETAILS 0
80  #else
81  #define SYNC_LOG_DETAILS ULOG_CONFIG_SYNC_LOG_DETAILS
82  #endif
83  
84  #ifndef ULOG_CONFIG_SYNC_DETAIL_COLOR
85  #define SYNC_DETAIL_COLOR 0
86  #else
87  #define SYNC_DETAIL_COLOR ULOG_CONFIG_SYNC_DETAIL_COLOR
88  #endif
89  
90  #ifndef ULOG_CONFIG_SYNC_ABS_PATH
91  #define SYNC_ABS_PATH 0
92  #else
93  #define SYNC_ABS_PATH ULOG_CONFIG_SYNC_ABS_PATH
94  #endif
95  
96  #ifndef ULOG_CONFIG_DEFAULT_DIR_ASYNC
97  #define LOG_DIR_ASYNC 0
98  #else
99  #define LOG_DIR_ASYNC ULOG_CONFIG_DEFAULT_DIR_ASYNC
100  #endif
101  
102  #ifndef ULOG_CONFIG_SYSLOG_TIME_FORMAT
103  #define SYSLOG_TIME_FORMAT 0
104  #else
105  #define SYSLOG_TIME_FORMAT ULOG_CONFIG_SYSLOG_TIME_FORMAT
106  #endif
107  
108  #ifndef ULOG_CONFIG_EXTREAM_LOG_TAG
109  #define EXTREAM_LOG_TAG 1
110  #else
111  #define EXTREAM_LOG_TAG ULOG_CONFIG_EXTREAM_LOG_TAG
112  #endif
113  
114  /**
115   * the max length of every trace log to be recorded, include syslog format(if EXTREAM_LOG_TEXT
116   * is not set), so 100 is reseanable value when syslog format support, 50 is fit for extream log mode
117   * Log Content will be trimmed if it's too long.
118   * SYSLOG_SIZE*SYSLOG_SIZE is the log mechanism cost heap size
119   */
120  #ifndef ULOG_CONFIG_LOG_SIZE
121  #define ULOG_SIZE         256
122  #else
123  #define ULOG_SIZE         ULOG_CONFIG_LOG_SIZE
124  #endif
125  
126  /**
127   * Default size of buffer queue that used to record log under aync mode.
128   * May the trace log miss if this value was set too small.
129   * More RAM will be costed if it set too large
130   * So consider balance of this value and system resouce
131   */
132  #ifndef ULOG_CONFIG_ASYNC_BUF_SIZE
133  #define DEFAULT_ASYNC_BUF_SIZE    6144
134  #else
135  #define DEFAULT_ASYNC_BUF_SIZE    ULOG_CONFIG_ASYNC_BUF_SIZE
136  #endif
137  
138  #ifndef ULOG_CONFIG_RESERVED_FS
139  #define ULOG_RESERVED_FS   0
140  #else
141  #define ULOG_RESERVED_FS ULOG_CONFIG_RESERVED_FS
142  #endif
143  
144  #ifndef ULOG_CONFIG_RESERVED_FS_SIZE
145  #define ULOG_RESERVED_FS_SIZE   64
146  #else
147  #define ULOG_RESERVED_FS_SIZE ULOG_CONFIG_RESERVED_FS_SIZE
148  #endif
149  
150  /**
151   * Level Stop Filter of default direction(uart for rtos), any log level qual or lower than this (value higher than it)
152   * will be abondoned LOG_EMERG will make none log pop out.
153   */
154  #ifndef ULOG_CONFIG_STOP_FILTER_DEFAULT
155  #define STOP_FILTER_DEFAULT   LOG_WARNING
156  #else
157  #define STOP_FILTER_DEFAULT   ULOG_CONFIG_STOP_FILTER_DEFAULT
158  #endif
159  
160  /**
161   * Level Stop Filter of udp, any log level qual or lower than this (value higher than it)
162   * will be abondoned LOG_EMERG will make none log pop out.
163   */
164  #ifndef ULOG_CONFIG_STOP_FILTER_UDP
165  #define STOP_FILTER_UDP       LOG_WARNING
166  #else
167  #define STOP_FILTER_UDP       ULOG_CONFIG_STOP_FILTER_UDP
168  #endif
169  
170  /**
171   * switch on pop out log into file system
172   */
173  #ifndef ULOG_CONFIG_POP_FS
174  #define ULOG_POP_FS_ENABLE       0
175  #else
176  #define ULOG_POP_FS_ENABLE ULOG_CONFIG_POP_FS
177  #endif
178  
179  #ifndef ULOG_CONFIG_UPLOAD
180  #define ULOG_UPLOAD_LOG_FILE     0
181  #else
182  #define ULOG_UPLOAD_LOG_FILE ULOG_CONFIG_UPLOAD
183  #endif
184  
185  /**
186   * switch on pop out log via UDP
187   */
188  #ifndef ULOG_CONFIG_POP_UDP
189  #define ULOG_POP_UDP_ENABLE       0
190  #else
191  #define ULOG_POP_UDP_ENABLE ULOG_CONFIG_POP_UDP
192  #endif
193  
194  /**
195   * Level Stop Filter of File system, any log level qual or lower than this (value higher than it)
196   * will be abondoned LOG_EMERG will make none log pop out.
197   */
198  #ifndef ULOG_CONFIG_STOP_FILTER_FS
199  #define STOP_FILTER_FS       LOG_WARNING
200  #else
201  #define STOP_FILTER_FS       ULOG_CONFIG_STOP_FILTER_FS
202  #endif
203  
204  /**
205   * switch on pop out log into cloud real-time
206   */
207  #ifndef AOS_COMP_UAGENT
208  #define ULOG_POP_CLOUD_ENABLE       0
209  #else
210  #define ULOG_POP_CLOUD_ENABLE       1
211  #endif
212  
213  /**
214   * Level Stop Filter of File system, any log level qual or lower than this (value higher than it)
215   * will be abondoned LOG_EMERG will make none log pop out.
216   */
217  #ifndef ULOG_CONFIG_STOP_FILTER_CLOUD
218  #define STOP_FILTER_CLOUD       LOG_EMERG
219  #else
220  #define STOP_FILTER_CLOUD       ULOG_CONFIG_STOP_FILTER_CLOUD
221  #endif
222  
223  
224  /**
225   * STACK DEPTH of Log Task, will cost 3072 Byte room
226   */
227  #ifndef ULOG_CONFIG_LOG_ROUTINE_TASK_STACK_DEPTH
228  #define LOG_ROUTINE_TASK_STACK_DEPTH 3072
229  #else
230  #define LOG_ROUTINE_TASK_STACK_DEPTH ULOG_CONFIG_LOG_ROUTINE_TASK_STACK_DEPTH
231  #endif
232  
233  /**
234   * Max log files support in fs, if the recording file more than this value, rolling back mechanism trigged.
235   */
236  #ifndef ULOG_CONFIG_LOCAL_FILE_CNT
237  #define LOCAL_FILE_CNT 5
238  #else
239  #define LOCAL_FILE_CNT ULOG_CONFIG_LOCAL_FILE_CNT
240  #endif
241  
242  /**
243   * Max log file size locate in local file system, if the recording file larger than this value,
244   * new files will be used to be recored.
245   */
246  #ifndef ULOG_CONFIG_LOCAL_FILE_SIZE
247  #define LOCAL_FILE_SIZE 4096
248  #else
249  #define LOCAL_FILE_SIZE ULOG_CONFIG_LOCAL_FILE_SIZE
250  #endif
251  
252  #if ULOG_POP_FS_ENABLE
253  #ifdef CSP_LINUXHOST
254  #error(modify below PATH as log file located, then disable this statement)
255  #define ULOG_DEAULT_FS_PATH              "/workspace/"
256  #elif defined (AOS_COMP_SPIFFS)
257  #define ULOG_DEAULT_FS_PATH              "/spiffs/"
258  #elif defined (AOS_COMP_FATFS)
259  #ifdef CONFIG_AOS_FATFS_SUPPORT_MMC
260  #define ULOG_DEAULT_FS_PATH              "/sdcard/"
261  #else
262  #define ULOG_DEAULT_FS_PATH              "/fatfs/"
263  #endif /* CONFIG_AOS_FATFS_SUPPORT_MMC */
264  #else
265  #define ULOG_DEAULT_FS_PATH              "/data/ulog/"
266  #endif
267  #endif /* ULOG_POP_FS_ENABLE  */
268  
269  #if ULOG_POP_UDP_ENABLE
270  #ifdef CONFIG_NO_TCPIP
271  #error ("pop log via udp not support in no tcpip board")
272  #endif
273  #endif
274  
275  #if ULOG_POP_CLOUD_ENABLE
276  #include "uagent_type.h"
277  #define ULOG_SHOW         (UAGENT_FUNC_USER_BASE)
278  #define ULOG_LEVEL_CHANGE (UAGENT_FUNC_USER_BASE + 1)
279  #define ULOG_LOG_LIST     (UAGENT_FUNC_USER_BASE + 2)
280  #define ULOG_POLICY       (UAGENT_FUNC_USER_BASE + 3)
281  #endif
282  
283  typedef enum {
284      ulog_session_std = 0,  /* default out direction, usually uart for rtos, termial for Linux */
285  
286  #if ULOG_POP_CLOUD_ENABLE
287      ulog_session_cloud,      /* to cloud, via uagent */
288  #endif
289  
290  #if ULOG_POP_FS_ENABLE
291      ulog_session_file,       /* log on local file system */
292  #endif
293  
294  #if ULOG_POP_UDP_ENABLE
295      ulog_session_udp,        /* syslog via udp, port 514 is default for syslog watcher */
296  #endif
297      ulog_session_size
298  } ulog_session_type_t;
299  
300  #endif /*U_LOG_CONFIG_H_*/
301  
302