#region log
////////////////////use///////////////
/// <summary>
/// 异常日志
/// </summary>
/// <param name="ex">Exception ex</param>
/// <param name="flagTypeRemark">异常类型备注</param>
public void LogException(Exception ex, string flagTypeRemark = "**")
{
AppPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"file\Error\";
log(AppPath, "\r\n##" + flagTypeRemark + "##\r\nMessage:" + ex.Message + "\r\nStacktrace:" + ex.StackTrace + "\r\n");
} /// <summary>
/// 本地日志记录
/// </summary>
/// <param name="logPath">日志路径</param>
/// <param name="logContent">要记录的日志内容</param>
public static void log(string logPath, string logContent)
{
string filePath = AppPath + "elog.log";
string content = DateTime.Now.ToString("yyyyMMddHHmmss:") + logContent;
if (!System.IO.Directory.Exists(AppPath)) System.IO.Directory.CreateDirectory(AppPath);
if (!System.IO.File.Exists(filePath))
{
System.IO.File.AppendAllText(filePath, content);
return;
}
ParameterizedThreadStart threadStart = new ParameterizedThreadStart(writeLog);
Thread thread = new Thread(threadStart);
thread.Name = "Pro_ErrorLog.log";
thread.Start(logContent);
} /// <summary>
/// 当前程序运行路径
/// </summary>
public static string AppPath { get; set; } public static void writeLog(object str)
{
string filePath = AppPath + "elog.log";
string content = "\r\n" + DateTime.Now.ToString("yyyyMMddHHmmss:") + str.ToString();
System.IO.FileInfo info = new System.IO.FileInfo(filePath);
if (info.Length > * * )
{
while (IsFileInUse(filePath))
Thread.Sleep();
string backPath = AppPath + @"BackError\";
if (!System.IO.Directory.Exists(backPath)) System.IO.Directory.CreateDirectory(backPath);
System.IO.File.Move(filePath, backPath + "elog" + DateTime.Now.ToString("yyyyMMdd") + ".log");
System.IO.File.Delete(filePath);
}
while (IsFileInUse(filePath))
Thread.Sleep();
if (!IsFileInUse(filePath))
{
#region write file
System.IO.FileStream fs = null;
try
{
fs = new System.IO.FileStream(filePath, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.None);
fs.Write(Encoding.UTF8.GetBytes(content), , Encoding.UTF8.GetByteCount(content));
}
catch
{
;
}
finally
{
if (fs != null)
fs.Close();
}
#endregion
}
} /// <summary>
/// 文件是否被占用??
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool IsFileInUse(string fileName)
{
bool inUse = true;
System.IO.FileStream fs = null;
try
{
fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.None);
inUse = false;
}
catch
{
inUse = true;
}
finally
{
if (fs != null)
fs.Close();
}
return inUse;
}
#endregion
//use
LogException(ex, "异常类型备注文本");//

异常日志文件errorlong的更多相关文章

  1. Oracle 监听器日志文件过大导致监听异常

    Oracle 监听器日志文件过大导致监听异常 db版本:11.2.0.1 os版本:windows2008 现象: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败 ...

  2. log4j.properties配置与将异常输出到Log日志文件实例

    将异常输出到 log日志文件 实际项目中的使用: <dependencies> <dependency> <groupId>org.slf4j</groupI ...

  3. C# 插件热插拔 .NET:何时应该 “包装异常”? log4.net 自定义日志文件名称

    C# 插件热插拔   所谓热插拔就是插件可以 在主程序不重新启动的情况直接更新插件, 网上有很多方案: https://www.cnblogs.com/happyframework/p/3405811 ...

  4. Log4Net异常日志记录在asp.net mvc3.0的应用

    前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...

  5. 记一次log4j日志文件输出错误的解决

    log4j错误信息:log4j:ERROR Failed to rename [D:/logs/wmts_] to [D:/logs/wmts_2015-12-21.log ]. 起因:部门网站使用B ...

  6. Log4net按照不同级别写入多个日志文件

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]//注入 在一个Web应用项目中,我使用了Fluent NHibernate作为数据访问 ...

  7. Android中对Log日志文件的分析[转]

    一,Bug出现了, 需要“干掉”它 bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只要你会看bug, a ...

  8. 使用Log4Net完成异常日志处理

    1.在MVC的Modal文件夹建一个异常处理过滤器 public class MyExceptionAttribute:HandleErrorAttribute { public static Que ...

  9. SQL Server 2008 收缩日志 清空删除大日志文件 转载

    SQL Server 2008 收缩日志 清空删除大日志文件 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005)Ba ...

随机推荐

  1. Oracle数据库索引

    Oracle数据库索引 在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快.索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容. 对于数据库来说,索 ...

  2. NN入门,手把手教你用Numpy手撕NN(三)

    NN入门,手把手教你用Numpy手撕NN(3) 这是一篇包含极少数学的CNN入门文章 上篇文章中简单介绍了NN的反向传播,并利用反向传播实现了一个简单的NN,在这篇文章中将介绍一下CNN. CNN C ...

  3. altium designer 20.0.8

    altium designer 20.0.8 download : http://dl3.downloadly.ir/Files/Software/Altium_Designer_20.0.8_Bet ...

  4. 后端传给前端Long类型数据,导致精度丢失

    1.前几天遇到了一个问题,后端向前端传递一个Long类型的数据,前端拿到的值不对. 2.当Long类型的数据大于17位时候,就会出现精度丢失的情况. 3.解决办法 我们采用的解决方案是将后端的Long ...

  5. 【Android - 自定义View】之View的位置参数

    View是Android中所有控件的基类,不管是简单的Button和TextView,还是复杂的RelativeLayout和ListView,其基类都是View类:ViewGroup也继承了View ...

  6. 【10分钟学Spring】:(一)初识Spring框架

    简介 Spring是一个轻量级的企业级的Java开发框架.主要是用来替代原来更加重量级的企业级Java技术,比如EJB(Enterprise JavaBean).Java数据对象(Java Data ...

  7. django-formset实现数据表的批量操作

    什么是formset 我们知道forms组件是用来做表单验证,更准确一点说,forms组件是用来做数据库表中一行记录的验证.有forms组件不同,formset是同科同时验证表中的多行记录,即form ...

  8. 单核苷酸多态性SNP(single nucleotide polymorphism)

    定义 主要指基因组水平上由单个核苷酸的变异所引起的 DNA 序列多态性. 在基因组水平上由单个核苷酸的变异所引起的DNA序列多态性.即:在不同个体的同一条染色体或同一位点的核苷酸序列中,绝大多数核苷酸 ...

  9. MySql简单的增删改查语句 js

    最近在项目中需要连接数据库,做增删改查的功能,sql语句整理做了以下记录(基于NodeJs,注:data为你的真实数据): (一)新增插入表中数据: sql: 'insert into work(表名 ...

  10. PHP自动发红包代码示例

    <?php header('Content-type:text'); define("TOKEN", "weixin"); $wechatObj = ne ...