C# LoggingHelp 自定义记录日志帮助类
public class LoggingHelper
{
/// <summary>
/// 获取文件路径
/// </summary>
/// <returns></returns>
public static string GetLogFilePath()
{
string log_file_path = OPOConfig.GetValue("Log_File_Path");
if (log_file_path == null)
{
log_file_path = AppDomain.CurrentDomain.BaseDirectory + "\\Content\\Log\\";
}
return log_file_path;
}
/// <summary>
/// 写入日志文件
/// </summary>
/// <param name="logType"></param>
/// <param name="message"></param>
/// <param name="writeType"></param>
/// <param name="logFileName"></param>
public static void WriteLog(string logType, string message, int writeType = 0, string logFileName = "")
{
if (string.IsNullOrWhiteSpace(logFileName))
{
logFileName = DateTime.Now.Date.ToString("yyyyMMdd");
}
string strlogpath = GetLogFilePath() + "\\日志文件" + logFileName+"\\";
if (!Directory.Exists(strlogpath))//判断文件夹是否存在
{
Directory.CreateDirectory(strlogpath); //创建新文件夹
}
try
{
DeleteFile(strlogpath, 30);
DateTime now = DateTime.Now;//现在
string fileName = string.Empty;//文件名
fileName += DateTime.Today.ToString("yyyyMMdd").Replace("/", "").Replace("-", "").Replace("\\", "").Replace(" ", "").Replace(":", "").Replace(":", "") + "_" + DateTime.Now.Hour + ".log";
string fullPath = strlogpath + fileName;
while (IsFileInUse(fullPath))
{
System.Threading.Thread.Sleep(100);
}
using (StreamWriter output = new StreamWriter(fullPath, true, System.Text.Encoding.UTF8))
{
switch (writeType)
{
case 1:
output.WriteLine("\r\n");
output.WriteLine("-------------------开始:-" + now.ToString() + "-------------------------------");
output.WriteLine("类型:" + logType);
output.WriteLine("描述:" + message);
output.Close();
break;
case 2:
output.WriteLine("\r\n");
output.WriteLine("类型:" + logType);
output.WriteLine("描述:" + message);
output.Close();
break;
case 3:
output.WriteLine("类型:" + logType);
output.WriteLine("描述:" + message);
output.WriteLine("-------------------结束:-" + now.ToString() + "-------------------------------");
output.WriteLine("\r\n");
output.Close();
break;
default:
output.WriteLine("\r\n");
output.WriteLine("-------------------开始:-" + now.ToString() + "-------------------------------");
output.WriteLine("类型:" + logType);
output.WriteLine("描述:" + message);
output.WriteLine("-------------------结束:-" + now.ToString() + "-------------------------------");
output.Close();
break;
}
if (writeType == 0)
{
}
else
{
}
}
}
catch (Exception error)
{
WriteLogError(error.Message);//记录日志异常
}
}
private static void WriteLogError(string error)
{
string strlogpath = GetLogFilePath() + "LogError";
string fileName = DateTime.Now.ToString("yyyy-MM-dd") + ".log";
string fullPath = strlogpath + fileName;
if (!Directory.Exists(fullPath))//判断文件夹是否存在
{
Directory.CreateDirectory(fullPath); //创建新文件夹
}
try
{
while (IsFileInUse(fullPath))
{
System.Threading.Thread.Sleep(100);
}
DateTime now = DateTime.Now; //取现在
using (StreamWriter output = new StreamWriter(fullPath, true, System.Text.Encoding.UTF8))
{
output.WriteLine("----------------------------------------------------------------------------------");
output.WriteLine("Begin: " + now.ToString());
output.WriteLine("Type: Log Exception");
output.WriteLine("Description: " + error);
output.WriteLine("End");
output.Close(); //关闭
}
}
catch
{
}
}
/// <summary>
/// 文件是否被占用
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool IsFileInUse(string fileName)
{
bool inUse = true;
FileStream fs = null;
try
{
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read,
FileShare.None);
inUse = false;
}
catch
{
}
finally
{
if (fs != null)
fs.Close();
}
return inUse;//true表示正在使用,false没有使用
}
/// <summary>
/// 删除文件夹
/// </summary>
/// <param name="fileDirect"></param>
/// <param name="saveDay"></param>
private static void DeleteFile(string fileDirect, int saveDay)
{
DateTime nowTime = DateTime.Now;
DirectoryInfo root = new DirectoryInfo(fileDirect);
DirectoryInfo[] dics = root.GetDirectories();//获取文件夹
FileAttributes attr = File.GetAttributes(fileDirect);
if (attr == FileAttributes.Directory)//判断是不是文件夹
{
foreach (DirectoryInfo file in dics)//遍历文件夹
{
TimeSpan t = nowTime - file.CreationTime; //当前时间 减去 文件创建时间
int day = t.Days;
if (day > saveDay) //保存的时间 ; 单位:天
{
Directory.Delete(file.FullName, true); //删除超过时间的文件夹
}
}
}
}
}
C# LoggingHelp 自定义记录日志帮助类的更多相关文章
- Android 自定义Activity基类与TitleBar
我们在开发App的时候有时候碰到多个界面有一个共同点的时候,比如,都有相同的TitleBar,并且TitleBar可以设置显示的文字.TitleBar上的点击事件,如果给每一个Activity都写一遍 ...
- hadoop编程小技巧(5)---自定义输入文件格式类InputFormat
Hadoop代码测试环境:Hadoop2.4 应用:在对数据需要进行一定条件的过滤和简单处理的时候可以使用自定义输入文件格式类. Hadoop内置的输入文件格式类有: 1)FileInputForma ...
- WPF自定义窗口基类
WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义.继承自定义窗口的类xaml文件的根节点就不再是<Window>,而是自定义窗口类名(若自定义窗口与继承者不在同一个命名 ...
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- 利用NSUserdefaults来存储自定义的NSObject类及自定义类数组
利用NSUserdefaults来存储自定义的NSObject类及自定义类数组 1.利用NSUserdefaults来存储自定义的NSObject类 利用NSUserdefaults也可以来存储及获取 ...
- 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中
自定义一个HorizontalScrollView类,主要为了让这个HorizontalScrollView不能鼠标点击,不能左右按键,并且没有焦点. public class ImageMoveHo ...
- WPF自学入门(九)WPF自定义窗口基类
今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform的窗体继承是很好用的,写一个基础窗体,直接在后台代码改写继承窗体名.但如果是WPF要继承窗体,我个人感觉没有理解 ...
- java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类
package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...
- C#自定义FTP访问类的代码
如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...
- va注解应用实例 - Annotation, 自定义注解, 注解类规则【转】
本文介绍了java的自定义注解及注解类编写的规则, 并通过实例来说明下如何使用java的注解. 实例演示了注解在类,构造方法,方法和字段的使用. 可以从这里下载到完成的工程代码: http://dl. ...
随机推荐
- cnpack导致view快捷键失灵。
学习d10.3.出现怪问题: 卸载cnpack出现: 这下要用快捷键了.那可不烦透了. 如此就ok了. 鸡蛋好吃,还要知道母鸡如何生蛋的?
- Unbuntu16搭建Kafka环境总结
1.安装Kafka 环境说明 OS:Ubuntu 16.04 Zookeeper:zookeeper 3.4.5 Kafka:kafka_2.11-0.11.0.0 jdk:jdk8(Kafka启动需 ...
- 详细介绍MessageQueueSelector
一.MessageQueueSelector 详解 MessageQueueSelector 是 RocketMQ 提供的一个接口,用于自定义消息发送时的队列选择策略. 通过实现该接口, 开发者可以控 ...
- 配置jenkins的shell自动打包的脚本
#!/bin/bash#服务名称SERVER_NAME=jenkins-test# 源jar路径,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomca ...
- AutoFac(三)——装配扫描(批量注册之扫描类型)
一.装配扫描 Autofac允许通过常规组装的方式去注册组件(构造方法.实例.lambda表达式等),您可以扫描和注册单个类型,也可以具体的扫描Autofac模块去注册. 1.扫描类型 除了已知的的常 ...
- 最强AI数字人,口型、表情、动作全同步!Kairos下载介绍
在数字化浪潮汹涌澎湃的今天,视频合成技术如同一颗璀璨的明星,照亮了内容创作的广阔天地 Kairos是一款顶级数字人制作工具,它基于先进的 AI 算法,能够快速克隆出用户的数字分身,并且精准匹配外貌.声 ...
- codeup之学生查询
Description 输入n个学生的信息,每行包括学号.姓名.性别和年龄,每一个属性使用空格分开.最后再输入一学号,将该学号对应的学生信息输出. Input 测试数据有多组,第一行为样例数m.对于每 ...
- ES查不到最近的数据解决方法
其实是因为索引的刷新策略导致的,不是实时刷新的. 下载开源的 ES 界面客户端ES King:https://github.com/Bronya0/ES-King 连接后,选择索引,选择flush索引 ...
- [网鼎杯 2020 朱雀组]Nmap 1
[网鼎杯 2020 朱雀组]Nmap 1 这个题目主要考察的是nmap的常用命令和escapeshell函数 Nmap 相关参数 -iL 读取文件内容,以文件内容作为搜索目标 -o 输出到文件 举例 ...
- L1-2、Prompt 的基础结构拆解
--写得"清楚",AI才"聪明" Prompt 不只是"让 AI 帮我做事"的指令,它是一种对任务的精准建模,写得越准.越具体,AI 表现就 ...