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. 如何解决 React 官方脚手架不支持 Less 的问题

    说在前面 create-react-app 是由 React 官方提供并推荐使用构建新的 React 单页面应用程序的最佳方式,不过目前版本(1.5.x)其构建的项目中默认是不支持动态样式语言 Les ...

  2. Drools+springboot

    查看我的github, 后续会陆续补充文档和Drools技术 https://github.com/zongheng14/insurance-rules

  3. If嵌套

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 从Scratch到Python:会动的小猫

    大部分人提起儿童编程,就会想到Scratch,然而当儿童升入中学,学习什么语言比较合适呢?我认为,Python是未来的方向,为此我将会把一些经典的Scratch案例用Python重新实现,抛砖引玉,希 ...

  5. 初学者易上手的SSH-hibernate04 一对一 一对多 多对多

    这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...

  6. 通过 ssh 建立本地与 github 的连接

    查看 ssh key cd ~/.ssh cat 名字.pub 如果本地没有 ssh key,则新建 ssh-keygen -t rsa -C "mobro_chu@163.com" ...

  7. Codeforces 799 D. Field expansion

    题目链接:http://codeforces.com/contest/799/problem/D 因为${a_i>=2}$那么一个数字至多操作${log_{2}^{max(a,b)/min(h, ...

  8. T55359 家庭作业

    传送门 思路: 先按学分从大到小排序,根据贪心的思想尽可能地让作业的完成时间延后,这样就能有更多空间给那些限制比较严格的作业 设 f [ i ] 为点 i 向左的最小空闲时间 对于一个限制 t 的作业 ...

  9. js 空语句

    不写就行了 ){}

  10. Windows 7环境下网站性能测试小工具 Apache Bench 和 Webbench使用和下载

    1.简要说明: Apache Bench 是Apache的网站性能测试小程序,Windows平台下的程序名简称ab.exe,要想获得这个80k的可执行程序,用户需要下载整个Apache Httpd软件 ...