使用 Trace 将日志输入到文件中
2017-08-24 00:47
274 查看
工具没有好坏,只有适不适用。由于项目中用 Log4Net 过重,所以使用 Trace 代替了 Log4Net 输入一些简单的日志信息;
自定义监听文件
测试代码
输出日志为:
如果要修改日志的级别、修改日志输出目录,可修改配置文件:
注意:Trace.Write() 等日志输出方法,不受等级的限制
自定义监听文件
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 + 1 >= (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 = 10; int b = 0; var sd = a / b; } catch (Exception ex) { Trace.TraceError("{0}\r\n{1}", ex.Message, ex.StackTrace); } return; }
输出日志为:
ODAS.exe Error: 0 : 2017-08-24 00:05:28 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 43
如果要修改日志的级别、修改日志输出目录,可修改配置文件:
<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() 等日志输出方法,不受等级的限制
相关文章推荐
- linux 使用 syslog 服务,将出错信息输入到 “/var/log/message” 系统日志文件中去
- Spring使用aop将日志(包括异常信息)输入到日志文件
- 使用cron,logrotate来管理日志文件
- 使用oracle LogMiner查看日志文件
- 如何使用svconfigeditor.exe编辑WCF Service配置文件--配置Diagnostics进行WCF Service的log和Trace(三)
- 全面了解安装使用Linux下的日志文件系统
- 使用singleton模式建立日志文件[原创].
- 全面了解安装使用Linux下的日志文件系统
- 使用hibernate 3 + p6spy+ log4j 写日志文件时的错误
- ORACLE DBA学习笔记--日志文件(使用LogMiner分析日志)
- 使用hibernate 3 + p6spy+ log4j 写日志文件(一)
- 使用log4j每天创建日志文件
- 【Vegas原创】控制文件损坏,使用trace文件恢复DB
- 使用log4j每天创建日志文件
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 如何在 SQL Server 2005 中使用 DBCC SHRINKFILE 语句收缩事务日志文件-数据库知识
- log4j多文件输入日志
- 使用游标收缩数据库日志文件并调整数据库属性选项栏部分设置
- Log4j日志文件的使用
- Symbian中日志文件的使用