Skip to content

Commit

Permalink
Add SEAFILE_LOG_TO_STDOUT env
Browse files Browse the repository at this point in the history
  • Loading branch information
杨赫然 committed Oct 17, 2024
1 parent a3c2b89 commit d6556ed
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 50 deletions.
27 changes: 20 additions & 7 deletions common/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ static int ccnet_log_level;
static int seafile_log_level;
static char *logfile;
static FILE *logfp;
static gboolean to_stdout = FALSE;

#ifndef WIN32
#ifdef SEAFILE_SERVER
Expand All @@ -40,6 +41,8 @@ get_syslog_level (GLogLevelFlags level)
return LOG_WARNING;
case G_LOG_LEVEL_ERROR:
return LOG_ERR;
case G_LOG_LEVEL_CRITICAL:
return LOG_ERR;
default:
return LOG_DEBUG;
}
Expand All @@ -59,18 +62,24 @@ seafile_log (const gchar *log_domain, GLogLevelFlags log_level,
if (log_level > seafile_log_level)
return;

if (to_stdout) {
fputs ("[seaf-server] ", logfp);
}

t = time(NULL);
tm = localtime(&t);
len = strftime (buf, 1024, "[%Y-%m-%d %H:%M:%S] ", tm);
g_return_if_fail (len < 1024);
if (logfp) {
fputs (buf, logfp);
if (log_level == G_LOG_LEVEL_DEBUG)
fputs ("[debug] ", logfp);
fputs ("[DEBUG] ", logfp);
else if (log_level == G_LOG_LEVEL_WARNING)
fputs ("[warning] ", logfp);
fputs ("[WARNING] ", logfp);
else if (log_level == G_LOG_LEVEL_CRITICAL)
fputs ("[ERROR] ", logfp);
else
fputs ("[info] ", logfp);
fputs ("[INFO] ", logfp);
fputs (message, logfp);
fflush (logfp);
}
Expand Down Expand Up @@ -102,11 +111,13 @@ ccnet_log (const gchar *log_domain, GLogLevelFlags log_level,
if (logfp) {
fputs (buf, logfp);
if (log_level == G_LOG_LEVEL_DEBUG)
fputs ("[debug] ", logfp);
fputs ("[DEBUG] ", logfp);
else if (log_level == G_LOG_LEVEL_WARNING)
fputs ("[warning] ", logfp);
fputs ("[WARNING] ", logfp);
else if (log_level == G_LOG_LEVEL_CRITICAL)
fputs ("[ERROR] ", logfp);
else
fputs ("[info] ", logfp);
fputs ("[INFO] ", logfp);
fputs (message, logfp);
fflush (logfp);
}
Expand Down Expand Up @@ -144,9 +155,11 @@ seafile_log_init (const char *_logfile, const char *ccnet_debug_level_str,
ccnet_log_level = get_debug_level(ccnet_debug_level_str, G_LOG_LEVEL_INFO);
seafile_log_level = get_debug_level(seafile_debug_level_str, G_LOG_LEVEL_DEBUG);

if (strcmp(_logfile, "-") == 0) {
const char *log_to_stdout = g_getenv("SEAFILE_LOG_TO_STDOUT");
if (g_strcmp0(_logfile, "-") == 0 || g_strcmp0(log_to_stdout, "true") == 0) {
logfp = stdout;
logfile = g_strdup (_logfile);
to_stdout = TRUE;
}
else {
logfile = ccnet_expand_path(_logfile);
Expand Down
4 changes: 4 additions & 0 deletions common/log.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
#define seaf_message(fmt, ...) g_message("%s(%d): " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
#endif

#ifndef seaf_error
#define seaf_error(fmt, ...) g_critical("%s(%d): " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
#endif


int seafile_log_init (const char *logfile, const char *ccnet_debug_level_str,
const char *seafile_debug_level_str);
Expand Down
49 changes: 26 additions & 23 deletions controller/seafile-controller.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ start_seaf_server ()
"-l", logfile,
"-P", ctl->pidfile[PID_SERVER],
"-p", ctl->rpc_pipe_path,
"-f",
NULL};

int pid = spawn_process (argv, false);
Expand Down Expand Up @@ -568,8 +569,8 @@ seaf_controller_init (SeafileController *ctl,
char *topdir = g_path_get_dirname(config_dir);
logdir = g_build_filename (topdir, "logs", NULL);
if (checkdir_with_mkdir(logdir) < 0) {
fprintf (stderr, "failed to create log folder \"%s\": %s\n",
logdir, strerror(errno));
seaf_error ("failed to create log folder \"%s\": %s\n",
logdir, strerror(errno));
return -1;
}
g_free (topdir);
Expand Down Expand Up @@ -683,12 +684,13 @@ set_signal_handlers ()
static void
usage ()
{
fprintf (stderr, "Usage: seafile-controller OPTIONS\n"
"OPTIONS:\n"
" -b, --bin-dir insert a directory in front of the PATH env\n"
" -c, --config-dir ccnet config dir\n"
" -d, --seafile-dir seafile dir\n"
);
seafile_log_init ("-", "debug", "debug");
seaf_error ("Usage: seafile-controller OPTIONS\n"
"OPTIONS:\n"
" -b, --bin-dir insert a directory in front of the PATH env\n"
" -c, --config-dir ccnet config dir\n"
" -d, --seafile-dir seafile dir\n"
);
}

/* seafile-controller -t is used to test whether config file is valid */
Expand Down Expand Up @@ -717,9 +719,8 @@ test_config (const char *central_config_dir,
&error);

if (error != NULL) {
fprintf (stderr,
"failed to run \"seaf-server -t\": %s\n",
error->message);
seaf_error ("failed to run \"seaf-server -t\": %s\n",
error->message);
exit (1);
}

Expand All @@ -732,8 +733,7 @@ test_config (const char *central_config_dir,
}

if (retcode != 0) {
fprintf (stderr,
"failed to run \"seaf-server -t\" [%d]\n", retcode);
seaf_error ("failed to run \"seaf-server -t\" [%d]\n", retcode);
exit (1);
}

Expand Down Expand Up @@ -869,7 +869,9 @@ int main (int argc, char **argv)
exit(1);
break;
case 'v':
fprintf (stderr, "seafile-controller version 1.0\n");
seafile_log_init ("-", "debug", "debug");
seaf_message ("seafile-controller version 1.0\n");
exit(1);
break;
case 't':
test_conf = TRUE;
Expand Down Expand Up @@ -911,13 +913,21 @@ int main (int argc, char **argv)
g_thread_init (NULL);
#endif

char *logfile = g_build_filename (ctl->logdir, "controller.log", NULL);
if (seafile_log_init (logfile, ccnet_debug_level_str,
seafile_debug_level_str) < 0) {
seafile_log_init ("-", ccnet_debug_level_str, seafile_debug_level_str);
seaf_error ("Failed to init log.\n");
controller_exit (1);
}

if (!seafile_dir) {
fprintf (stderr, "<seafile_dir> must be specified with --seafile-dir\n");
seaf_error ("<seafile_dir> must be specified with --seafile-dir\n");
exit(1);
}

if (!central_config_dir) {
fprintf (stderr, "<central_config_dir> must be specified with --central-config-dir\n");
seaf_error ("<central_config_dir> must be specified with --central-config-dir\n");
exit(1);
}

Expand All @@ -934,13 +944,6 @@ int main (int argc, char **argv)
controller_exit(1);
}

char *logfile = g_build_filename (ctl->logdir, "controller.log", NULL);
if (seafile_log_init (logfile, ccnet_debug_level_str,
seafile_debug_level_str) < 0) {
seaf_warning ("Failed to init log.\n");
controller_exit (1);
}

if (init_syslog_config () < 0) {
controller_exit (1);
}
Expand Down
24 changes: 22 additions & 2 deletions fileserver/fileserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,20 @@ var logFp *os.File
var dbType string
var seafileDB, ccnetDB *sql.DB

var toStdout bool

func init() {
flag.StringVar(&centralDir, "F", "", "central config directory")
flag.StringVar(&dataDir, "d", "", "seafile data directory")
flag.StringVar(&logFile, "l", "", "log file path")
flag.StringVar(&rpcPipePath, "p", "", "rpc pipe path")
flag.StringVar(&pidFilePath, "P", "", "pid file path")

env := os.Getenv("SEAFILE_LOG_TO_STDOUT")
if env == "true" {
toStdout = true
}

log.SetFormatter(&LogFormatter{})
}

Expand All @@ -61,8 +68,21 @@ const (
type LogFormatter struct{}

func (f *LogFormatter) Format(entry *log.Entry) ([]byte, error) {
level := fmt.Sprintf("[%s] ", entry.Level.String())
buf := make([]byte, 0, len(timestampFormat)+len(level)+len(entry.Message)+1)
levelStr := entry.Level.String()
if levelStr == "fatal" {
levelStr = "ERROR"
} else {
levelStr = strings.ToUpper(levelStr)
}
level := fmt.Sprintf("[%s] ", levelStr)
appName := ""
if toStdout {
appName = "[fileserver] "
}
buf := make([]byte, 0, len(appName)+len(timestampFormat)+len(level)+len(entry.Message)+1)
if toStdout {
buf = append(buf, appName...)
}
buf = entry.Time.AppendFormat(buf, timestampFormat)
buf = append(buf, level...)
buf = append(buf, entry.Message...)
Expand Down
3 changes: 2 additions & 1 deletion fuse/seaf-fuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,8 @@ int main(int argc, char *argv[])

if (seafile_log_init(logfile, ccnet_debug_level_str,
seafile_debug_level_str) < 0) {
fprintf(stderr, "Failed to init log.\n");
seafile_log_init("-", ccnet_debug_level_str, seafile_debug_level_str);
seaf_error("Failed to init log.\n");
exit(1);
}

Expand Down
6 changes: 3 additions & 3 deletions server/gc/seaf-fsck.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ static const struct option long_opts[] = {

static void usage ()
{
fprintf (stderr,
"usage: seaf-fsck [-r] [-E exported_path] [-c config_dir] [-d seafile_dir] "
"[repo_id_1 [repo_id_2 ...]]\n");
seafile_log_init ("-", "info", "debug");
seaf_error ("usage: seaf-fsck [-r] [-E exported_path] [-c config_dir] [-d seafile_dir] "
"[repo_id_1 [repo_id_2 ...]]\n");
}

#ifdef WIN32
Expand Down
16 changes: 8 additions & 8 deletions server/gc/seafserv-gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ static const struct option long_opts[] = {

static void usage ()
{
fprintf (stderr,
"usage: seafserv-gc [-c config_dir] [-d seafile_dir] "
"[repo_id_1 [repo_id_2 ...]]\n"
"Additional options:\n"
"-r, --rm-deleted: remove garbaged repos\n"
"-R, --rm-fs: remove fs object\n"
"-D, --dry-run: report blocks that can be remove, but not remove them\n"
"-V, --verbose: verbose output messages\n");
seafile_log_init ("-", "info", "debug");
seaf_error ("usage: seafserv-gc [-c config_dir] [-d seafile_dir] "
"[repo_id_1 [repo_id_2 ...]]\n"
"Additional options:\n"
"-r, --rm-deleted: remove garbaged repos\n"
"-R, --rm-fs: remove fs object\n"
"-D, --dry-run: report blocks that can be remove, but not remove them\n"
"-V, --verbose: verbose output messages\n");
}

#ifdef WIN32
Expand Down
10 changes: 4 additions & 6 deletions server/seaf-server.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ static struct option long_options[] = {

static void usage ()
{
fprintf (stderr, "usage: seaf-server [-c config_dir] [-d seafile_dir]\n");
seafile_log_init ("-", "info", "debug");
seaf_error ("usage: seaf-server [-c config_dir] [-d seafile_dir]\n");
}

#include <searpc.h>
Expand Down Expand Up @@ -1186,18 +1187,15 @@ test_seafile_config(const char *central_config_dir, const char *config_dir, cons
central_config_dir = ccnet_expand_path (central_config_dir);
}

if (seafile_log_init ("-", "debug", "debug") < 0) {
fprintf (stderr, "seafile_log_init error: %s\n", strerror(errno));
return -1;
}
seafile_log_init ("-", "debug", "debug");

srand (time(NULL));

event_init ();

seaf = seafile_session_new (central_config_dir, seafile_dir, config_dir, NULL, NULL);
if (!seaf) {
fprintf (stderr, "Error: failed to create ccnet session\n");
seaf_error ("Error: failed to create ccnet session\n");
return -1;
}

Expand Down

0 comments on commit d6556ed

Please sign in to comment.