Skip to content

Commit b648edf

Browse files
committed
Full support for ff log file.
1. You can enable ff log file in config.ini. 2. These log will write to the specified log file: 2.1 DPDK log after rte_eal_init. 2.2 F-Stack lib log after ff_load_config. 2.3 F-Stack FreeBSD log, include printf()/vlog(), and log() also modify from syslog(/var/log/message) to log file. 3. APP can use ff_log API set its own log file to instead the default/config.ini's log file.
1 parent c1ced4d commit b648edf

File tree

14 files changed

+276
-120
lines changed

14 files changed

+276
-120
lines changed

config.ini

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,24 @@ nb_vdev=0
7676
nb_bond=0
7777

7878
# log level for dpdk, optional
79-
# log_level=0
79+
#log_level=8
80+
81+
# Log file level and prefix of F-Stack lib and FreeBSD.
82+
# fstack_log_level: 0-8, default 0.
83+
# 0 : means disable log file, and output to stdout/stderr/syslog(/var/log/message), etc.
84+
# 1-8 : log level, same to DPDK's log level, equal to system's log levle + 1.
85+
# 1 = EMERG
86+
# 2 = ALERT
87+
# 3 = CRIT
88+
# 4 = ERR
89+
# 5 = WARNING
90+
# 6 = NOTICE
91+
# 7 = INFO
92+
# 8 = DEBUG
93+
# fstack_log_file_prefix : log file prefix, and <proc_id> will splice with prefix, such as "./f-stack-0".
94+
#fstack_log_level=0
95+
#fstack_log_file_prefix=./f-stack-
96+
8097

8198
# Each core write into own pcap file, which is open one time, close one time if enough.
8299
# Support dump the first snaplen bytes of each packet.

example/main.c

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "ff_config.h"
1414
#include "ff_api.h"
15+
#include "ff_log.h"
1516

1617
#define MAX_EVENTS 512
1718

@@ -65,7 +66,7 @@ int loop(void *arg)
6566
int i;
6667

6768
if (nevents < 0) {
68-
printf("ff_kevent failed:%d, %s\n", errno,
69+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_kevent failed:%d, %s\n", errno,
6970
strerror(errno));
7071
return -1;
7172
}
@@ -87,7 +88,7 @@ int loop(void *arg)
8788
do {
8889
int nclientfd = ff_accept(clientfd, NULL, NULL);
8990
if (nclientfd < 0) {
90-
printf("ff_accept failed:%d, %s\n", errno,
91+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_accept failed:%d, %s\n", errno,
9192
strerror(errno));
9293
break;
9394
}
@@ -96,7 +97,7 @@ int loop(void *arg)
9697
EV_SET(&kevSet, nclientfd, EVFILT_READ, EV_ADD, 0, 0, NULL);
9798

9899
if(ff_kevent(kq, &kevSet, 1, NULL, 0, NULL) < 0) {
99-
printf("ff_kevent error:%d, %s\n", errno,
100+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_kevent error:%d, %s\n", errno,
100101
strerror(errno));
101102
return -1;
102103
}
@@ -108,12 +109,12 @@ int loop(void *arg)
108109
ssize_t readlen = ff_read(clientfd, buf, sizeof(buf));
109110
ssize_t writelen = ff_write(clientfd, html, sizeof(html) - 1);
110111
if (writelen < 0){
111-
printf("ff_write failed:%d, %s\n", errno,
112+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_write failed:%d, %s\n", errno,
112113
strerror(errno));
113114
ff_close(clientfd);
114115
}
115116
} else {
116-
printf("unknown event: %8.8X\n", event.flags);
117+
ff_log(FF_LOG_WARNING, FF_LOGTYPE_FSTACK_APP, "unknown event: %8.8X\n", event.flags);
117118
}
118119
}
119120

@@ -122,17 +123,33 @@ int loop(void *arg)
122123

123124
int main(int argc, char * argv[])
124125
{
126+
FILE *log_file;
127+
125128
ff_init(argc, argv);
126129

130+
/* Set APP's log file to instead F-Stack log file */
131+
log_file = fopen("./helloworld.log", "a+");
132+
if (log_file == NULL) {
133+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "fopen log file failed, errno:%d, %s\n", errno, strerror(errno));
134+
exit(1);
135+
}
136+
137+
ff_log_reset_stream((void *)log_file);
138+
/* Close F-Stack log file */
139+
ff_log_close();
140+
141+
ff_log_set_global_level(FF_LOG_INFO);
142+
ff_log_set_level(FF_LOGTYPE_FSTACK_APP, FF_LOG_INFO);
143+
127144
kq = ff_kqueue();
128145
if (kq < 0) {
129-
printf("ff_kqueue failed, errno:%d, %s\n", errno, strerror(errno));
146+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_kqueue failed, errno:%d, %s\n", errno, strerror(errno));
130147
exit(1);
131148
}
132149

133150
sockfd = ff_socket(AF_INET, SOCK_STREAM, 0);
134151
if (sockfd < 0) {
135-
printf("ff_socket failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
152+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_socket failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
136153
exit(1);
137154
}
138155

@@ -148,13 +165,13 @@ int main(int argc, char * argv[])
148165

149166
int ret = ff_bind(sockfd, (struct linux_sockaddr *)&my_addr, sizeof(my_addr));
150167
if (ret < 0) {
151-
printf("ff_bind failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
168+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_bind failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
152169
exit(1);
153170
}
154171

155172
ret = ff_listen(sockfd, MAX_EVENTS);
156173
if (ret < 0) {
157-
printf("ff_listen failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
174+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_listen failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
158175
exit(1);
159176
}
160177

@@ -165,7 +182,7 @@ int main(int argc, char * argv[])
165182
#ifdef INET6
166183
sockfd6 = ff_socket(AF_INET6, SOCK_STREAM, 0);
167184
if (sockfd6 < 0) {
168-
printf("ff_socket failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
185+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_socket failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
169186
exit(1);
170187
}
171188

@@ -177,24 +194,29 @@ int main(int argc, char * argv[])
177194

178195
ret = ff_bind(sockfd6, (struct linux_sockaddr *)&my_addr6, sizeof(my_addr6));
179196
if (ret < 0) {
180-
printf("ff_bind failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
197+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_bind failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
181198
exit(1);
182199
}
183200

184201
ret = ff_listen(sockfd6, MAX_EVENTS);
185202
if (ret < 0) {
186-
printf("ff_listen failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
203+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_listen failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
187204
exit(1);
188205
}
189206

190207
EV_SET(&kevSet, sockfd6, EVFILT_READ, EV_ADD, 0, MAX_EVENTS, NULL);
191208
ret = ff_kevent(kq, &kevSet, 1, NULL, 0, NULL);
192209
if (ret < 0) {
193-
printf("ff_kevent failed:%d, %s\n", errno, strerror(errno));
210+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_kevent failed:%d, %s\n", errno, strerror(errno));
194211
exit(1);
195212
}
196213
#endif
197214

215+
ff_log(FF_LOG_INFO, FF_LOGTYPE_FSTACK_APP, "helloworld init success.\n");
216+
198217
ff_run(loop, NULL);
218+
219+
fclose(log_file);
220+
199221
return 0;
200222
}

example/main_epoll.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "ff_config.h"
1414
#include "ff_api.h"
1515
#include "ff_epoll.h"
16+
#include "ff_log.h"
1617

1718

1819
#define MAX_EVENTS 512
@@ -23,7 +24,7 @@ struct epoll_event events[MAX_EVENTS];
2324
int epfd;
2425
int sockfd;
2526

26-
char html[] =
27+
char html[] =
2728
"HTTP/1.1 200 OK\r\n"
2829
"Server: F-Stack\r\n"
2930
"Date: Sat, 25 Feb 2017 09:26:33 GMT\r\n"
@@ -75,12 +76,12 @@ int loop(void *arg)
7576
ev.data.fd = nclientfd;
7677
ev.events = EPOLLIN;
7778
if (ff_epoll_ctl(epfd, EPOLL_CTL_ADD, nclientfd, &ev) != 0) {
78-
printf("ff_epoll_ctl failed:%d, %s\n", errno,
79+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_epoll_ctl failed:%d, %s\n", errno,
7980
strerror(errno));
8081
break;
8182
}
8283
}
83-
} else {
84+
} else {
8485
if (events[i].events & EPOLLERR ) {
8586
/* Simply close socket */
8687
ff_epoll_ctl(epfd, EPOLL_CTL_DEL, events[i].data.fd, NULL);
@@ -95,7 +96,7 @@ int loop(void *arg)
9596
ff_close( events[i].data.fd);
9697
}
9798
} else {
98-
printf("unknown event: %8.8X\n", events[i].events);
99+
ff_log(FF_LOG_WARNING, FF_LOGTYPE_FSTACK_APP, "unknown event: %8.8X\n", events[i].events);
99100
}
100101
}
101102
}
@@ -106,9 +107,9 @@ int main(int argc, char * argv[])
106107
ff_init(argc, argv);
107108

108109
sockfd = ff_socket(AF_INET, SOCK_STREAM, 0);
109-
printf("sockfd:%d\n", sockfd);
110+
ff_log(FF_LOG_DEBUG, FF_LOGTYPE_FSTACK_APP, "sockfd:%d\n", sockfd);
110111
if (sockfd < 0) {
111-
printf("ff_socket failed\n");
112+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_socket failed\n");
112113
exit(1);
113114
}
114115

@@ -123,13 +124,13 @@ int main(int argc, char * argv[])
123124

124125
int ret = ff_bind(sockfd, (struct linux_sockaddr *)&my_addr, sizeof(my_addr));
125126
if (ret < 0) {
126-
printf("ff_bind failed\n");
127+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_bind failed\n");
127128
exit(1);
128129
}
129130

130131
ret = ff_listen(sockfd, MAX_EVENTS);
131132
if (ret < 0) {
132-
printf("ff_listen failed\n");
133+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_listen failed\n");
133134
exit(1);
134135
}
135136

example/main_zc.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include "ff_config.h"
1313
#include "ff_api.h"
14+
#include "ff_log.h"
1415

1516
#define MAX_EVENTS 512
1617

@@ -160,7 +161,7 @@ int loop(void *arg)
160161
do {
161162
int nclientfd = ff_accept(clientfd, NULL, NULL);
162163
if (nclientfd < 0) {
163-
printf("ff_accept failed:%d, %s\n", errno,
164+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_accept failed:%d, %s\n", errno,
164165
strerror(errno));
165166
break;
166167
}
@@ -169,7 +170,7 @@ int loop(void *arg)
169170
EV_SET(&kevSet, nclientfd, EVFILT_READ, EV_ADD, 0, 0, NULL);
170171

171172
if(ff_kevent(kq, &kevSet, 1, NULL, 0, NULL) < 0) {
172-
printf("ff_kevent error:%d, %s\n", errno,
173+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_kevent error:%d, %s\n", errno,
173174
strerror(errno));
174175
return -1;
175176
}
@@ -182,7 +183,7 @@ int loop(void *arg)
182183
#ifdef FSTACK_ZC_SEND
183184
int ret = ff_zc_mbuf_get(&zc_buf, buf_len);
184185
if (ret < 0) {
185-
printf("ff_zc_mbuf_get failed, len:%d, errno:%d, %s\n", buf_len, errno, strerror(errno));
186+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_zc_mbuf_get failed, len:%d, errno:%d, %s\n", buf_len, errno, strerror(errno));
186187
exit(1);
187188
}
188189

@@ -192,7 +193,7 @@ int loop(void *arg)
192193
to_write_len = (buf_len - off) > len_part ? len_part : (buf_len - off);
193194
ret = ff_zc_mbuf_write(&zc_buf, (const char *)buf_tmp + off, to_write_len);
194195
if (ret != to_write_len) {
195-
printf("ff_zc_mbuf_write failed, len:%d, errno:%d, %s\n", to_write_len, errno, strerror(errno));
196+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_zc_mbuf_write failed, len:%d, errno:%d, %s\n", to_write_len, errno, strerror(errno));
196197
exit(1);
197198
}
198199
off += to_write_len;
@@ -224,7 +225,7 @@ int loop(void *arg)
224225
ff_write(clientfd, html_buf, buf_len);
225226
#endif
226227
} else {
227-
printf("unknown event: %8.8X\n", event.flags);
228+
ff_log(FF_LOG_WARNING, FF_LOGTYPE_FSTACK_APP, "unknown event: %8.8X\n", event.flags);
228229
}
229230

230231
}
@@ -238,7 +239,7 @@ int main(int argc, char * argv[])
238239

239240
sockfd = ff_socket(AF_INET, SOCK_STREAM, 0);
240241
if (sockfd < 0) {
241-
printf("ff_socket failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
242+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_socket failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
242243
exit(1);
243244
}
244245

@@ -250,13 +251,13 @@ int main(int argc, char * argv[])
250251

251252
int ret = ff_bind(sockfd, (struct linux_sockaddr *)&my_addr, sizeof(my_addr));
252253
if (ret < 0) {
253-
printf("ff_bind failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
254+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_bind failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
254255
exit(1);
255256
}
256257

257258
ret = ff_listen(sockfd, MAX_EVENTS);
258259
if (ret < 0) {
259-
printf("ff_listen failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
260+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_listen failed, sockfd:%d, errno:%d, %s\n", sockfd, errno, strerror(errno));
260261
exit(1);
261262
}
262263

@@ -267,7 +268,7 @@ int main(int argc, char * argv[])
267268
#ifdef INET6
268269
sockfd6 = ff_socket(AF_INET6, SOCK_STREAM, 0);
269270
if (sockfd6 < 0) {
270-
printf("ff_socket failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
271+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_socket failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
271272
exit(1);
272273
}
273274

@@ -279,13 +280,13 @@ int main(int argc, char * argv[])
279280

280281
ret = ff_bind(sockfd6, (struct linux_sockaddr *)&my_addr6, sizeof(my_addr6));
281282
if (ret < 0) {
282-
printf("ff_bind failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
283+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_bind failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
283284
exit(1);
284285
}
285286

286287
ret = ff_listen(sockfd6, MAX_EVENTS);
287288
if (ret < 0) {
288-
printf("ff_listen failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
289+
ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_listen failed, sockfd6:%d, errno:%d, %s\n", sockfd6, errno, strerror(errno));
289290
exit(1);
290291
}
291292

lib/Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,12 +281,13 @@ endif
281281

282282
FF_HOST_SRCS+= \
283283
ff_host_interface.c \
284-
ff_thread.c \
284+
ff_thread.c \
285285
ff_config.c \
286286
ff_ini_parser.c \
287287
ff_dpdk_if.c \
288288
ff_dpdk_pcap.c \
289289
ff_epoll.c \
290+
ff_log.c \
290291
ff_init.c
291292

292293
ifdef FF_KNI
@@ -740,6 +741,7 @@ install:
740741
rm -rf ${PREFIX_INCLUDE}/ff_event.h
741742
rm -rf ${PREFIX_INCLUDE}/ff_errno.h
742743
rm -rf ${PREFIX_INCLUDE}/ff_epoll.h
744+
rm -rf ${PREFIX_INCLUDE}/ff_log.h
743745
rm -rf ${PREFIX_BIN}/ff_start
744746

745747
cp -f libfstack.a ${PREFIX_LIB}/libfstack.a.${F-STACK_VERSION}
@@ -749,6 +751,7 @@ install:
749751
cp -f ff_event.h ${PREFIX_INCLUDE}/ff_event.h
750752
cp -f ff_errno.h ${PREFIX_INCLUDE}/ff_errno.h
751753
cp -f ff_epoll.h ${PREFIX_INCLUDE}/ff_epoll.h
754+
cp -f ff_log.h ${PREFIX_INCLUDE}/ff_log.h
752755
cp -f ${TOPDIR}/start.sh ${PREFIX_BIN}/ff_start
753756
test -f '${F-STACK_CONF}' || cp -f ${TOPDIR}/config.ini ${F-STACK_CONF}
754757

@@ -760,6 +763,7 @@ uninstall:
760763
rm -rf ${PREFIX_INCLUDE}/ff_event.h
761764
rm -rf ${PREFIX_INCLUDE}/ff_errno.h
762765
rm -rf ${PREFIX_INCLUDE}/ff_epoll.h
766+
rm -rf ${PREFIX_INCLUDE}/ff_log.h
763767
rm -rf ${PREFIX_BIN}/ff_start
764768
rm -rf ${F-STACK_CONF}
765769

lib/ff_api.symlist

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,9 @@ ff_restore_curthread
7272
ff_rss_tbl_init
7373
ff_veth_get_softc
7474
ff_veth_free_softc
75+
ff_openlog_stream
76+
ff_log_set_global_level
77+
ff_log_set_level
78+
ff_log
79+
ff_vlog
80+
ff_log_clse

0 commit comments

Comments
 (0)