正在显示
10 个修改的文件
包含
76 行增加
和
10 行删除
| @@ -17,7 +17,11 @@ chunk_size 60000; | @@ -17,7 +17,11 @@ chunk_size 60000; | ||
| 17 | # the logs dir. | 17 | # the logs dir. |
| 18 | # if enabled ffmpeg, each stracoding stream will create a log file. | 18 | # if enabled ffmpeg, each stracoding stream will create a log file. |
| 19 | # default: ./objs/logs | 19 | # default: ./objs/logs |
| 20 | -log_dir ./objs/logs; | 20 | +ff_log_dir ./objs/logs; |
| 21 | +# the log file for srs. | ||
| 22 | +# if not specified, disable log to file, only print to console. | ||
| 23 | +# if speicfied, write log to file and print to console. | ||
| 24 | +srs_log_file ./objs/srs.log; | ||
| 21 | # the max connections. | 25 | # the max connections. |
| 22 | # if exceed the max connections, server will drop the new connection. | 26 | # if exceed the max connections, server will drop the new connection. |
| 23 | # default: 2000 | 27 | # default: 2000 |
| @@ -129,10 +129,10 @@ echo -e " | ${SrsGprofSummaryColor}gprof -b ./objs/srs gmon.out > gprof. | @@ -129,10 +129,10 @@ echo -e " | ${SrsGprofSummaryColor}gprof -b ./objs/srs gmon.out > gprof. | ||
| 129 | echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" | 129 | echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" |
| 130 | echo -e " |${SrsResearchSummaryColor}research: ./objs/research, api server, players, ts info.\${BLACK}" | 130 | echo -e " |${SrsResearchSummaryColor}research: ./objs/research, api server, players, ts info.\${BLACK}" |
| 131 | echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" | 131 | echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" |
| 132 | -echo -e " |${SrsUtestSummaryColor}utest: ./objs/srs_utest, the utest for srs\${BLACK}" | ||
| 133 | -echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" | ||
| 134 | echo -e " |${SrsBWTCSummaryColor}bandwidth: ./objs/bandwidth, the bandwidth test client\${BLACK}" | 132 | echo -e " |${SrsBWTCSummaryColor}bandwidth: ./objs/bandwidth, the bandwidth test client\${BLACK}" |
| 135 | echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" | 133 | echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" |
| 134 | +echo -e " |${SrsUtestSummaryColor}utest: ./objs/srs_utest, the utest for srs\${BLACK}" | ||
| 135 | +echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" | ||
| 136 | echo -e " |${SrsLibrtmpSummaryColor}librtmp @see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLibrtmp\${BLACK}" | 136 | echo -e " |${SrsLibrtmpSummaryColor}librtmp @see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLibrtmp\${BLACK}" |
| 137 | echo -e " |${SrsLibrtmpSummaryColor}librtmp: ./objs/include, ./objs/lib, the srs-librtmp library\${BLACK}" | 137 | echo -e " |${SrsLibrtmpSummaryColor}librtmp: ./objs/include, ./objs/lib, the srs-librtmp library\${BLACK}" |
| 138 | echo -e " | ${SrsLibrtmpSummaryColor}simple handshake: publish/play stream with simple handshake to server\${BLACK}" | 138 | echo -e " | ${SrsLibrtmpSummaryColor}simple handshake: publish/play stream with simple handshake to server\${BLACK}" |
| @@ -16,6 +16,7 @@ ROOT="./" | @@ -16,6 +16,7 @@ ROOT="./" | ||
| 16 | APP="./objs/srs" | 16 | APP="./objs/srs" |
| 17 | CONFIG="./conf/srs.conf" | 17 | CONFIG="./conf/srs.conf" |
| 18 | DEFAULT_PID_FILE='./objs/srs.pid' | 18 | DEFAULT_PID_FILE='./objs/srs.pid' |
| 19 | +DEFAULT_LOG_FILE='./objs/srs.log' | ||
| 19 | 20 | ||
| 20 | ######################################################################## | 21 | ######################################################################## |
| 21 | # utility functions | 22 | # utility functions |
| @@ -65,10 +66,17 @@ start() { | @@ -65,10 +66,17 @@ start() { | ||
| 65 | 66 | ||
| 66 | # not exists, start server | 67 | # not exists, start server |
| 67 | ok_msg "Starting SRS..." | 68 | ok_msg "Starting SRS..." |
| 69 | + | ||
| 70 | + # get log file | ||
| 71 | + srs_log_file=`cat ${ROOT}/${CONFIG} |grep '^srs_log_file'| awk '{print $2}'| awk -F ';' '{print $1}'` | ||
| 72 | + | ||
| 68 | # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000" | 73 | # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000" |
| 69 | - # TODO: FIXME: write log to, for instance, the same dir of log. | ||
| 70 | # TODO: FIXME: support deamon, without nohup. | 74 | # TODO: FIXME: support deamon, without nohup. |
| 71 | - (cd ${ROOT}; nohup ${APP} -c ${CONFIG} >/dev/null 2>&1 &) | 75 | + if [[ -z $srs_log_file ]]; then |
| 76 | + (cd ${ROOT}; nohup ${APP} -c ${CONFIG} >/dev/null 2>&1 &) | ||
| 77 | + else | ||
| 78 | + (cd ${ROOT}; nohup ${APP} -c ${CONFIG} >> $srs_log_file 2>&1 &) | ||
| 79 | + fi | ||
| 72 | 80 | ||
| 73 | # check again after start server | 81 | # check again after start server |
| 74 | sleep 0.5 | 82 | sleep 0.5 |
| @@ -684,6 +684,11 @@ int SrsConfig::parse_file(const char* filename) | @@ -684,6 +684,11 @@ int SrsConfig::parse_file(const char* filename) | ||
| 684 | // TODO: check http. | 684 | // TODO: check http. |
| 685 | // TODO: check pid. | 685 | // TODO: check pid. |
| 686 | 686 | ||
| 687 | + std::string filename = this->get_srs_log_file(); | ||
| 688 | + if (!filename.empty()) { | ||
| 689 | + srs_trace("open log file %s and write to", filename.c_str()); | ||
| 690 | + } | ||
| 691 | + | ||
| 687 | return ret; | 692 | return ret; |
| 688 | } | 693 | } |
| 689 | 694 | ||
| @@ -1253,11 +1258,11 @@ string SrsConfig::get_engine_output(SrsConfDirective* engine) | @@ -1253,11 +1258,11 @@ string SrsConfig::get_engine_output(SrsConfDirective* engine) | ||
| 1253 | return conf->arg0(); | 1258 | return conf->arg0(); |
| 1254 | } | 1259 | } |
| 1255 | 1260 | ||
| 1256 | -string SrsConfig::get_log_dir() | 1261 | +string SrsConfig::get_ffmpeg_log_dir() |
| 1257 | { | 1262 | { |
| 1258 | srs_assert(root); | 1263 | srs_assert(root); |
| 1259 | 1264 | ||
| 1260 | - SrsConfDirective* conf = root->get("log_dir"); | 1265 | + SrsConfDirective* conf = root->get("ff_log_dir"); |
| 1261 | if (!conf || conf->arg0().empty()) { | 1266 | if (!conf || conf->arg0().empty()) { |
| 1262 | return "./objs/logs"; | 1267 | return "./objs/logs"; |
| 1263 | } | 1268 | } |
| @@ -1265,6 +1270,18 @@ string SrsConfig::get_log_dir() | @@ -1265,6 +1270,18 @@ string SrsConfig::get_log_dir() | ||
| 1265 | return conf->arg0(); | 1270 | return conf->arg0(); |
| 1266 | } | 1271 | } |
| 1267 | 1272 | ||
| 1273 | +string SrsConfig::get_srs_log_file() | ||
| 1274 | +{ | ||
| 1275 | + srs_assert(root); | ||
| 1276 | + | ||
| 1277 | + SrsConfDirective* conf = root->get("srs_log_file"); | ||
| 1278 | + if (!conf || conf->arg0().empty()) { | ||
| 1279 | + return ""; | ||
| 1280 | + } | ||
| 1281 | + | ||
| 1282 | + return conf->arg0(); | ||
| 1283 | +} | ||
| 1284 | + | ||
| 1268 | int SrsConfig::get_max_connections() | 1285 | int SrsConfig::get_max_connections() |
| 1269 | { | 1286 | { |
| 1270 | srs_assert(root); | 1287 | srs_assert(root); |
| @@ -147,7 +147,8 @@ public: | @@ -147,7 +147,8 @@ public: | ||
| 147 | virtual int get_engine_achannels(SrsConfDirective* engine); | 147 | virtual int get_engine_achannels(SrsConfDirective* engine); |
| 148 | virtual void get_engine_aparams(SrsConfDirective* engine, std::vector<std::string>& aparams); | 148 | virtual void get_engine_aparams(SrsConfDirective* engine, std::vector<std::string>& aparams); |
| 149 | virtual std::string get_engine_output(SrsConfDirective* engine); | 149 | virtual std::string get_engine_output(SrsConfDirective* engine); |
| 150 | - virtual std::string get_log_dir(); | 150 | + virtual std::string get_ffmpeg_log_dir(); |
| 151 | + virtual std::string get_srs_log_file(); | ||
| 151 | virtual int get_max_connections(); | 152 | virtual int get_max_connections(); |
| 152 | virtual bool get_gop_cache(std::string vhost); | 153 | virtual bool get_gop_cache(std::string vhost); |
| 153 | virtual double get_queue_length(std::string vhost); | 154 | virtual double get_queue_length(std::string vhost); |
| @@ -118,7 +118,7 @@ int SrsFFMPEG::initialize(SrsRequest* req, SrsConfDirective* engine) | @@ -118,7 +118,7 @@ int SrsFFMPEG::initialize(SrsRequest* req, SrsConfDirective* engine) | ||
| 118 | output = srs_replace(output, "[engine]", engine->arg0()); | 118 | output = srs_replace(output, "[engine]", engine->arg0()); |
| 119 | 119 | ||
| 120 | // write ffmpeg info to log file. | 120 | // write ffmpeg info to log file. |
| 121 | - log_file = _srs_config->get_log_dir(); | 121 | + log_file = _srs_config->get_ffmpeg_log_dir(); |
| 122 | log_file += "/"; | 122 | log_file += "/"; |
| 123 | log_file += "encoder"; | 123 | log_file += "encoder"; |
| 124 | log_file += "-"; | 124 | log_file += "-"; |
| @@ -26,6 +26,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -26,6 +26,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 26 | #include <stdarg.h> | 26 | #include <stdarg.h> |
| 27 | #include <sys/time.h> | 27 | #include <sys/time.h> |
| 28 | 28 | ||
| 29 | +#include <sys/types.h> | ||
| 30 | +#include <sys/stat.h> | ||
| 31 | +#include <fcntl.h> | ||
| 32 | + | ||
| 33 | +#include <srs_app_config.hpp> | ||
| 34 | + | ||
| 29 | SrsThreadContext::SrsThreadContext() | 35 | SrsThreadContext::SrsThreadContext() |
| 30 | { | 36 | { |
| 31 | } | 37 | } |
| @@ -57,11 +63,18 @@ SrsFastLog::SrsFastLog() | @@ -57,11 +63,18 @@ SrsFastLog::SrsFastLog() | ||
| 57 | { | 63 | { |
| 58 | level = SrsLogLevel::Trace; | 64 | level = SrsLogLevel::Trace; |
| 59 | log_data = new char[LOG_MAX_SIZE]; | 65 | log_data = new char[LOG_MAX_SIZE]; |
| 66 | + | ||
| 67 | + fd = -1; | ||
| 60 | } | 68 | } |
| 61 | 69 | ||
| 62 | SrsFastLog::~SrsFastLog() | 70 | SrsFastLog::~SrsFastLog() |
| 63 | { | 71 | { |
| 64 | srs_freepa(log_data); | 72 | srs_freepa(log_data); |
| 73 | + | ||
| 74 | + if (fd > 0) { | ||
| 75 | + ::close(fd); | ||
| 76 | + fd = -1; | ||
| 77 | + } | ||
| 65 | } | 78 | } |
| 66 | 79 | ||
| 67 | void SrsFastLog::verbose(const char* tag, int context_id, const char* fmt, ...) | 80 | void SrsFastLog::verbose(const char* tag, int context_id, const char* fmt, ...) |
| @@ -229,4 +242,24 @@ void SrsFastLog::write_log(char *str_log, int size, int _level) | @@ -229,4 +242,24 @@ void SrsFastLog::write_log(char *str_log, int size, int _level) | ||
| 229 | } else{ | 242 | } else{ |
| 230 | printf("\033[31m%s\033[0m", str_log); | 243 | printf("\033[31m%s\033[0m", str_log); |
| 231 | } | 244 | } |
| 245 | + | ||
| 246 | + // if specified log file, write log to it. | ||
| 247 | + if (!_srs_config->get_srs_log_file().empty()) { | ||
| 248 | + if (fd < 0) { | ||
| 249 | + std::string filename = _srs_config->get_srs_log_file(); | ||
| 250 | + | ||
| 251 | + fd = ::open(filename.c_str(), O_RDWR | O_APPEND); | ||
| 252 | + | ||
| 253 | + if(fd == -1 && errno == ENOENT) { | ||
| 254 | + fd = open(filename.c_str(), | ||
| 255 | + O_RDWR | O_CREAT | O_TRUNC, | ||
| 256 | + S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | ||
| 257 | + ); | ||
| 258 | + } | ||
| 259 | + } | ||
| 260 | + | ||
| 261 | + if (fd > 0) { | ||
| 262 | + ::write(fd, str_log, size); | ||
| 263 | + } | ||
| 264 | + } | ||
| 232 | } | 265 | } |
| @@ -80,6 +80,8 @@ private: | @@ -80,6 +80,8 @@ private: | ||
| 80 | // defined in SrsLogLevel. | 80 | // defined in SrsLogLevel. |
| 81 | int level; | 81 | int level; |
| 82 | char* log_data; | 82 | char* log_data; |
| 83 | + // log to file if specified srs_log_file | ||
| 84 | + int fd; | ||
| 83 | public: | 85 | public: |
| 84 | SrsFastLog(); | 86 | SrsFastLog(); |
| 85 | virtual ~SrsFastLog(); | 87 | virtual ~SrsFastLog(); |
| @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 31 | // current release version | 31 | // current release version |
| 32 | #define VERSION_MAJOR "0" | 32 | #define VERSION_MAJOR "0" |
| 33 | #define VERSION_MINOR "9" | 33 | #define VERSION_MINOR "9" |
| 34 | -#define VERSION_REVISION "26" | 34 | +#define VERSION_REVISION "27" |
| 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION | 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION |
| 36 | // server info. | 36 | // server info. |
| 37 | #define RTMP_SIG_SRS_KEY "srs" | 37 | #define RTMP_SIG_SRS_KEY "srs" |
-
请 注册 或 登录 后发表评论