/*-----------------------------------------------------------------
* 作 者(Author): Dennis
* 日 期(Create Date): 2021/9/3 16:11:39
* 公 司(Copyright): www.dennisdong.top
* 文件名(File Name): LogFileHelper
* ----------------------------------------------------------------
* 描 述(Description):
*----------------------------------------------------------------*/ using System;
using System.IO; namespace Anta.Common.Helpers
{
/// <summary>
/// 自定义文件写入
/// </summary>
public class LogFileHelper
{
private static readonly object LogLock = new object(); /// <summary>
/// 日志默认存放路径
/// </summary>
private static readonly string LogPath = $@"{AppDomain.CurrentDomain.BaseDirectory}\LogFiles\"; #region WriteLog /// <summary>
/// 只记录信息
/// </summary>
/// <param name="msg">内容</param>
public static void WriteLog(string msg)
{
WriteLog(null, null, msg);
} /// <summary>
/// 路径加信息
/// </summary>
/// <param name="filePath">相对路径</param>
/// <param name="msg">内容</param>
public static void WriteLog(string filePath, string msg)
{
WriteLog(filePath, null, msg);
} /// <summary>
/// 写入日志
/// </summary>
/// <param name="filePath">相对路径</param>
/// <param name="fileName">文件名</param>
/// <param name="msg">内容</param>
public static void WriteLog(string filePath, string fileName, string msg)
{
lock (LogLock)
{
try
{
if (string.IsNullOrEmpty(filePath))
{
filePath = "LogDefault";
} filePath = LogPath + filePath;
if (!Directory.Exists(filePath))//判断是否有该文件
Directory.CreateDirectory(filePath); if (string.IsNullOrEmpty(fileName))
{
fileName = DateTime.Now.ToString("yyyyMMdd");
}
var logFileName = filePath + "/" + fileName + ".log";//生成日志文件 var fs = !File.Exists(logFileName) ? new FileStream(logFileName, FileMode.Create) : new FileStream(logFileName, FileMode.Append); var sw = new StreamWriter(fs);
sw.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} \n{msg}");
sw.Flush();
sw.Close();
}
catch (Exception e)
{
var path = LogPath + "/LogError"; if (!Directory.Exists(path))
Directory.CreateDirectory(path);
var logFileName = path + "/" + DateTime.Now.ToString("yyyyMMdd") + ".log"; var fs = !File.Exists(logFileName) ? new FileStream(logFileName, FileMode.Create) : new FileStream(logFileName, FileMode.Append); var sw = new StreamWriter(fs);
sw.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} \n{msg} \n {e.Message}");
sw.Flush();
sw.Close();
}
}
} #endregion
}
}

C#写文本日志的更多相关文章

  1. C#写文本日志帮助类(支持多线程)改进版(不适用于ASP.NET程序)

    由于iis的自动回收机制,不适用于ASP.NET程序 代码: using System; using System.Collections.Concurrent; using System.Confi ...

  2. C#写文本日志帮助类(支持多线程)

    代码: using System; using System.Configuration; using System.IO; using System.Threading.Tasks; namespa ...

  3. Asp.Net写文本日志

    底层代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespac ...

  4. glog另启动线程写文本日志

    glog本身是很高效的,google的大牛肯定知道大规模的写日志用glog的话肯定会影响业务线程的处理,带负荷的磁盘IO谁都桑不起.比方levelDB就是默认异步写,更不用说google的三驾马车都是 ...

  5. 如何将Unicode文本写到日志文件中

    有时为了定位问题,我们需要结合打印日志来处理.特别是较难复现的,一般都需要查看上下文日志才能找出可能存在的问题.考虑到程序要在不同语言的操作系统上运行,程序界面显示要支持Unicode,打印出来的日志 ...

  6. SQLite 预写式日志

    SQLite在3.7.0版本引入了WAL (Write-Ahead-Logging),WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,引入WAL机制之 ...

  7. 预写式日志WAL

    Chapter 25. 预写式日志(Write-Ahead Logging (WAL)) Table of Contents 25.1. WAL 的好处 25.2. WAL 配置 25.3. 内部 预 ...

  8. Spring AOP 实现写事件日志功能

    什么是AOP?AOP使用场景?AOP相关概念?Spring AOP组件?如何使用Spring AOP?等等这些问题请参考博文:Spring AOP 实现原理 下面重点介绍如何写事件日志功能,把日志保存 ...

  9. Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console、file等。Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别。

    Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console.file等.Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别. ...

  10. PHP实现写LOG日志的代码

    这篇文章给大家介绍的内容是关于PHP实现写LOG日志的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. public function write_log(){ //设置目录时间 ...

随机推荐

  1. Go语言核心36讲06

    我已经为你打开了Go语言编程之门,并向你展示了"程序从初建到拆分,再到模块化"的基本演化路径. 一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会 ...

  2. 【大数据面试】【框架】kafka:组成、台数/参数配置、持久化、ISR队列、宕机、丢数据、重复数据、数据积压、优化各种配置(刷盘、存盘、副本、压缩)、zk、其他

    一.基本信息 1.组成 生产者 broker 消费者 zookeeper:brokerid.consumer信息(不包含生产者的信息) 2.需要安装多少台 2 * (生产者的峰值生产速率 * 副本 / ...

  3. bug处理记录:com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 9)): has to be escaped using backslash to be included in string value at [Source:

    1. 报错: com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 9 ...

  4. python文件名解析---从文件名获得分类类别

    python文件名解析-从文件名获得分类类别 python os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表.列表以字母顺序. listdir()方法 举例说明 lis ...

  5. async.js 版本兼容问题 async.filter举例

    async3.x 和async2.6.1 版本下 const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt']; // Usin ...

  6. troubleshoot:PVC动态扩容报错

    目录 一.问题描述 二.解决方法 一.问题描述 动态扩容PVC的时候报错(kubectl edit pvc pvcname):"error: persistentvolumeclaims & ...

  7. 静态文件配置 django连接MySQL django模型层初识 ORM基本语句

    目录 静态文件配置 1. 问题描述 2. 静态文件 3. 资源访问 form表单属性补充 action method 请求方法 get请求 post请求 views层 request对象 reques ...

  8. 东拼西凑学java

    前言 随着大环境的影响,互联网寒冬降临,程序员的日子越来越难,搞不好哪天就被噶了,多学点东西也没啥坏处,国内市场java如日中天,出门在外不会写两行java代码,都不好意思说自己是程序员,伪装成一个萌 ...

  9. 第一百一十四篇: JS数组Array(三)数组常用方法

    好家伙,本篇为<JS高级程序设计>第六章"集合引用类型"学习笔记   1.数组的复制和填充 批量复制方法 copyWithin(),以及填充数组方法fill(). 这两 ...

  10. 如何优化大场景实时渲染?HMS Core 3D Engine这么做

    在先前举办的华为开发者大会2022(HDC)上,华为通过3D数字溪村展示了自有3D引擎"HMS Core 3D Engine"(以下简称3D Engine)的强大能力.作为一款高性 ...