使用 Trace 将日志输入到文件中
工具没有好坏,只有适不适用。由于项目中用 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 将日志输入到文件中的更多相关文章
- 使用exec函数将当前的信息输入到文件中
先来看看exec函数: exec函数族 fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序.当进程调用一种exec函 ...
- C#写入日志信息到文件中
为了在服务器上运行程序及时的跟踪出错的地方,可以在必要的地方加入写日志的程序. string folder = string.Format(@"D:\\{0}\\{1}", Dat ...
- Log4j分级别保存日志到单个文件中,并记录IP和用户信息
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...
- php把错误日志输入到文件里。
display_errors = On 开启状态下,若出现错误,则报错,出现错误提示 dispaly_errors = Off 关闭状态下,若出现错误,则提示:服务器错误.但是不会出现错误提示 log ...
- log4j+AOP 记录错误日志信息到文件中
AOP 采用异常通知切入,把指定包的异常记录到日志文件. 先看log4j.properties ,控制台输出的是普通信息, 文件输出的是异常信息. log4j.rootLogger=DEBUG, Co ...
- python logging日志输出个文件中
# -*- coding:utf-8 -*- import logging # 引入logging模块 import os.path import time # 第一步,创建一个logger logg ...
- linux下将终端的输入存入文件中
代码很简单: #include <stdlib.h> #include <fcntl.h> #include <stdio.h> #include <unis ...
- 把Android studio的日志导入目标文件中
最好是在Android studio的命令行工具中进行命令操作. adb logcat -v time > /Users/z/log.txt adb logcat -v time > /U ...
- ios 将Log日志重定向输出到文件中保存
对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析. 首先是日志输出,分为c的printf和标准的NSLog输出,print ...
随机推荐
- java线程池的应用
package com.test; import java.util.concurrent.Callable; public class TestThread implements Callable& ...
- 构建高性能web之路------mysql读写分离实战(转)
一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 在本次实战中,应用程序client基于c3p0连接后端的database ...
- Magento EAV模型
网址:http://www.ruiwant.com/magento-for-dev-part-7-advanced-orm-entity-attribute-value.html
- No package的问题解决
更新pecl扩展 yum install epel-release //扩展包更新包yum update //更新yum源
- android 点击通知栏返回应用 ,非启动一个新Activity
再使用如下的 Intent 设置: Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ ...
- JS获取整个网页html代码
var test=document.getElementsByTagName('html')[0].innerHTML; alert(test);
- 【转】Kotlin 和 Checked Exception
Kotlin 和 Checked Exception 最近 JetBrains 的 Kotlin 语言忽然成了热门话题.国内小编们传言说,Kotlin 取代了 Java,成为了 Android 的“钦 ...
- [转] linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
1: 台式机家里面不想再走线了. 于是去某东买了个USB无线网卡.tp的WN725N USB,非常小, 和罗技的优联接收器差不多大. 2: 驱动能自己识别是不指望了,既然是usb网卡,插入USB后 ...
- nodejs 遍历文件夹下所有的图片改名为中文
安装依赖 $ npm init -y && npm i fs-extra globby request -S main.js const fs = require('node-fs-e ...
- fcitx五笔的安装[zz]
Fcitx──小企鹅输入法:Free Chinese Input Toy for X是国产软件的精品,是一个以GPL方式发布的.基于XIM的简体中文输入法集合(原为G五笔),包括五笔.五笔拼音.二笔. ...