From 3fc77925fdec344140fbedc3edc8d8ab28ca0de4 Mon Sep 17 00:00:00 2001 From: Mr-Dave Date: Sat, 20 Jul 2024 20:51:24 -0600 Subject: [PATCH] Revise to add cls_log --- src/alg_sec.cpp | 2 +- src/conf.cpp | 12 +- src/libcam.cpp | 268 +++++++++++++------------- src/logger.cpp | 454 +++++++++++++++++++------------------------- src/logger.hpp | 37 +++- src/motion_loop.cpp | 5 - src/motionplus.cpp | 23 +-- src/motionplus.hpp | 3 +- 8 files changed, 380 insertions(+), 424 deletions(-) diff --git a/src/alg_sec.cpp b/src/alg_sec.cpp index 369dae2c..3e66cea0 100644 --- a/src/alg_sec.cpp +++ b/src/alg_sec.cpp @@ -425,7 +425,7 @@ static void algsec_params_log(ctx_dev *cam) if (algmdl->method != "none") { for (it = lst->begin(); it != lst->end(); it++) { - motpls_log(INF, TYPE_ALL, NO_ERRNO,0, NULL, "%-25s %s" + MOTPLS_SHT(INF, TYPE_ALL, NO_ERRNO, "%-25s %s" ,it->param_name.c_str(), it->param_value.c_str()); } } diff --git a/src/conf.cpp b/src/conf.cpp index 67a0a362..f62bc7fd 100644 --- a/src/conf.cpp +++ b/src/conf.cpp @@ -3909,15 +3909,15 @@ void conf_parms_log_parm(std::string parm_nm, std::string parm_vl) (parm_nm == "database_user") || (parm_nm == "database_password")) { - motpls_log(INF, TYPE_ALL, NO_ERRNO, 0, NULL + MOTPLS_SHT(INF, TYPE_ALL, NO_ERRNO ,_("%-25s "), parm_nm.c_str()); } else { if ((parm_nm.compare(0,4,"text") == 0) || (parm_vl.compare(0,1, " ") != 0)) { - motpls_log(INF, TYPE_ALL, NO_ERRNO,0, NULL + MOTPLS_SHT(INF, TYPE_ALL, NO_ERRNO , "%-25s %s", parm_nm.c_str(), parm_vl.c_str()); } else { - motpls_log(INF, TYPE_ALL, NO_ERRNO, 0, NULL + MOTPLS_SHT(INF, TYPE_ALL, NO_ERRNO , "%-25s \"%s\"", parm_nm.c_str(), parm_vl.c_str()); } } @@ -3937,7 +3937,7 @@ void conf_parms_log(ctx_motapp *motapp) MOTPLS_LOG(INF, TYPE_ALL, NO_ERRNO ,_("Logging configuration parameters from all files")); - motpls_log(INF, TYPE_ALL, NO_ERRNO,0, NULL + MOTPLS_SHT(INF, TYPE_ALL, NO_ERRNO , _("Config file: %s"), motapp->conf->conf_filename.c_str()); i = 0; @@ -3962,7 +3962,7 @@ void conf_parms_log(ctx_motapp *motapp) } for (indx=0; indxcam_cnt; indx++) { - motpls_log(INF, TYPE_ALL, NO_ERRNO, 0, NULL + MOTPLS_SHT(INF, TYPE_ALL, NO_ERRNO , _("Camera %d - Config file: %s") , motapp->cam_list[indx]->conf->device_id , motapp->cam_list[indx]->conf->conf_filename.c_str()); @@ -3989,7 +3989,7 @@ void conf_parms_log(ctx_motapp *motapp) } for (indx=0; indxsnd_cnt; indx++) { - motpls_log(INF, TYPE_ALL, NO_ERRNO, 0, NULL + MOTPLS_SHT(INF, TYPE_ALL, NO_ERRNO , _("Sound %d - Config file: %s") , motapp->snd_list[indx]->conf->device_id , motapp->snd_list[indx]->conf->conf_filename.c_str()); diff --git a/src/libcam.cpp b/src/libcam.cpp index baa39dd0..cb4b0302 100644 --- a/src/libcam.cpp +++ b/src/libcam.cpp @@ -41,15 +41,15 @@ using namespace libcamera; void cls_libcam::cam_log_orientation() { #if (LIBCAMVER >= 2000) - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, "Libcamera Orientation Options:"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Rotate0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Rotate0Mirror"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Rotate180"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Rotate180Mirror"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Rotate90"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Rotate90Mirror"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Rotate270"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Rotate270Mirror"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, "Libcamera Orientation Options:"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Rotate0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Rotate0Mirror"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Rotate180"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Rotate180Mirror"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Rotate90"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Rotate90Mirror"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Rotate270"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Rotate270Mirror"); #else MOTPLS_LOG(NTC, TYPE_VIDEO, NO_ERRNO, "Orientation Not available"); #endif @@ -59,163 +59,163 @@ void cls_libcam::cam_log_orientation() void cls_libcam::cam_log_controls() { - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, "Libcamera Controls:"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, "Libcamera Controls:"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeEnable(bool)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeLocked(bool)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeEnable(bool)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeLocked(bool)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeMeteringMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " MeteringCentreWeighted = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " MeteringSpot = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " MeteringMatrix = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " MeteringCustom = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeMeteringMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " MeteringCentreWeighted = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " MeteringSpot = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " MeteringMatrix = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " MeteringCustom = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeConstraintMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ConstraintNormal = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ConstraintHighlight = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ConstraintShadows = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ConstraintCustom = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeConstraintMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ConstraintNormal = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ConstraintHighlight = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ConstraintShadows = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ConstraintCustom = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeExposureMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ExposureNormal = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ExposureShort = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ExposureLong = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ExposureCustom = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeExposureMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ExposureNormal = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ExposureShort = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ExposureLong = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ExposureCustom = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ExposureValue(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ExposureTime(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AnalogueGain(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Brightness(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Contrast(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Lux(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbEnable(bool)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ExposureValue(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ExposureTime(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AnalogueGain(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Brightness(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Contrast(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Lux(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbEnable(bool)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbAuto = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbIncandescent = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbTungsten = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbFluorescent = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbIndoor = 4"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbDaylight = 5"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbCloudy = 6"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbCustom = 7"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbAuto = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbIncandescent = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbTungsten = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbFluorescent = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbIndoor = 4"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbDaylight = 5"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbCloudy = 6"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbCustom = 7"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbLocked(bool)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ColourGains(Pipe delimited)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Red | Blue"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ColourTemperature(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Saturation(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " SensorBlackLevels(Pipe delimited)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " var1|var2|var3|var4"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " Sharpness(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " FocusFoM(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ColourCorrectionMatrix(Pipe delimited)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " var1|var2|...|var8|var9"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ScalerCrop(Pipe delimited)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " x | y | h | w"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " DigitalGain(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " FrameDuration(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " FrameDurationLimits(Pipe delimited)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " min | max"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " SensorTemperature(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " SensorTimestamp(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbLocked(bool)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ColourGains(Pipe delimited)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Red | Blue"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ColourTemperature(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Saturation(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " SensorBlackLevels(Pipe delimited)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " var1|var2|var3|var4"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " Sharpness(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " FocusFoM(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ColourCorrectionMatrix(Pipe delimited)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " var1|var2|...|var8|var9"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ScalerCrop(Pipe delimited)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " x | y | h | w"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " DigitalGain(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " FrameDuration(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " FrameDurationLimits(Pipe delimited)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " min | max"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " SensorTemperature(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " SensorTimestamp(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfModeManual = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfModeAuto = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfModeContinuous = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfModeManual = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfModeAuto = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfModeContinuous = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfRange(0-2)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfRangeNormal = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfRangeMacro = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfRangeFull = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfRange(0-2)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfRangeNormal = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfRangeMacro = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfRangeFull = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfSpeed(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfSpeedNormal = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfSpeedFast = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfSpeed(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfSpeedNormal = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfSpeedFast = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfMetering(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfMeteringAuto = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfMeteringWindows = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfMetering(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfMeteringAuto = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfMeteringWindows = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfWindows(Pipe delimited)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " x | y | h | w"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfWindows(Pipe delimited)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " x | y | h | w"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfTrigger(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfTriggerStart = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfTriggerCancel = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfTrigger(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfTriggerStart = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfTriggerCancel = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfPause(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfPauseImmediate = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfPauseDeferred = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfPauseResume = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfPause(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfPauseImmediate = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfPauseDeferred = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfPauseResume = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " LensPosition(float)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " LensPosition(float)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfState(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfStateIdle = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfStateScanning = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfStateFocused = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfStateFailed = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfState(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfStateIdle = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfStateScanning = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfStateFocused = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfStateFailed = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfPauseState(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfPauseStateRunning = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfPauseStatePausing = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AfPauseStatePaused = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfPauseState(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfPauseStateRunning = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfPauseStatePausing = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AfPauseStatePaused = 2"); } void cls_libcam:: cam_log_draft() { - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, "Libcamera Controls Draft:"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, "Libcamera Controls Draft:"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AePrecaptureTrigger(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AePrecaptureTriggerIdle = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AePrecaptureTriggerStart = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AePrecaptureTriggerCancel = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AePrecaptureTrigger(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AePrecaptureTriggerIdle = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AePrecaptureTriggerStart = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AePrecaptureTriggerCancel = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " NoiseReductionMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " NoiseReductionModeOff = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " NoiseReductionModeFast = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " NoiseReductionModeHighQuality = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " NoiseReductionModeMinimal = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " NoiseReductionModeZSL = 4"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " NoiseReductionMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " NoiseReductionModeOff = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " NoiseReductionModeFast = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " NoiseReductionModeHighQuality = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " NoiseReductionModeMinimal = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " NoiseReductionModeZSL = 4"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ColorCorrectionAberrationMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ColorCorrectionAberrationOff = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ColorCorrectionAberrationFast = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " ColorCorrectionAberrationHighQuality = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ColorCorrectionAberrationMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ColorCorrectionAberrationOff = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ColorCorrectionAberrationFast = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " ColorCorrectionAberrationHighQuality = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeState(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeStateSearching = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeStateConverged = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeStateLocked = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeStateFlashRequired = 4"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AeStatePrecapture = 5"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeState(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeStateSearching = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeStateConverged = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeStateLocked = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeStateFlashRequired = 4"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AeStatePrecapture = 5"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbState(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbStateInactive = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbStateSearching = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbConverged = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " AwbLocked = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbState(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbStateInactive = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbStateSearching = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbConverged = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " AwbLocked = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " SensorRollingShutterSkew(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " SensorRollingShutterSkew(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " LensShadingMapMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " LensShadingMapModeOff = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " LensShadingMapModeOn = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " LensShadingMapMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " LensShadingMapModeOff = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " LensShadingMapModeOn = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " PipelineDepth(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " PipelineDepth(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " MaxLatency(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " MaxLatency(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " TestPatternMode(int)"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " TestPatternModeOff = 0"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " TestPatternModeSolidColor = 1"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " TestPatternModeColorBars = 2"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " TestPatternModeColorBarsFadeToGray = 3"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " TestPatternModePn9 = 4"); - motpls_log(DBG, TYPE_VIDEO, NO_ERRNO,0,NULL, " TestPatternModeCustom1 = 256"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " TestPatternMode(int)"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " TestPatternModeOff = 0"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " TestPatternModeSolidColor = 1"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " TestPatternModeColorBars = 2"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " TestPatternModeColorBarsFadeToGray = 3"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " TestPatternModePn9 = 4"); + MOTPLS_SHT(DBG, TYPE_VIDEO, NO_ERRNO, " TestPatternModeCustom1 = 256"); } diff --git a/src/logger.cpp b/src/logger.cpp index c1384b85..23043dcd 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -19,302 +19,248 @@ #include "conf.hpp" #include "util.hpp" #include "logger.hpp" -#include -#include -static int log_mode = LOGMODE_SYSLOG; -static FILE *logfile = NULL; -static int log_level = LEVEL_DEFAULT; -static int log_type = TYPE_DEFAULT; +cls_log *motlog; -static const char *log_type_str[] = {NULL, "COR", "STR", "ENC", "NET", "DBS", "EVT", "TRK", "VID", "ALL"}; -static const char *log_level_str[] = {NULL, "EMG", "ALR", "CRT", "ERR", "WRN", "NTC", "INF", "DBG", "ALL"}; -static ctx_motapp *log_motapp; /*Used to access the parms mutex for updates*/ +const char *log_type_str[] = {NULL, "COR", "STR", "ENC", "NET", "DBS", "EVT", "TRK", "VID", "ALL"}; +const char *log_level_str[] = {NULL, "EMG", "ALR", "CRT", "ERR", "WRN", "NTC", "INF", "DBG", "ALL"}; -/** Returns index of log type or 0 if not valid type. */ -static int log_get_type(const char *type) +void ff_log(void *var1, int errnbr, const char *fmt, va_list vlist) { - unsigned int i, ret = 0; - unsigned int maxtype = sizeof(log_type_str)/sizeof(const char *); + (void)var1; + char buff[1024]; + int fflvl; - for (i = 1;i < maxtype; i++) { - if (!strncasecmp(type, log_type_str[i], 3)) { - ret = i; - break; - } - } + vsnprintf(buff, sizeof(buff), fmt, vlist); - return ret; -} + buff[strlen(buff)-1] = 0; -void log_set_type(const char *new_logtype) -{ - - if ( mystreq(new_logtype, log_type_str[log_type]) ) { + if (strstr(buff, "forced frame type") != nullptr) { return; } - pthread_mutex_lock(&log_motapp->mutex_parms); - log_type = log_get_type(new_logtype); - pthread_mutex_unlock(&log_motapp->mutex_parms); + /* + AV_LOG_QUIET -8 1 + AV_LOG_PANIC 0 2 + AV_LOG_FATAL 8 3 + AV_LOG_ERROR 16 4 + AV_LOG_WARNING 24 5 + AV_LOG_INFO 32 6 + AV_LOG_VERBOSE 40 7 + AV_LOG_DEBUG 48 8 + AV_LOG_TRACE 56 9 + */ -} + fflvl = ((motlog->log_fflevel -2) * 8); -void log_set_level(int new_loglevel) -{ - - if (new_loglevel == log_level) { - return; - } - - pthread_mutex_lock(&log_motapp->mutex_parms); - log_level = new_loglevel; - pthread_mutex_unlock(&log_motapp->mutex_parms); - -} - -/** Sets mode of logging, could be using syslog or files. */ -static void log_set_mode(int mode) -{ - int prev_mode = log_mode; - - log_mode = mode; - - if (mode == LOGMODE_SYSLOG && prev_mode != LOGMODE_SYSLOG) { - openlog("motionplus", LOG_PID, LOG_USER); - } - - if (mode != LOGMODE_SYSLOG && prev_mode == LOGMODE_SYSLOG) { - closelog(); + if (errnbr < fflvl) { + MOTPLS_LOG(INF, TYPE_ALL, NO_ERRNO,"%s",buff ); } } -/** Sets logfile to be used instead of syslog. */ -static void log_set_logfile(const char *logfile_name) +void cls_log::write_flood(int loglvl) { - /* Setup temporary to let log if myfopen fails */ - log_set_mode(LOGMODE_SYSLOG); - - logfile = myfopen(logfile_name, "ae"); - - /* If logfile was opened correctly */ - if (logfile) { - log_set_mode(LOGMODE_FILE); - } - - return; -} - -/** Return string with human readable time */ -static char *str_time(void) -{ - static char buffer[16]; - time_t now = 0; - - now = time(0); - strftime(buffer, 16, "%b %d %H:%M:%S", localtime(&now)); - return buffer; -} - -/** - * This routine is used for printing all informational, debug or error - * messages produced by any of the other motionplus functions. - */ -void motpls_log(int msg_level, int msg_type, int msg_err, int msg_fnc, const char *msg_fncnm, ...) -{ - int errno_save, n, prefixlen, timelen; - char buf[1024]= {0}; - char usrfmt[1024]= {0}; - char msg_buf[100]= {0}; - - va_list ap; - unsigned long threadnr; - - static int flood_cnt = 0; - static char flood_msg[1024]; - static char prefix_msg[512]; char flood_repeats[1024]; - char threadname[32]; - int applvl, apptyp; - pthread_mutex_lock(&log_motapp->mutex_parms); - applvl = log_level; - apptyp = log_type; - pthread_mutex_unlock(&log_motapp->mutex_parms); - - /*Exit if not our level or type */ - if (msg_level > applvl) { - return; - } - if ((apptyp != TYPE_ALL) && (apptyp != msg_type)) { + if (flood_cnt <= 1) { return; } - threadnr = (unsigned long)pthread_getspecific(tls_key_threadnr); - - snprintf(buf, sizeof(buf), "%s",""); - n = 0; - errno_save = errno; - mythreadname_get(threadname); + snprintf(flood_repeats, sizeof(flood_repeats) + , "%s Above message repeats %d times\n" + , msg_prefix, flood_cnt-1); if (log_mode == LOGMODE_FILE) { - n = snprintf(buf, sizeof(buf), "%s [%s][%s][%02ld:%s] " - , str_time(), log_level_str[msg_level], log_type_str[msg_type] - , threadnr, threadname ); - timelen = 16; + fputs(flood_repeats, log_file_ptr); + fflush(log_file_ptr); + + } else { /* The syslog level values are one less*/ + syslog(loglvl-1, "%s", flood_repeats); + fputs(flood_repeats, stderr); + fflush(stderr); + } +} + +void cls_log::write_norm(int loglvl, int prefixlen) +{ + flood_cnt = 1; + + snprintf(msg_flood, sizeof(msg_flood) + , "%s", &msg_full[prefixlen]); + + snprintf(msg_prefix, prefixlen, "%s", msg_full); + + if (log_mode == LOGMODE_FILE) { + strcpy(msg_full + strlen(msg_full),"\n"); + fputs(msg_full, log_file_ptr); + fflush(log_file_ptr); } else { - n = snprintf(buf, sizeof(buf), "[%s][%s][%02ld:%s] " - , log_level_str[msg_level], log_type_str[msg_type] - , threadnr, threadname ); - timelen = 0; + syslog(loglvl-1, "%s", msg_full); + strcpy(msg_full + strlen(msg_full),"\n"); + fputs(msg_full, stderr); + fflush(stderr); + } +} + +void cls_log::add_errmsg(int flgerr, int err_save) +{ + size_t errsz, msgsz; + char err_buf[90]; + + if (flgerr == NO_ERRNO) { + return; + } + + memset(err_buf, 0, sizeof(err_buf)); + strerror_r(err_save, err_buf, sizeof(err_buf)); + errsz = strlen(err_buf); + msgsz = strlen(msg_full); + + if ((msgsz+errsz+2) >= sizeof(msg_full)) { + msgsz = msgsz-errsz-2; + memset(msg_full+msgsz, 0, sizeof(msg_full) - msgsz); + } + strcpy(msg_full+msgsz,": "); + memcpy(msg_full+msgsz + 2, err_buf, errsz); + +} + +void cls_log::set_mode(int mode_new) +{ + if ((log_mode != LOGMODE_SYSLOG) && (mode_new == LOGMODE_SYSLOG)) { + openlog("restream", LOG_PID, LOG_USER); + } + if ((log_mode == LOGMODE_SYSLOG) && (mode_new != LOGMODE_SYSLOG)) { + closelog(); + } + log_mode = mode_new; +} + +void cls_log::set_log_file(std::string pname) +{ + if ((pname == "") || (pname == "syslog")) { + if (log_file_ptr != nullptr) { + myfclose(log_file_ptr); + log_file_ptr = nullptr; + } + if (log_file_name == "") { + set_mode(LOGMODE_SYSLOG); + log_file_name == "syslog"; + MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO, "Logging to syslog"); + } + + } else if ((pname != log_file_name) || (log_file_ptr == nullptr)) { + if (log_file_ptr != nullptr) { + myfclose(log_file_ptr); + log_file_ptr = nullptr; + } + log_file_ptr = myfopen(pname.c_str(), "ae"); + if (log_file_ptr != nullptr) { + log_file_name = pname; + set_mode(LOGMODE_SYSLOG); + MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO, "Logging to file (%s)" + ,pname.c_str()); + set_mode(LOGMODE_FILE); + } else { + log_file_name = "syslog"; + set_mode(LOGMODE_SYSLOG); + MOTPLS_LOG(EMG, TYPE_ALL, SHOW_ERRNO, "Cannot create log file %s" + , pname.c_str()); + } + } +} + +void cls_log::write_msg(int loglvl, int msg_type, int flgerr, bool flgfnc, ...) +{ + int err_save, n, prefixlen; + std::string usrfmt; + char msg_time[32]; + char threadname[32]; + va_list ap; + time_t now; + + if (loglvl > log_level) { + return; + } + + pthread_mutex_lock(&mtx); + + err_save = errno; + memset(msg_full, 0, sizeof(msg_full)); + + mythreadname_get(threadname); + + now = time(NULL); + strftime(msg_time, sizeof(msg_time) + , "%b %d %H:%M:%S", localtime(&now)); + + if (log_mode == LOGMODE_FILE) { + n = snprintf(msg_full, sizeof(msg_full) + , "%s [%s][%s][%s] ", msg_time + , log_level_str[loglvl],log_type_str[msg_type], threadname ); + } else { + n = snprintf(msg_full, sizeof(msg_full) + , "[%s][%s][%s] " + , log_level_str[loglvl],log_type_str[msg_type], threadname ); } prefixlen = n; - /* Prepend the format specifier for the function name */ - - va_start(ap, msg_fncnm); - if (msg_fnc) { - prefixlen += (int)strlen(msg_fncnm)+2; - snprintf(usrfmt, sizeof (usrfmt),"%s:%s", msg_fncnm, va_arg(ap, char *)); - } else { - snprintf(usrfmt, sizeof (usrfmt),"%s", va_arg(ap, char *)); - } - n += vsnprintf(buf + n, sizeof(buf) - n, usrfmt, ap); + va_start(ap, flgfnc); + usrfmt = va_arg(ap, char *); + if (flgfnc) { + usrfmt.append(": ").append(va_arg(ap, char *)); + } + n += vsnprintf(msg_full + n, sizeof(msg_full)-n-1, usrfmt.c_str(), ap); va_end(ap); - buf[1023] = '\0'; - /* If msg_err is set, add on the library error message. */ - if (msg_err) { - size_t buf_len = strlen(buf); - // just knock off 10 characters if we're that close... - if (buf_len + 10 > 1024) { - buf[1024 - 10] = '\0'; - buf_len = 1024 - 10; - } - strncat(buf, ": ", 1024 - buf_len); - n += 2; - #if defined(XSI_STRERROR_R) - /* XSI-compliant strerror_r() */ - strerror_r(errno_save, buf + n, sizeof(buf) - n); /* 2 for the ': ' */ - (void)msg_buf; - #else - /* GNU-specific strerror_r() */ - strncat(buf, strerror_r(errno_save, msg_buf, sizeof(msg_buf)), 1024 - strlen(buf)); - #endif - } + add_errmsg(flgerr, err_save); - if ((mystreq(&buf[timelen], flood_msg)) && (flood_cnt <= 5000)) { + if ((flood_cnt <= 5000) && + mystreq(msg_flood, &msg_full[prefixlen])) { flood_cnt++; - } else { - if (flood_cnt > 1) { - snprintf(flood_repeats, 1024 - , "%s Above message repeats %d times" - , prefix_msg, flood_cnt-1); - switch (log_mode) { - case LOGMODE_FILE: - strncat(flood_repeats, "\n", 1024 - strlen(flood_repeats)); - fputs(flood_repeats, logfile); - fflush(logfile); - break; - - case LOGMODE_SYSLOG: - /* The syslog level values are one less than the motionplus numeric values*/ - syslog(msg_level-1, "%s", flood_repeats); - strncat(flood_repeats, "\n", 1024 - strlen(flood_repeats)); - fputs(flood_repeats, stderr); - fflush(stderr); - break; - } - } - flood_cnt = 1; - snprintf(flood_msg, 1024, "%s", &buf[timelen]); - snprintf(prefix_msg, prefixlen, "%s", buf); - switch (log_mode) { - case LOGMODE_FILE: - strncat(buf, "\n", 1024 - strlen(buf)); - fputs(buf, logfile); - fflush(logfile); - break; - - case LOGMODE_SYSLOG: - /* The syslog level values are one less than the motionplus numeric values*/ - syslog(msg_level-1, "%s", buf); - strncat(buf, "\n", 1024 - strlen(buf)); - fputs(buf, stderr); - fflush(stderr); - break; - } + pthread_mutex_unlock(&mtx); + return; } + write_flood(loglvl); + + write_norm(loglvl, prefixlen); + + pthread_mutex_unlock(&mtx); + } -void log_init(ctx_motapp *motapp) +void cls_log::log_stop() { - - if ((motapp->conf->log_level > ALL) || - (motapp->conf->log_level == 0)) { - motapp->conf->log_level = LEVEL_DEFAULT; - MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO - ,_("Using default log level (%s) (%d)") - ,log_level_str[motapp->conf->log_level] - ,motapp->conf->log_level); + if (log_file_ptr != nullptr) { + MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO, "Closing log_file (%s)." + , log_file_name.c_str()); + myfclose(log_file_ptr); + log_file_ptr = nullptr; } - - - if (motapp->conf->log_file != "") { - if (motapp->conf->log_file != "syslog") { - log_set_mode(LOGMODE_FILE); - log_set_logfile(motapp->conf->log_file.c_str()); - if (logfile) { - log_set_mode(LOGMODE_SYSLOG); - MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO - , _("Logging to file (%s)") - , motapp->conf->log_file.c_str()); - log_set_mode(LOGMODE_FILE); - } else { - MOTPLS_LOG(EMG, TYPE_ALL, SHOW_ERRNO - , _("Exit MotionPlus, cannot create log file %s") - , motapp->conf->log_file.c_str()); - exit(0); - } - } else { - MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO, _("Logging to syslog")); - } - } else { - MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO, _("Logging to syslog")); - } - MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO, "MotionPlus %s started",VERSION); - - motapp->conf->log_type = log_get_type(motapp->conf->log_type_str.c_str()); - - MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO - , _("Using log type (%s) log level (%s)") - , log_type_str[motapp->conf->log_type] - , log_level_str[motapp->conf->log_level]); - - log_set_level(motapp->conf->log_level); - log_type = motapp->conf->log_type; - } -void log_deinit(ctx_motapp *motapp) +cls_log::cls_log(ctx_motapp *p_motapp) { + c_motapp = p_motapp; + log_mode = LOGMODE_NONE; + log_level = LEVEL_DEFAULT; + log_file_ptr = nullptr; + log_file_name = ""; + flood_cnt = 0; + set_mode(LOGMODE_SYSLOG); + pthread_mutex_init(&mtx, NULL); + memset(msg_prefix,0,sizeof(msg_prefix)); + memset(msg_flood,0,sizeof(msg_flood)); + memset(msg_full,0,sizeof(msg_full)); - if (logfile != NULL) { - MOTPLS_LOG(NTC, TYPE_ALL, NO_ERRNO - , _("Closing logfile (%s).") - , motapp->conf->log_file.c_str()); - myfclose(logfile); - log_set_mode(LOGMODE_NONE); - logfile = NULL; - } - + av_log_set_callback(ff_log); } -/* Set the static motapp pointer in logger module */ -void log_init_app(ctx_motapp *motapp) +cls_log::~cls_log() { - /* Need better design to avoid the need to do this. Extern motapp to whole app? */ - log_motapp = motapp; /* Set our static pointer used for locking parms mutex*/ + log_stop(); + pthread_mutex_destroy(&mtx); +} + -} \ No newline at end of file diff --git a/src/logger.hpp b/src/logger.hpp index c81dbed5..551ba858 100644 --- a/src/logger.hpp +++ b/src/logger.hpp @@ -17,8 +17,8 @@ */ #ifndef _INCLUDE_LOGGER_HPP_ #define _INCLUDE_LOGGER_HPP_ + extern cls_log *motlog; - /* Logging mode */ #define LOGMODE_NONE 0 /* No logging */ #define LOGMODE_FILE 1 /* Log messages to file */ #define LOGMODE_SYSLOG 2 /* Log messages to syslog */ @@ -26,7 +26,6 @@ #define NO_ERRNO 0 /* Flag to avoid how message associated to errno */ #define SHOW_ERRNO 1 /* Flag to show message associated to errno */ - /* Log levels */ #define LOG_ALL 9 #define EMG 1 #define ALR 2 @@ -52,14 +51,34 @@ #define TYPE_DEFAULT TYPE_ALL /* Default type */ #define TYPE_DEFAULT_STR "ALL" /* Default name logs */ - #define MOTPLS_LOG(x, y, z, ...) motpls_log(x, y, z, 1, __FUNCTION__, __VA_ARGS__) + #define MOTPLS_LOG(x, y, z, ...) motlog->write_msg(x, y, z, true, __FUNCTION__, __VA_ARGS__) + #define MOTPLS_SHT(x, y, z, ...) motlog->write_msg(x, y, z, false, __VA_ARGS__) - void motpls_log(int msg_level, int msg_type, int msg_err, int msg_fnc, const char *msg_fncnm, ...); + class cls_log { + public: + cls_log(ctx_motapp *p_motapp); + ~cls_log(); + int log_level; + int log_fflevel; + void set_log_file(std::string pname); + void write_msg(int loglvl, int msg_type, int flgerr, bool flgfnc, ...); + private: + ctx_motapp *c_motapp; + pthread_mutex_t mtx; + int log_mode; + FILE *log_file_ptr; + std::string log_file_name; + char msg_prefix[512]; + char msg_flood[1024]; + char msg_full[1024]; + int flood_cnt; + void set_mode(int mode); + void write_flood(int loglvl); + void write_norm(int loglvl, int prefixlen); + void add_errmsg(int flgerr, int err_save); + void log_stop(); + + }; - void log_init(ctx_motapp *motapp); - void log_deinit(ctx_motapp *motapp); - void log_set_level(int new_level); - void log_set_type(const char *new_logtype); - void log_init_app(ctx_motapp *motapp); #endif /* _INCLUDE_LOGGER_HPP_ */ diff --git a/src/motion_loop.cpp b/src/motion_loop.cpp index dc2c01cb..729f419f 100644 --- a/src/motion_loop.cpp +++ b/src/motion_loop.cpp @@ -1367,11 +1367,6 @@ static void mlp_parmsupdate(ctx_dev *cam) cam->parms_changed = false; } - if (cam->motapp->parms_changed) { - log_set_level(cam->motapp->conf->log_level); - log_set_type(cam->motapp->conf->log_type_str.c_str()); - cam->motapp->parms_changed = false; - } } /* sleep the loop to get framerate requested */ diff --git a/src/motionplus.cpp b/src/motionplus.cpp index a4ec7bad..9ba5a596 100644 --- a/src/motionplus.cpp +++ b/src/motionplus.cpp @@ -316,15 +316,7 @@ void motpls_av_init(void) void motpls_av_deinit(void) { - avformat_network_deinit(); - -} - -/* Free the all_img items*/ -static void motpls_allcams_deinit(ctx_motapp *motapp) -{ - delete motapp->all_sizes; } /* Validate or set the position on the all cameras image*/ @@ -499,8 +491,6 @@ static void motpls_shutdown(ctx_motapp *motapp) { motpls_pid_remove(motapp); - log_deinit(motapp); - delete motapp->webu; dbse_deinit(motapp); @@ -510,7 +500,10 @@ static void motpls_shutdown(ctx_motapp *motapp) delete motapp->conf; motapp->conf = nullptr;; - motpls_allcams_deinit(motapp); + delete motlog; + motlog = nullptr; + + delete motapp->all_sizes; } @@ -639,13 +632,15 @@ static void motpls_ntc(void) /** Initialize upon start up or restart */ static void motpls_startup(ctx_motapp *motapp, int daemonize) { - log_init_app(motapp); /* This is needed prior to any function possibly calling motion_log*/ - motapp->conf = new ctx_config; + motlog = new cls_log(motapp); + conf_init(motapp); - log_init(motapp); + motlog->log_level = motapp->conf->log_level; + motlog->log_fflevel = 3; + motlog->set_log_file(motapp->conf->log_file); mytranslate_init(); diff --git a/src/motionplus.hpp b/src/motionplus.hpp index b280d07b..4595251c 100644 --- a/src/motionplus.hpp +++ b/src/motionplus.hpp @@ -25,6 +25,7 @@ #include #include #include +#include #ifndef __USE_GNU #define __USE_GNU #endif @@ -111,7 +112,6 @@ } #endif -/* Forward declarations, used in functional definitions of headers */ struct ctx_motapp; struct ctx_images; @@ -120,6 +120,7 @@ struct ctx_dbse; struct ctx_algsec; struct ctx_config; +class cls_log; class cls_movie; class cls_netcam; class cls_picture;