Beispiel #1
0
    public void Print(ELogLevel level, ELogTag tag, string format, params object[] args)
    {
        if (level < _logLevel)
        {
            return;
        }

        if (_logBitmap[(int)tag] == 0)
        {
            return;
        }

        string content = format;

        try
        {
            content = string.Format(format, args);
        }
        catch (Exception e)
        {
            content = e.ToString();
            level   = ELogLevel.Error;
        }

        {
            string sameStr = content.Substring(0, Mathf.Min(SUPPRESS_LOG_SAMPLE_CHAR_COUNT, content.Length));
            if (string.IsNullOrEmpty(_sameLogStr) || !sameStr.Equals(_sameLogStr))
            {
                _sameLogStr = sameStr;
                _sameLogCnt = 0;
            }
            else
            {
                _sameLogCnt++;
            }

            if (_sameLogCnt == SUPPRESS_LOG_MAX_LINE)
            {
                content = "<ignore duplicate log message>";
            }
            else if (_sameLogCnt > SUPPRESS_LOG_MAX_LINE)
            {
                return;
            }
        }

        LogMessage msg = null;

        if (_logWriter != null)
        {
            msg = _logWriter.GetMessage();
        }

        msg.time    = DateTime.Now;
        msg.level   = level;
        msg.tag     = tag;
        msg.content = content;

        lock (_logStringBuilder)
        {
            if (level >= LogConstant.PRINT_STACK_LEVEL)
            {
                // All print call contains 2 frame which in this file.
                StackTrace   stackTrace  = new StackTrace(2, true);
                StackFrame[] stackFrames = stackTrace.GetFrames();
                msg.stack = stackFrames;

                GetStackStr(_logStringBuilder, msg.stack);
                msg.stackStr = _logStringBuilder.ToString();
            }

            PackMessage(msg, _logStringBuilder);
        }

        // Output Log to file
        if (_logWriter != null)
        {
            _logWriter.AddMessage(msg);
        }

        if (level >= _logLevelConsole)
        {
            // Output Log console.
            PrintMessage(msg);
        }
    }