C# 打印异常
1. [代码]函数:将异常打印到LOG文件 跳至 [1] [2] [4] [全屏预览]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
/// <summary> /// 将异常打印到LOG文件 /// </summary> /// <param name="ex">异常</param> /// <param name="LogAddress">日志文件地址</param> public static void WriteLog(Exception ex, string LogAddress = "" ) { //如果日志文件为空,则默认在Debug目录下新建 YYYY-mm-dd_Log.log文件 if (LogAddress == "" ) { LogAddress = Environment.CurrentDirectory + '\\' + DateTime.Now.Year + '-' + DateTime.Now.Month + '-' + DateTime.Now.Day + "_Log.log" ; } //把异常信息输出到文件 StreamWriter sw = new StreamWriter(LogAddress, true ); sw.WriteLine( "当前时间:" + DateTime.Now.ToString()); sw.WriteLine( "异常信息:" + ex.Message); sw.WriteLine( "异常对象:" + ex.Source); sw.WriteLine( "调用堆栈:\n" + ex.StackTrace.Trim()); sw.WriteLine( "触发方法:" + ex.TargetSite); sw.WriteLine(); sw.Close(); } |
2. [代码]调用方法
1
2
3
4
5
6
7
8
|
try { throw new Exception( "测试异常" ); } catch (Exception ex) { WriteLog(ex); } |
3. [图片] 测试异常.png
4. [代码]多线程调用函数,需要在函数体内部用到lock关键字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
static void Main( string [] args) { Thread th1 = new Thread( new ParameterizedThreadStart(MakeException)); Thread th2 = new Thread( new ParameterizedThreadStart(MakeException)); th1.Start( "Thread1" ); th2.Start( "Thread2" ); } /// <summary> /// 制造异常 /// </summary> /// <param name="Tag">传入标签</param> public static void MakeException( object Tag) { while ( true ) { try { throw new Exception( "测试异常" ); } catch (Exception ex) { WriteLog(ex, Tag.ToString()); } } } public static object locker = new object (); /// <summary> /// 将异常打印到LOG文件 /// </summary> /// <param name="ex">异常</param> /// <param name="LogAddress">日志文件地址</param> /// <param name="Tag">传入标签(这里用于标识函数由哪个线程调用)</param> public static void WriteLog(Exception ex, string Tag = "" , string LogAddress = "" ) { lock (locker) { //如果日志文件为空,则默认在Debug目录下新建 YYYY-mm-dd_Log.log文件 if (LogAddress == "" ) { LogAddress = Environment.CurrentDirectory + '\\' + DateTime.Now.Year + '-' + DateTime.Now.Month + '-' + DateTime.Now.Day + "_Log.log" ; } //把异常信息输出到文件 StreamWriter sw = new StreamWriter(LogAddress, true ); sw.WriteLine(String.Concat( '[' , DateTime.Now.ToString(), "] Tag:" + Tag)); sw.WriteLine( "异常信息:" + ex.Message); sw.WriteLine( "异常对象:" + ex.Source); sw.WriteLine( "调用堆栈:\n" + ex.StackTrace.Trim()); sw.WriteLine( "触发方法:" + ex.TargetSite); sw.WriteLine(); sw.Close(); } } |
1
2
3
4
|
if (!Directory.Exists(sPath)) { Directory.CreateDirectory(sPath); } |
C# 打印异常的更多相关文章
- Java如何打印异常的堆栈?
在Java编程中,如何打印异常的堆栈? 此示例显示如何使用异常类的printStack()方法打印异常的堆栈. package com.yiibai; public class PrintStackT ...
- Slf4j打印异常的堆栈信息
一.前言 直接用logger.info("异常信息为:"+e)或者logger.info(e.getMessage())只能记录到异常的描述信息,却没有其异常具体发生在哪一行代码. ...
- Springboot + SLF4j + Log4j2 打印异常日志时,耗时要5-6秒
1.使用jps -l 查看springboot项目的进程ID 2.使用命令jstack -l 进程ID > log.txt 打印堆栈信息到文件,内容如下: "http-nio-8065 ...
- 在error日志打印异常
在日志中打印异常,经常会看到以下的写法: logger.error(e.getMessage()); 或者是: e.printStackTrace(); 这两种其实都不太好. e.getMessage ...
- [python]打印异常信息的不同方式
异常捕获 try: execpt Exception as e: print(str(e)) 打印异常信息的方式 1.str(e) 返回字符串类型,只给出异常信息,不包括异常信息的类型,如1/0的异常 ...
- 存储过程——异常捕获&打印异常信息
目录 0. 背景说明 1. 建立异常信息表ErrorLog 2. 建立保存异常信息的存储过程 3. 建立在SQL Server中打印异常信息的存储过程 4. 建立一个用于测试的存储过程抛出异常进行测试 ...
- Python traceback 模块, 打印异常信息
Python感觉是模仿Java, 到处都需要加try..catch.... 这里记录一下用法,方便后续使用. # -*- coding:utf-8 -*- import os import loggi ...
- 一个日志模板,从traceback打印异常受启发做的模板,可被pycharm esclip 等ide识别和跳转
之前发过日志,再增加一种模板. logging.Formatter('%(asctime)s - %(name)s - File "%(pathname)s", line %(li ...
- jvm不打印异常栈
生产环境抛异常,但却没有将堆栈信息输出到日志,确认打印日志方法正确logger.error("somthing error", ex); JVM启动参数加上-XX:-OmitSta ...
随机推荐
- BestCoder Round #85 hdu5777 domino
domino 题意: 问题描述 小白在玩一个游戏.桌子上有n张多米诺骨牌排成一列.它有k次机会,每次可以选一个还没有倒的骨牌,向左或者向右推倒.每个骨 牌倒下的时候,若碰到了未倒下的骨牌,可以把它推倒 ...
- HDU 2089 不要62(数位dp入门)
题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715 数位数是从右向 ...
- catalan---卡特兰数(小结)
(关于卡特兰数的详细介绍)http://baike.baidu.com/view/2499752.htm 下面有练习的题目: 经过测试,_int64/long long 最大只能表示到33位,超过这个 ...
- 停止某个机房所有机器上包的脚本 pack_idc_stop.py
一.初衷: 鉴于公司的进程包package都是冗余多点部署的,一般一个idc机房有多台机器部署同一个package.当机房网络出问题的时候,我们不得不查到本机房部署了哪些package,并在包发布系统 ...
- laravel下使用阿里云oss上传图片
对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子 ...
- this web application instance has been stopped already解决办法
重启tomcat的时候出错 Illegal access: this web application instance has been stopped already. Could not loa ...
- SpringMVC3的ResponseBody返回字符串(JSON)乱码问题解决
近日做一个小项目,用spring mvc 做到ajax请求获取jquery ztree 异步获取树返回json对象时出现了乱码,试了各种办法,查了各种资料,一开始以为是数据库的编码有问题,经测试没问题 ...
- [Flex] ButtonBar系列——arrowKeysWrapFocus属性如果为 true,则使用箭头键在组件内导航时,如果击中某一端则将折回。
<?xml version="1.0" encoding="utf-8"?> <!--arrowKeysWrapFocus 如果为 true, ...
- DBCP数据库连接池
在用JDBC连接数据库的时候,需要创建对数据库的连接,这样才能执行后续的操作.然而,这样做有两个问题: 数据库允许的连接个数有限 创建连接的过程需要消耗内存和时间 所以,JDBC引入了连接池的概念.也 ...
- Delphi 连接mysql 的功能, 去除乱码, 需要设置字符集
vDataBaseName := aConfiginiFile.ReadString('DataBaseConfig', 'DataBase', CH_IPC712Db); vServer := aC ...