void restart_logging (ice_config_t *config) { if (strcmp (config->error_log, "-")) { char fn_error[FILENAME_MAX]; snprintf (fn_error, FILENAME_MAX, "%s%s%s", config->log_dir, PATH_SEPARATOR, config->error_log); log_set_filename (errorlog, fn_error); log_set_level (errorlog, config->loglevel); log_set_trigger (errorlog, config->logsize); log_set_archive_timestamp(errorlog, config->logarchive); log_reopen (errorlog); } if (strcmp (config->access_log, "-")) { char fn_error[FILENAME_MAX]; snprintf (fn_error, FILENAME_MAX, "%s%s%s", config->log_dir, PATH_SEPARATOR, config->access_log); log_set_filename (accesslog, fn_error); log_set_trigger (accesslog, config->logsize); log_set_archive_timestamp (accesslog, config->logarchive); log_reopen (accesslog); } if (config->playlist_log) { char fn_error[FILENAME_MAX]; snprintf (fn_error, FILENAME_MAX, "%s%s%s", config->log_dir, PATH_SEPARATOR, config->playlist_log); log_set_filename (playlistlog, fn_error); log_set_trigger (playlistlog, config->logsize); log_set_archive_timestamp (playlistlog, config->logarchive); log_reopen (playlistlog); } }
int main(int argc, char **argv) { char logpath[FILENAME_MAX]; int log; if (argc != 2) { fprintf(stderr, PACKAGE_STRING "\n" " (c) Copyright 2001-2004 The IceS Development Team <*****@*****.**>\n" " Michael Smith <*****@*****.**>\n" " Karl Heyes <*****@*****.**>\n" " and others\n" "\n" "Usage: \"ices config.xml\"\n"); return 1; } config_initialize(); if (config_read(argv[1]) <= 0) { fprintf(stderr, "Failed to read config file \"%s\"\n", argv[1]); goto fail; } if (ices_config->background) { #ifndef _WIN32 int ret = 0; /* Start up new session, to lose old session and process group */ switch (fork()) { case 0: break; /* child continues */ case -1: perror ("fork"); ret = -1; default: exit (ret); } /* Disassociate process group and controlling terminal */ setsid(); /* Become a NON-session leader so that a */ /* control terminal can't be reacquired */ switch (fork()) { case 0: break; /* child continues */ case -1: perror ("fork"); ret = -1; default: exit (ret); } #else FreeConsole(); #endif } log_initialize(); thread_initialize(); shout_init(); encode_init(); #ifndef _WIN32 signals_setup(); #endif snprintf(logpath, FILENAME_MAX, "%s/%s", ices_config->logpath, ices_config->logfile); if(ices_config->log_stderr) log = log_open_file(stderr); else { log = log_open(logpath); if (log < 0) fprintf (stderr, "unable to open log %s\n", logpath); log_set_trigger (log, ices_config->logsize); } /* Set the log level, if requested - defaults to 2 (WARN) otherwise */ if (ices_config->loglevel) log_set_level(log, ices_config->loglevel); ices_config->log_id = log; LOG_INFO0(PACKAGE_STRING " started..."); if (ices_config->pidfile != NULL) { FILE *f = fopen (ices_config->pidfile, "w"); if (f) { fprintf (f, "%i", getpid()); fclose (f); } else { LOG_WARN1("pidfile \"%s\" cannot be written to", ices_config->pidfile); xmlFree (ices_config->pidfile); ices_config->pidfile = NULL; } } /* Start the core streaming loop */ input_loop(); if (ices_config->pidfile) remove (ices_config->pidfile); LOG_INFO0("Shutdown complete"); log_close(log); fail: encode_close(); shout_shutdown(); config_shutdown(); thread_shutdown(); log_shutdown(); return 0; }
int restart_logging (ice_config_t *config) { ice_config_t *current = config_get_config_unlocked(); mount_proxy *m; int ret = 0; config->error_log.logid = current->error_log.logid; config->access_log.logid = current->access_log.logid; config->playlist_log.logid = current->playlist_log.logid; if (recheck_log_file (config, &config->error_log.logid, config->error_log.name) < 0) ret = -1; else { log_set_trigger (config->error_log.logid, config->error_log.size); log_set_reopen_after (config->error_log.logid, config->error_log.duration); log_set_lines_kept (config->error_log.logid, config->error_log.display); log_set_archive_timestamp (config->error_log.logid, config->error_log.archive); log_set_level (config->error_log.logid, config->error_log.level); } thread_use_log_id (config->error_log.logid); errorlog = config->error_log.logid; /* value stays static so avoid taking the config lock */ if (recheck_log_file (config, &config->access_log.logid, config->access_log.name) < 0) ret = -1; else { log_set_trigger (config->access_log.logid, config->access_log.size); log_set_reopen_after (config->access_log.logid, config->access_log.duration); log_set_lines_kept (config->access_log.logid, config->access_log.display); log_set_archive_timestamp (config->access_log.logid, config->access_log.archive); log_set_level (config->access_log.logid, 4); } if (recheck_log_file (config, &config->playlist_log.logid, config->playlist_log.name) < 0) ret = -1; else { log_set_trigger (config->playlist_log.logid, config->playlist_log.size); log_set_reopen_after (config->playlist_log.logid, config->playlist_log.duration); log_set_lines_kept (config->playlist_log.logid, config->playlist_log.display); log_set_archive_timestamp (config->playlist_log.logid, config->playlist_log.archive); log_set_level (config->playlist_log.logid, 4); } playlistlog = config->playlist_log.logid; m = config->mounts; while (m) { if (recheck_log_file (config, &m->access_log.logid, m->access_log.name) < 0) ret = -1; else { log_set_trigger (m->access_log.logid, m->access_log.size); log_set_reopen_after (m->access_log.logid, m->access_log.duration); log_set_lines_kept (m->access_log.logid, m->access_log.display); log_set_archive_timestamp (m->access_log.logid, m->access_log.archive); log_set_level (m->access_log.logid, 4); } m = m->next; } return ret; }