打印log 保存log

using UnityEngine;
using System.Collections;
using System.IO;
using System;
using System.Text;

namespace SC.Debuger
{
    /// <summary>
    /// log等级
    /// </summary>
    public enum LogLevel
    {
        None = 0,
        Debug = 1,
        Error = 2,
        Warning = 4,
        Exception = 8,
        All = LogLevel.Debug | LogLevel.Error | LogLevel.Warning | LogLevel.Exception
    }
}

namespace SC.Debuger
{
    public class LogWriter
    {
//        private string m_logPath = Application.persistentDataPath + "/log/";
        private string m_logPath = Environment.CurrentDirectory + "/log/";
        private string m_logFileName = "log_{0}.txt";
        private string m_logFilePath = string.Empty;

        public LogWriter()
        {
            if (!Directory.Exists(m_logPath))
            {
                Directory.CreateDirectory(m_logPath);
            }
            this.m_logFilePath = this.m_logPath + string.Format(this.m_logFileName, DateTime.Today.ToString("yyyyMMdd"));
            Debug.Log (this.m_logFilePath);
        }

        public void ExcuteWrite(string content)
        {
            using (StreamWriter writer = new StreamWriter(m_logFilePath, true, Encoding.UTF8))
            {
                writer.WriteLine(content);
            }
        }
    }
}

namespace SC.Debuger
{
    public class LogHelper
    {
        static public LogLevel m_logLevel = LogLevel.All;
        static LogWriter m_logWriter = new LogWriter();

        static LogHelper()
        {
            Application.logMessageReceived += ProcessExceptionReport;
        }

        private static void ProcessExceptionReport(string message, string stackTrace, LogType type)
        {
            LogLevel dEBUG = LogLevel.Debug;
            switch (type)
            {
            case LogType.Error:
                dEBUG = LogLevel.Error;
                break;
            case LogType.Assert:
                dEBUG = LogLevel.Debug;
                break;
            case LogType.Warning:
                dEBUG = LogLevel.Warning;
                break;
            case LogType.Log:
                dEBUG = LogLevel.Debug;
                break;
            case LogType.Exception:
                dEBUG = LogLevel.Exception;
                break;
            }

            if (dEBUG == (m_logLevel & dEBUG))
            {
                Log(string.Concat(new object[] { " [", dEBUG, "]: ", message, ‘\n‘, stackTrace }));
            }
        }

        /// <summary>
        /// 加上时间戳
        /// </summary>
        /// <param name="message"></param>
        private static void Log(string message)
        {
            string msg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss,fff") + message;
            m_logWriter.ExcuteWrite(msg);
        }

        static public void Log(object message)
        {
            Log(message, null);
        }
        static public void Log(object message, UnityEngine.Object context)
        {
            if (LogLevel.Debug == (m_logLevel & LogLevel.Debug))
            {
                Debug.Log(message, context);
            }
        }
        static public void LogError(object message)
        {
            LogError(message, null);
        }
        static public void LogError(object message, UnityEngine.Object context)
        {
            if (LogLevel.Error == (m_logLevel & LogLevel.Error))
            {
                Debug.LogError(message, context);
            }
        }
        static public void LogWarning(object message)
        {
            LogWarning(message, null);
        }
        static public void LogWarning(object message, UnityEngine.Object context)
        {
            if (LogLevel.Warning == (m_logLevel & LogLevel.Warning))
            {
                Debug.LogWarning(message, context);
            }
        }
    }
}
//游戏上线之前把LogHelper.m_logLevel = LogLevel.None;Log就不显示了。
//LogHelper.m_logLevel = LogLevel.Error;是显示Error。
//LogHelper.m_logLevel = LogLevel.Debug | LogLevel.Error;同时显示Debug和Error。
//private string m_logPath = Environment.CurrentDirectory + "/log/";
//log文件是保存在 private string m_logPath = Application.persistentDataPath + "/log/";在手机上就是沙盒路径。
//log文件是以天为单位,同一天的log会被记录到一个文件里面。

//using UnityEngine;
//using SC.Debuger;
//
//public class Test : MonoBehaviour
//{
//    void Start()
//    {
//        LogHelper.m_logLevel = LogLevel.All;
//        LogHelper.Log("debug");
//        LogHelper.LogError("error");
//        LogHelper.LogWarning("warning");
//
//        GameObject go =  GameObject.Find("fsdfsd");
//        GameObject.Instantiate(go);
//    }
//}
时间: 2024-10-12 16:49:09

打印log 保存log的相关文章

使用真机导致Androidstudio打印不出log

针对真机打印不出log这个问题,我具体的解决方案是这样: 1.你要确保你的Android studio中的菜单栏 ,Tools → Android → Enable ADB Integration这个Adb调试桥是开启的,以及手机USB 调试打开. 2.开启后仍不能打log,我们就要去查看过滤的log配置,看看会不会被我们过滤掉了,或者根本没有在我们当前项目下打印.所以过滤务必要选择自己的包,格式是APP:包名. 3.如此我们还打印不出log,接下来你不用再质疑自己能力或者开发工具有问题,是真机

Android进阶:一、日志打印和保存策略

前言: 项目开始没有做好日志统计工作,每次有问题后端都得找前端对接,严重影响工作效率.最近特地在项目中加上日志保存策略,在此分享,供需要的人学习. 更详细的日志信息 既然决定自定义一个log,那我们就可以让它显示更多的信息,如线程信息:threadId,threadName等: private String getFunctionName() { StackTraceElement[] sts = Thread.currentThread().getStackTrace(); if (sts =

[转]Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法

转自:http://blog.csdn.net/zuolongsnail/article/details/6327129 在调试代码的时候我们需要查看调试信息,那我们就需要用Android Log类. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR. 1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbos

设置每天凌晨3点备份文件/var/log/alternatives.log到tmp文件夹

1.启动rsyslog sudo  service rsyslog start 2.启动crontab sudo cron -f & 3.创建tmp路径 mkdir tmp 4.touch backup.sh 创建脚本 5.chmod -R 777 backup.sh 更改脚本权限 6.vi backup.sh cp /var/log/alternatives.log /home/shiyanlou/tmp/$(date +\%Y-\%m-\%d) 7.编辑crontab crontab -e

Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法

  Android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR.   1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");   2.Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDM

android:分享 一个非常强大的LOG开关---Log.isLoggable

1.API亮点: 此API能够实现不更换APK.在出问题的手机上就直接能抓到有效log,能提升不少工作效率. 2.API介绍 近期在解决短信问题时.看到一个非常强大的LOG开关---Log.isLoggable 1. if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) { 2.     Log.v(TAG, "Creating TransactionService"); 3. } 进入framework中查看isLoggable方法

android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR. 1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时

Android中级教程之----Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR. 1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时

关于Mysql错误:./bin/mysqld_safe --user=mysql&amp; [1] 32710 121003 16:40:22 mysqld_safe Logging to &#39;/var/log/mysqld.log&#39;. 121003 16:40:22 mysqld_s

[[email protected]]# ./bin/mysqld_safe --user=mysql&[1] 32710[[email protected]]# 121003 16:40:22 mysqld_safe Logging to '/var/log/mysqld.log'.121003 16:40:22 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql这些大多是权限的问题因为mysql数据库需要