工具没有好坏,只有适不适用。由于项目中用 Log4Net 过重,所以使用 Trace 代替了 Log4Net 输入一些简单的日志信息;

自定义监听文件

using System;
using System.Configuration;
using System.Diagnostics;
using System.IO; namespace Iron.Common
{
/// <summary>
/// 错误日志自定义监听
/// </summary>
public class LogHelper : TraceListener
{
/// <summary>
/// 获取日志输出级别
/// </summary>
public static TraceSwitch TraceSwitch = new TraceSwitch("TraceLevel", string.Empty); public LogHelper()
{
if (TraceSwitch.Level == TraceLevel.Off)
{
TraceSwitch.Level = TraceLevel.Error;
}
} /// <summary>
/// 如果AppConfig 里面有配置就读配置文件里面的路径,否则取当前exe目录
/// </summary>
private string FilePath
{
get
{
string directPath = ConfigurationManager.AppSettings["LogFilePath"]; //获得文件夹路径
if (string.IsNullOrEmpty(directPath))
{
directPath = System.Environment.CurrentDirectory + @"\logs\";
}
directPath = directPath.Trim();
if (!Directory.Exists(directPath)) //判断文件夹是否存在,如果不存在则创建
{
Directory.CreateDirectory(directPath);
}
return string.Format(@"{0}\{1}_{2}.log", directPath, DateTime.Now.ToString("yyyy.MM.dd"), System.Diagnostics.Process.GetCurrentProcess().ProcessName);
}
} 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 TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
{
if ((int)TraceSwitch.Level + >= (int)eventType)
base.TraceEvent(eventCache, source, eventType, id, message);
} public override void Write(object o, string category)
{
string msg = ""; if (string.IsNullOrEmpty(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);
}
}
}

测试代码

private static void Main(string[] args)
{
//删除初始化代码,改为在配置文件中设置--【此代码只要在程序运行时初始化一次】
Trace.Listeners.Clear(); //清除系统监听器 (就是输出到Console的那个)
Trace.Listeners.Add(new LogHelper()); //添加 自定义Trace 实例 try
{
int a = ;
int b = ;
var sd = a / b;
}
catch (Exception ex)
{
Trace.TraceError("{0}\r\n{1}", ex.Message, ex.StackTrace);
}
return;
}

输出日志为:

ODAS.exe Error:  : -- ::    Attempted to divide by zero.
at Ironfo.Test.Views.Demo01.List.ControlRefresh(Object sender, RoutedEventArgs routedEventArgs) in C:\Code\ODAS\Views\Demo01\List.xaml.cs:line

如果要修改日志的级别、修改日志输出目录,可修改配置文件:

<configuration>
<!-- 默认输入为 Error 【默认为Off,已在代码中修改为Error】 -->
<system.diagnostics>
<switches>
<!--这里可以设定监听级别,可以设置Error,Warning,Info,Verbose或者留空-->
<add name="TraceLevel" value="Info"/>
</switches>
</system.diagnostics>
<appSettings>
<!-- 默认为执行文件所在的目录 -->
<!--<add key="LogFilePath" value="D:\LOG" />-->
</appSettings>
</configuration>

注意:Trace.Write() 等日志输出方法,不受等级的限制

使用 Trace 将日志输入到文件中的更多相关文章

  1. 使用exec函数将当前的信息输入到文件中

    先来看看exec函数: exec函数族     fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序.当进程调用一种exec函 ...

  2. C#写入日志信息到文件中

    为了在服务器上运行程序及时的跟踪出错的地方,可以在必要的地方加入写日志的程序. string folder = string.Format(@"D:\\{0}\\{1}", Dat ...

  3. Log4j分级别保存日志到单个文件中,并记录IP和用户信息

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...

  4. php把错误日志输入到文件里。

    display_errors = On 开启状态下,若出现错误,则报错,出现错误提示 dispaly_errors = Off 关闭状态下,若出现错误,则提示:服务器错误.但是不会出现错误提示 log ...

  5. log4j+AOP 记录错误日志信息到文件中

    AOP 采用异常通知切入,把指定包的异常记录到日志文件. 先看log4j.properties ,控制台输出的是普通信息, 文件输出的是异常信息. log4j.rootLogger=DEBUG, Co ...

  6. python logging日志输出个文件中

    # -*- coding:utf-8 -*- import logging # 引入logging模块 import os.path import time # 第一步,创建一个logger logg ...

  7. linux下将终端的输入存入文件中

    代码很简单: #include <stdlib.h> #include <fcntl.h> #include <stdio.h> #include <unis ...

  8. 把Android studio的日志导入目标文件中

    最好是在Android studio的命令行工具中进行命令操作. adb logcat -v time > /Users/z/log.txt adb logcat -v time > /U ...

  9. ios 将Log日志重定向输出到文件中保存

    对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析. 首先是日志输出,分为c的printf和标准的NSLog输出,print ...

随机推荐

  1. 新浪安装weiphp2.0的方法

    请安装此网页的方法来安装: https://coding.net/u/idoubi666/p/weiphp-sae/git

  2. 图形对象函数figure() 及 子图创建函数subplot()

    1 图像对象创建函数figure 创建图形Creates a new figure, 图形名既可以作为显示在图形窗口标题栏中的文本,也是该对象的名称 也可以通过mp.figure()获取(或激活)已创 ...

  3. python 生成图表

    python写入excel(xlswriter)--生成图表 折线图 # -*- coding:utf-8 -*- import xlsxwriter # 创建一个excel workbook = x ...

  4. MySQL -- Innodb是如何处理自增列的

    对于那些向带有自增列的表中插入行的语句,Innodb提供一种可配置的锁定机制,这种锁定机制可以显著提高SQL语句的可伸缩性和性能. Innodb中为了使用自增机制,自增列必须是索引的部份,从而可以使用 ...

  5. Android之内存泄露、内存溢出、内存抖动分析

      内存   JAVA是在JVM所虚拟出的内存环境中运行的,内存分为三个区:堆.栈和方法区.栈(stack):是简单的数据结构,程序运行时系统自动分配,使用完毕后自动释放.优点:速度快.堆(heap) ...

  6. C++ 虚函数表浅析

    一.背景知识(一些基本概念) 虚函数(Virtual Function):在基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数. 纯虚函数(Pure Virtual Functi ...

  7. appium简明教程(8)——那些工具

    那片笑声让我想起我的那些tool 在我生命每个角落静静为我开着 我曾以为我会永远守在她身旁 今天我们已经离去在人海茫茫 她们都老了吧 都更新换代了吧 幸运的是我曾陪她们开发 啦…… 想她 啦…… 她还 ...

  8. CListCtrl的Report风格自绘

    原文链接: http://jingyan.baidu.com/article/5bbb5a1b38af1113eaa17910.html CListCtrl是MFC中运用最广泛的控件之一,很多软件都有 ...

  9. PMD-Java 代码检查工具对 error 和 warning 的配置

    PMD是一款优秀的Java程序代码检查工具.该它可以检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等. 但在使用过程中,你会项目中发现存在大量的 PMD 插件报出的 ...

  10. Java读取excel的示例

    一.引用的jar包,apache的POI // https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml compile group: ' ...