public class Loger
{
/// <summary>
/// 写入日志
/// </summary>
/// <param name="content">日志内容</param>
/// <param name="title">日志标题</param>
/// <param name="folderName">文件夹名称</param>
/// <param name="filePrefixName">文件前缀名</param>
public static void Write(string content, string title = "", string folderName = "Log", string filePrefixName = "Log")
{
try
{
lock (typeof(Loger))
{
DateTime dateTimeNow = DateTime.Now;
string logDirPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log", folderName);
if (!Directory.Exists(logDirPath))
{
Directory.CreateDirectory(logDirPath);
} string logFilePath = string.Format("{0}/{1}-{2}.txt", logDirPath, filePrefixName, dateTimeNow.ToString("yyyy-MM-dd"));
using (StreamWriter writer = new StreamWriter(logFilePath, true, Encoding.UTF8))
{
try
{
writer.WriteLine("------------------------------------------------------------------------------------------");
writer.WriteLine(title);
writer.WriteLine("日志时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
writer.WriteLine(content);
writer.WriteLine("------------------------------------------------------------------------------------------");
}
catch (Exception ex)
{
Console.WriteLine("Loger.cs Line45" + ex.Message);
} writer.Close();
}
}
}
catch(Exception ex)
{
Console.WriteLine("Loger.cs Line54" + ex);
//throw new Exception("无法将日志写入文件,请查看安装目录是否有权限!");
}
} /// <summary>
/// 写入日志
/// </summary>
/// <param name="format">符合格式字符串</param>
/// <param name="args">一个对象数组,其中包含零个或多个要设置格式的对象</param>
public static void WriteFormat(string format, params object[] args)
{
string content = string.Format(format, args);
Write(content, "", "Log", "Log");
} /// <summary>
/// 写入日志
/// </summary>
/// <param name="ex">Exception对象</param>
/// <param name="title">日志标题</param>
/// <param name="folderName">文件夹名称</param>
/// <param name="filePrefixName">文件前缀名</param>
public static void Write(Exception ex, string title = "", string folderName = "Exception", string filePrefixName = "Exception")
{
string content = string.Format("错误信息:{1}{0}错误来源:{2}{0}堆栈信息:{0}{3}", Environment.NewLine, ex.Message, ex.Source, ex.StackTrace);
Write(content, title, folderName, filePrefixName);
}
}

封装一个C#日志类Loger的更多相关文章

  1. Python_selenium封装一个浏览器引擎类

    Python_selenium封装一个浏览器引擎类 现在我们在编写一个类,叫浏览器引擎类(此例为:启动浏览器),将文件名命名为browser.py,代码下面通过更改一个字符串的值,运用if语句判断和控 ...

  2. 在Lua中封装一个调试日志(附lua时间格式)

    --自己封装一个Debug调试日志 Debug={} Info={} local function writeMsgToFile(filepath,msg) end function Debug.Lo ...

  3. Python+Selenium中级篇之-封装一个自己的类-浏览器引擎类

    前一篇文章我们知道了,如何去封装几个简单的Selenium方法到我们自定义的类,这次我们编写一个类,叫浏览器引擎类,通过更改一个字符串的值,利用if语句去判断和控制启动那个浏览器.这里我们暂时,支持三 ...

  4. 封装一个redis操作类来操作hash格式

    最近项目要用redis,依然是基于tp3.2. 发现thinkphp3.2自带的缓存类并不好使用,就自己封装了一个 目前只支持hash格式,其他数据类型的操作后面用到的时候再补充 <?php / ...

  5. block传值以及利用block封装一个网络请求类

    1.block在俩个UIViewController间传值 近期刚学了几招block 的高级使用方法,事实上就是利用block语法在俩个UIViewController之间传值,在这里分享给刚開始学习 ...

  6. 一个php日志类

    <?php //author:lixiuran class Log { public static function writeLog($string) { $string = date('H: ...

  7. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

  8. Python之自定义封装一个简单的Log类

    参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...

  9. PHP打印日志类

    PHP简单封装个打印日志类,方便查看日志: <?php /** * Created by PhpStorm. * User: zenkilan * Date: 2019/9/26 * Time: ...

随机推荐

  1. XML文件定义约束

    今天在做Android项目的时候,用到了XML解析,服务端返回的不是JSON,而是XML,这时候就需要我们解析XML了,当然在解析XML的时候,需要了XML文件的定义结构,任何一个文件的定义都是要遵循 ...

  2. 排列+函数映射——hdu6038好题

    /* 引理:[0,n-1]的排列,i向a[i]连边,那么每个数必定在一个环中 所以数组a可以分割成一些环,数组b也可以分割成一些环 先讨论a的一个环 a[a1]=a2 a[a2]=a3 a[a3]=a ...

  3. <转载>深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别

    C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个 ...

  4. JS中 reduce() 的用法

    过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它.事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce ...

  5. PAT_A1106#Lowest Price in Supply Chain

    Source: PAT A1106 Lowest Price in Supply Chain (25 分) Description: A supply chain is a network of re ...

  6. HDU 5726 线段树+dp

    题意:给出一个序列,后q次询问,求给定区间gcd及整个序列有多少个序列的gcd和这个值相同 首先线段树维护区间gcd建树,之后预处理出每个gcd有多少个子序列,这时需要dp, dp[i][tmp]表示 ...

  7. 自动化测试之sikuli调研

    调研结果 Sikuli可用于web和app的自动化测试中,操作简单,代码容易,但截图过程太过繁琐,所需要的图片内存占用量大,且sikuli的图片识别度较低,需对所要操作的图片进行精准截图. 什么是Si ...

  8. CSIC_716_20191112【闭包函数和装饰器】

    闭包函数 什么是闭包函数:闭包函数是函数嵌套.函数对象.名称空间和作用域的集合体. 闭包函数必须在函数内部定义,闭包函数可以引用外层函数的名字. # _*_ coding: gbk _*_ # @Au ...

  9. js实现获取选中checkbox的值

    var bookVersionId = []; var examVirtualSetResultId; $.each($('input[type=checkbox]:checked'),functio ...

  10. zabbix配置文件解析

    zabbix的配置文件一般有三种:zabbixserver的配置文件zabbix_server.confzabbixproxy的配置文件zabbix_proxy.confzabbix_agentd的配 ...