diff options
author | megamage <none@none> | 2009-03-23 20:09:55 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-23 20:09:55 -0600 |
commit | 04b27302b0bde197bd78f84ba77f0736a48f152f (patch) | |
tree | d69ed3646e1ab129842fc830ae8cb9740945e93d /src | |
parent | 84d0aae7fcc33cd1eb19bdb9f56c9a8014d0f759 (diff) |
*Add new log level "crash alarm" to record very dangerous errors.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/MotionMaster.cpp | 2 | ||||
-rw-r--r-- | src/shared/Log.cpp | 40 | ||||
-rw-r--r-- | src/shared/Log.h | 2 |
3 files changed, 43 insertions, 1 deletions
diff --git a/src/game/MotionMaster.cpp b/src/game/MotionMaster.cpp index 8d26348c85e..6dcf2d0e214 100644 --- a/src/game/MotionMaster.cpp +++ b/src/game/MotionMaster.cpp @@ -515,7 +515,7 @@ void MotionMaster::DirectDelete(_Ty curr) void MotionMaster::DelayedDelete(_Ty curr) { - sLog.outError("CRASH ALARM! Unit (Entry %u) is trying to delete its updating MG (Type %u)!", i_owner->GetEntry(), curr->GetMovementGeneratorType()); + sLog.outCrash("Unit (Entry %u) is trying to delete its updating MG (Type %u)!", i_owner->GetEntry(), curr->GetMovementGeneratorType()); if(isStatic(curr)) return; if(!m_expList) diff --git a/src/shared/Log.cpp b/src/shared/Log.cpp index d0171a523fe..e443d10ed6c 100644 --- a/src/shared/Log.cpp +++ b/src/shared/Log.cpp @@ -402,6 +402,46 @@ void Log::outString( const char * str, ... ) fflush(stdout); } +void Log::outCrash( const char * err, ... ) +{ + if( !err ) + return; + + if (m_enableLogDB) + { + va_list ap2; + va_start(ap2, err); + char nnew_str[MAX_QUERY_LEN]; + vsnprintf(nnew_str, MAX_QUERY_LEN, err, ap2); + outDB(LOG_TYPE_CRASH, nnew_str); + va_end(ap2); + } + + if(m_colored) + SetColor(false,RED); + + UTF8PRINTF(stderr,err,); + + if(m_colored) + ResetColor(false); + + fprintf( stderr, "\n" ); + if(logfile) + { + outTimestamp(logfile); + fprintf(logfile, "CRASH ALARM:" ); + + va_list ap; + va_start(ap, err); + vfprintf(logfile, err, ap); + va_end(ap); + + fprintf(logfile, "\n" ); + fflush(logfile); + } + fflush(stderr); +} + void Log::outError( const char * err, ... ) { if( !err ) diff --git a/src/shared/Log.h b/src/shared/Log.h index dc34f3d585c..ecca9587b0e 100644 --- a/src/shared/Log.h +++ b/src/shared/Log.h @@ -47,6 +47,7 @@ enum LogTypes LOG_TYPE_RA = 7, LOG_TYPE_GM = 8, LOG_TYPE_PACKET = 9, + LOG_TYPE_CRASH = 10, MAX_LOG_TYPES }; @@ -97,6 +98,7 @@ class Log : public Trinity::Singleton<Log, Trinity::ClassLevelLockable<Log, ZThr void outDB( uint8 type, const char * str, ... ) ATTR_PRINTF(3,4); void outString( const char * str, ... ) ATTR_PRINTF(2,3); void outError( const char * err, ... ) ATTR_PRINTF(2,3); + void outCrash( const char * err, ... ) ATTR_PRINTF(2,3); void outBasic( const char * str, ... ) ATTR_PRINTF(2,3); void outDetail( const char * str, ... ) ATTR_PRINTF(2,3); void outDebug( const char * str, ... ) ATTR_PRINTF(2,3); |