using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace TestExpressionLambda
{
    public class Logger
    {
        /// <summary>
        /// 默认路径
        /// </summary>
        public static readonly string RootPath = AppDomain.CurrentDomain.BaseDirectory + "log";

/// <summary>
        /// 默认文件名格式
        /// </summary>
        public static readonly string FileFormat = DateTime.Now.ToString("yyyy-MM-dd") + ".log";

public static readonly string LogFile = RootPath.TrimEnd('\\') + "\\" + FileFormat;

/// <summary>
        /// 默认Trace监听
        /// </summary>
        public static MyTraceListener traceListener ;

/// <summary>
        /// 静态实例
        /// </summary>
        private static readonly Logger instance = new Logger();
        static Logger()
        {
            if (!Directory.Exists(RootPath))
            {
                Directory.CreateDirectory(RootPath);
            }

if (!File.Exists(LogFile))
            {
                File.Create(LogFile).Close();
            }
            traceListener = new MyTraceListener(LogFile);
            Trace.Listeners.Clear();
            Trace.Listeners.Add(traceListener);
            Trace.AutoFlush = true;
        }

/// <summary>
        /// log输出<br>     /// 当然这里可以自己随便扩充
        /// </summary>
        /// <param name="msg"></param>
        public static void Log(string msg)
        {
            traceListener.WriteLine(msg);
        }
        public static void Log(object o, string category)
        {
            traceListener.Write(o, category);
        }
    }

public class MyTraceListener : TraceListener
    {
        public string FilePath { get; private set; }

public MyTraceListener(string filepath)
        {
            FilePath = filepath;
        }
        public override void Write(string message)
        {
            File.AppendAllText(FilePath, message);
        }

public override void WriteLine(string message)
        {
            File.AppendAllText(FilePath, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss    ") + message + Environment.NewLine);
        }

public override void Write(object o, string category)
        {
            string msg = "";

if (string.IsNullOrWhiteSpace(category) == false) //category参数不为空
            {
                msg = category + " : ";
            }

if (o is Exception) //如果参数o是异常类,输出异常消息+堆栈,否则输出o.ToString()
            {
                var ex = (Exception)o;
                msg += ex.Message + Environment.NewLine;
                msg += ex.StackTrace;
            }
            else if (o != null)
            {
                msg = o.ToString();
            }

WriteLine(msg);
        }
    }
}

MyLog的更多相关文章

  1. Python3自定义日志类 mylog

    #encoding=utf-8 import os, sysimport datetimeimport time class Mylog(object): # 根文件夹    root_dir = s ...

  2. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  3. org.apache.log4j.Logger详解

    org.apache.log4j.Logger 详解 1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工 ...

  4. Mysql性能优化三(分表、增量备份、还原)

    接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...

  5. (转)配置Log4j(很详细)

    来自:http://blog.csdn.net/yttcjj/article/details/37957317 Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存 ...

  6. MSBuild 编译 C# Solution

    Microsoft(R) 生成引擎版本 4.6.1055.0 [Microsoft .NET Framework 版本 4.0.30319.42000] 版权所有 (C) Microsoft Corp ...

  7. [转]C# 使用Nlog记录日志到数据库

    本文转自:http://www.cnblogs.com/weixing/archive/2013/04/26/3044422.html 摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输 ...

  8. Linux下使用crontab定时备份日志

    上周学习了Linux,其中有使用crontab定时备份日志的内容,现把主要步骤记录如下: 首先需要备份的日志的源目录位于/opt/lampp/logs/access_log 备份到/tmp/logs下 ...

  9. logback 常用配置详解<appender>

    logback 常用配置详解 <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的 ...

随机推荐

  1. 将vmware虚拟机转换成qcow2格式的方法

    将vmware虚拟机转换成qcow2格式的方法 http://blog.51cto.com/13570993/2074071 关于qemu安装出现的问题 1.配置qemu是出现can't find p ...

  2. C C++互相调用注意

    注意:直接调用会找不到函数定义 1. C 调用 C++封装好后的函数: 在C++中有一个函数 int main_cpp(): 首先构建头文件, #ifndef CPP_FILE_H   #define ...

  3. java基础--集合框架的认识

    一.集合框架 对于不知道存储数量和更复杂的方式存储对象用集合框架. 其中有几个常用的接口和实现类:Collection父接口.List接口,Set接口,Map接口, ArrayList实现类.Link ...

  4. sql server把一个库表的某个字段更新到另一张表的相同字段

    缘由:进行update时忘了加where条件,导致所有数据全部update.. sql: 1 update Activity set endTime=b.endTime from idj_tl_bf. ...

  5. RN截图并且下载问题

    神奇的BUG一大堆. 需求-->截图并且下载图片 实现: import ViewShot from "react-native-view-shot"; CameraRoll ...

  6. 《c++ concurrency in action》读书笔记2--线程管理

    一.线程的启动 1. 每个c++程序至少有一个线程,是由C++ runtime启动的 2. 在c++11中,通过一个std::thread 对象启动线程.可以向std::thread传递一个函数,或者 ...

  7. PDO设置字符集

    <?php header("content-type:text/html;charset=GBK"); class CurlClass { protected $_pdo; ...

  8. UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 30633: illegal multibyte sequence

    import urllib.request def load_baidu(): url = "https://www.baidu.com/" header = {"Use ...

  9. XFS文件系统的备份和恢复

    1.工具 XFS文件系统提供了xfsdump和xfsrestore来协助备份.恢复XFS文件系统中的数据,xfsdump按inode顺序来备份XFS文件系统,备份时不需要卸载文件系统,备份和恢复的过程 ...

  10. CSAPP之阅读笔记-计算机系统漫游(1)

    最近在看CSAPP(深入理解计算机系统第二版),其实最新版是第三版.但是,我看了一下价格100多大洋,于是去老夫子旧书网上买了本第二版的,花了30多块钱.哈哈. 网上看了一些关于此书的书评,都说是本好 ...