1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-05-10 00:56:50 +00:00

Log format ()

* 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: 杨赫然 <heran.yang@seafile.com>
This commit is contained in:
feiniks 2024-10-24 10:46:41 +08:00 committed by GitHub
parent 1afed5d770
commit 6af96fe1d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 109 additions and 45 deletions

View File

@ -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
@ -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;
}
@ -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);
}
@ -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);
}
@ -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);
@ -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);
@ -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) {

View File

@ -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

View File

@ -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");
@ -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);
@ -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 */
@ -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);
}
@ -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);
}
@ -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;
@ -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);
}
@ -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__

View File

@ -44,6 +44,8 @@ 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")
@ -51,6 +53,11 @@ func init() {
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{})
}
@ -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
@ -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 {
@ -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 {

View File

@ -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);
}

View File

@ -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
@ -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);
}

View File

@ -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
@ -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);
}

View File

@ -1186,10 +1186,7 @@ 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));
@ -1197,7 +1194,7 @@ test_seafile_config(const char *central_config_dir, const char *config_dir, cons
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;
}
@ -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__
@ -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);
}