diff --git a/README.md b/README.md index 4b199c0a..4c8120c1 100644 --- a/README.md +++ b/README.md @@ -219,11 +219,11 @@ ss-[local|redir|server] [-c ] json format config file [-i ] specific network interface to bind, - only avaliable in local and server modes + only available in local and server modes [-b ] specific local address to bind, - only avaliable in local and redir modes + only available in local and redir modes [-u] udprelay mode to supprot udp traffic - only avaliable in local and server modes + only available in local and server modes [-v] verbose mode, debug output in console notes: diff --git a/src/local.c b/src/local.c index b28020e6..b56b0f93 100644 --- a/src/local.c +++ b/src/local.c @@ -896,6 +896,7 @@ int main (int argc, char **argv) if (pid_flags) { + USE_SYSLOG(argv[0]); demonize(pid_path); } diff --git a/src/redir.c b/src/redir.c index b674b5ad..7379ef53 100644 --- a/src/redir.c +++ b/src/redir.c @@ -749,6 +749,7 @@ int main (int argc, char **argv) if (pid_flags) { + USE_SYSLOG(argv[0]); demonize(pid_path); } diff --git a/src/server.c b/src/server.c index 4a8f32a6..d6468afb 100644 --- a/src/server.c +++ b/src/server.c @@ -988,6 +988,7 @@ int main (int argc, char **argv) if (pid_flags) { + USE_SYSLOG(argv[0]); demonize(pid_path); } @@ -1043,7 +1044,7 @@ int main (int argc, char **argv) } // Setup UDP - if (udprelay) + if (udprelay) { LOGD("udprelay enabled."); udprelay_init(server_host[0], server_port, asyncns, m, iface); diff --git a/src/utils.c b/src/utils.c index 61c24279..7a18c90c 100644 --- a/src/utils.c +++ b/src/utils.c @@ -14,6 +14,10 @@ #define INT_DIGITS 19 /* enough for 64 bit integer */ +#ifdef HAS_SYSLOG +int use_syslog = 0; +#endif + #ifndef __MINGW32__ void ERROR(const char *s) { @@ -81,7 +85,7 @@ void usage() printf(" maintained by Max Lv \n\n"); printf(" usage:\n\n"); printf(" ss-[local|redir|server]\n"); - printf(" -s host name or ip address of your remote server\n"); + printf(" -s host name or ip address of your remote server\n"); printf(" -p port number of your remote server\n"); printf(" -l port number of your local server\n"); printf(" -k password of your remote server\n"); @@ -96,11 +100,11 @@ void usage() printf(" [-c ] json format config file\n"); printf("\n"); printf(" [-i ] specific network interface to bind,\n"); - printf(" only avaliable in local and server modes\n"); + printf(" only available in local and server modes\n"); printf(" [-b ] specific local address to bind,\n"); - printf(" only avaliable in local and redir modes\n"); + printf(" only available in local and redir modes\n"); printf(" [-u] udprelay mode to supprot udp traffic\n"); - printf(" only avaliable in local and server modes\n"); + printf(" only available in local and server modes\n"); printf(" [-v] verbose mode, debug output in console\n"); printf("\n"); } diff --git a/src/utils.h b/src/utils.h index c49baa84..c1e45e0f 100644 --- a/src/utils.h +++ b/src/utils.h @@ -8,6 +8,7 @@ #include +#define USE_SYSLOG(ident) #define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, "shadowsocks", __VA_ARGS__)) #define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "shadowsocks", __VA_ARGS__)) @@ -20,6 +21,8 @@ #define TIME_FORMAT "%Y-%m-%d %H:%M:%S" +#define USE_SYSLOG(ident) + #define LOGD(format, ...) do {\ time_t now = time(NULL);\ char timestr[20];\ @@ -36,23 +39,41 @@ while(0) #else +#include + +#define HAS_SYSLOG +extern int use_syslog; + #define TIME_FORMAT "%F %T" +#define USE_SYSLOG(ident) do {\ + use_syslog = 1;\ + openlog((ident), LOG_CONS | LOG_PID, 0);}\ +while(0) + #define LOGD(format, ...) do {\ - time_t now = time(NULL);\ - char timestr[20];\ - strftime(timestr, 20, TIME_FORMAT, localtime(&now));\ - fprintf(stderr, "\e[01;32m %s INFO: \e[0m" format "\n", timestr, ##__VA_ARGS__);}\ + if (use_syslog) {\ + syslog(LOG_INFO, format, ##__VA_ARGS__);\ + } else {\ + time_t now = time(NULL);\ + char timestr[20];\ + strftime(timestr, 20, TIME_FORMAT, localtime(&now));\ + fprintf(stderr, "\e[01;32m %s INFO: \e[0m" format "\n", timestr, ##__VA_ARGS__);\ + }}\ while(0) #define LOGE(format, ...) do {\ - time_t now = time(NULL);\ - char timestr[20];\ - strftime(timestr, 20, TIME_FORMAT, localtime(&now));\ - fprintf(stderr, "\e[01;35m %s ERROR: \e[0m" format "\n", timestr, ##__VA_ARGS__);}\ + if (use_syslog) {\ + syslog(LOG_ERR, format, ##__VA_ARGS__);\ + } else {\ + time_t now = time(NULL);\ + char timestr[20];\ + strftime(timestr, 20, TIME_FORMAT, localtime(&now));\ + fprintf(stderr, "\e[01;35m %s ERROR: \e[0m" format "\n", timestr, ##__VA_ARGS__);\ + }}\ while(0) -#endif +#endif /* _WIN32 */ #endif