Skip to content

Commit

Permalink
Log format (#704)
Browse files Browse the repository at this point in the history
* Format c log

* Format go log

* Add SEAFILE_LOG_TO_STDOUT env

* Modify parameters name

* Set stdout to output

* Add app name and print error log

* Disable daemon mode when SEAFILE_LOG_TO_STDOUT is true

---------

Co-authored-by: 杨赫然 <[email protected]>
  • Loading branch information
feiniks and 杨赫然 authored Oct 24, 2024
1 parent 1afed5d commit 6af96fe
Show file tree
Hide file tree
Showing 8 changed files with 109 additions and 45 deletions.
38 changes: 34 additions & 4 deletions common/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ static int ccnet_log_level;
static int seafile_log_level;
static char *logfile;
static FILE *logfp;
static gboolean log_to_stdout = FALSE;
static char *app_name;

#ifndef WIN32
#ifdef SEAFILE_SERVER
Expand All @@ -40,6 +42,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,12 +63,26 @@ seafile_log (const gchar *log_domain, GLogLevelFlags log_level,
if (log_level > seafile_log_level)
return;

if (log_to_stdout) {
char name_buf[32] = {0};
snprintf(name_buf, sizeof(name_buf), "[%s] ", app_name);
fputs (name_buf, logfp);
}

t = time(NULL);
tm = localtime(&t);
len = strftime (buf, 1024, "%Y-%m-%d %H:%M:%S ", tm);
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);
else if (log_level == G_LOG_LEVEL_WARNING)
fputs ("[WARNING] ", logfp);
else if (log_level == G_LOG_LEVEL_CRITICAL)
fputs ("[ERROR] ", logfp);
else
fputs ("[INFO] ", logfp);
fputs (message, logfp);
fflush (logfp);
}
Expand Down Expand Up @@ -95,6 +113,14 @@ ccnet_log (const gchar *log_domain, GLogLevelFlags log_level,
g_return_if_fail (len < 1024);
if (logfp) {
fputs (buf, logfp);
if (log_level == G_LOG_LEVEL_DEBUG)
fputs ("[DEBUG] ", logfp);
else if (log_level == G_LOG_LEVEL_WARNING)
fputs ("[WARNING] ", logfp);
else if (log_level == G_LOG_LEVEL_CRITICAL)
fputs ("[ERROR] ", logfp);
else
fputs ("[INFO] ", logfp);
fputs (message, logfp);
fflush (logfp);
}
Expand All @@ -121,7 +147,7 @@ get_debug_level(const char *str, int default_level)

int
seafile_log_init (const char *_logfile, const char *ccnet_debug_level_str,
const char *seafile_debug_level_str)
const char *seafile_debug_level_str, const char *_app_name)
{
g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL
| G_LOG_FLAG_RECURSION, seafile_log, NULL);
Expand All @@ -132,9 +158,13 @@ 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) {
app_name = g_strdup (_app_name);

const char *log_to_stdout_env = g_getenv("SEAFILE_LOG_TO_STDOUT");
if (g_strcmp0(_logfile, "-") == 0 || g_strcmp0(log_to_stdout_env, "true") == 0) {
logfp = stdout;
logfile = g_strdup (_logfile);
log_to_stdout = TRUE;
}
else {
logfile = ccnet_expand_path(_logfile);
Expand All @@ -152,7 +182,7 @@ seafile_log_reopen ()
{
FILE *fp, *oldfp;

if (strcmp(logfile, "-") == 0)
if (g_strcmp0(logfile, "-") == 0 || log_to_stdout)
return 0;

if ((fp = g_fopen (logfile, "a+")) == NULL) {
Expand Down
6 changes: 5 additions & 1 deletion common/log.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@
#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);
const char *seafile_debug_level_str, const char *_app_name);
int seafile_log_reopen ();

#ifndef WIN32
Expand Down
33 changes: 18 additions & 15 deletions controller/seafile-controller.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,6 @@ start_seaf_server ()
"-P", ctl->pidfile[PID_SERVER],
"-p", ctl->rpc_pipe_path,
NULL};

int pid = spawn_process (argv, false);
if (pid <= 0) {
seaf_warning ("Failed to spawn seaf-server\n");
Expand Down Expand Up @@ -568,8 +567,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 @@ -684,11 +683,11 @@ 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"
);
"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 +716,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 +730,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 @@ -870,6 +867,7 @@ int main (int argc, char **argv)
break;
case 'v':
fprintf (stderr, "seafile-controller version 1.0\n");
exit(1);
break;
case 't':
test_conf = TRUE;
Expand Down Expand Up @@ -936,8 +934,8 @@ int main (int argc, char **argv)

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");
seafile_debug_level_str, "seafile-controller") < 0) {
fprintf (stderr, "Failed to init log.\n");
controller_exit (1);
}

Expand All @@ -952,6 +950,11 @@ int main (int argc, char **argv)
if (seaf_controller_start () < 0)
controller_exit (1);

const char *log_to_stdout_env = g_getenv("SEAFILE_LOG_TO_STDOUT");
if (g_strcmp0(log_to_stdout_env, "true") == 0) {
daemon_mode = 0;
}

#ifndef WIN32
if (daemon_mode) {
#ifndef __APPLE__
Expand Down
31 changes: 29 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 logToStdout 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" {
logToStdout = true
}

log.SetFormatter(&LogFormatter{})
}

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

func (f *LogFormatter) Format(entry *log.Entry) ([]byte, error) {
buf := make([]byte, 0, len(timestampFormat)+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 logToStdout {
appName = "[fileserver] "
}
buf := make([]byte, 0, len(appName)+len(timestampFormat)+len(level)+len(entry.Message)+1)
if logToStdout {
buf = append(buf, appName...)
}
buf = entry.Time.AppendFormat(buf, timestampFormat)
buf = append(buf, level...)
buf = append(buf, entry.Message...)
buf = append(buf, '\n')
return buf, nil
Expand Down Expand Up @@ -320,7 +342,9 @@ func main() {
loadSeafileDB()
option.LoadFileServerOptions(centralDir)

if logFile == "" {
if logToStdout {
// Use default output (StdOut)
} else if logFile == "" {
absLogFile = filepath.Join(absDataDir, "fileserver.log")
fp, err := os.OpenFile(absLogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
if err != nil {
Expand Down Expand Up @@ -420,6 +444,9 @@ func handleUser1Signal() {
}

func logRotate() {
if logToStdout {
return
}
// reopen fileserver log
fp, err := os.OpenFile(absLogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions fuse/seaf-fuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,8 +319,8 @@ int main(int argc, char *argv[])
logfile = options.log_file;

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

Expand Down
9 changes: 4 additions & 5 deletions server/gc/seaf-fsck.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ 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");
fprintf (stderr, "usage: seaf-fsck [-r] [-E exported_path] [-c config_dir] [-d seafile_dir] "
"[repo_id_1 [repo_id_2 ...]]\n");
}

#ifdef WIN32
Expand Down Expand Up @@ -141,8 +140,8 @@ main(int argc, char *argv[])
g_type_init();
#endif

if (seafile_log_init ("-", "info", "debug") < 0) {
seaf_warning ("Failed to init log.\n");
if (seafile_log_init ("-", "info", "debug", "seaf-fsck") < 0) {
fprintf (stderr, "Failed to init log.\n");
exit (1);
}

Expand Down
19 changes: 9 additions & 10 deletions server/gc/seafserv-gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,13 @@ 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");
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");
}

#ifdef WIN32
Expand Down Expand Up @@ -122,8 +121,8 @@ main(int argc, char *argv[])
g_type_init();
#endif

if (seafile_log_init ("-", "info", "debug") < 0) {
seaf_warning ("Failed to init log.\n");
if (seafile_log_init ("-", "info", "debug", "seafserv-gc") < 0) {
fprintf (stderr, "Failed to init log.\n");
exit (1);
}

Expand Down
14 changes: 8 additions & 6 deletions server/seaf-server.c
Original file line number Diff line number Diff line change
Expand Up @@ -1186,18 +1186,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", "seaf-server");

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 Expand Up @@ -1280,6 +1277,11 @@ main (int argc, char **argv)
return test_seafile_config (central_config_dir, ccnet_dir, seafile_dir);
}

const char *log_to_stdout_env = g_getenv("SEAFILE_LOG_TO_STDOUT");
if (g_strcmp0 (log_to_stdout_env, "true") == 0) {
daemon_mode = 0;
}

#ifndef WIN32
if (daemon_mode) {
#ifndef __APPLE__
Expand Down Expand Up @@ -1325,7 +1327,7 @@ main (int argc, char **argv)
if (logfile == NULL)
logfile = g_build_filename (seafile_dir, "seafile.log", NULL);

if (seafile_log_init (logfile, "info", "debug") < 0) {
if (seafile_log_init (logfile, "info", "debug", "seaf-server") < 0) {
seaf_warning ("Failed to init log.\n");
exit (1);
}
Expand Down

0 comments on commit 6af96fe

Please sign in to comment.