在项目中记录日志是个不错习惯,可以查看项目运行状况
具体使用
1.添加引用
2.新增log4net配置文件
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<!--根配置-->
<root>
<!--日志级别ERROR-->
<level value="ERROR" />
</root>
<!-- 错误 Error.log-->
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="C:\hy_laboratory" />
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Error.log"" />
<!--追加到文件-->
<appendToFile value="true" />
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite" />
<!--写到一个文件-->
<staticLogFileName value="false" />
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB" />
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1" />
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
</appender>
</log4net>
3.如果是cs项目在 App.config 配置 bs在Web.config配置 方法一样
此处CS结构 App.config 配置文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!--log4net-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
<connectionStrings>
<add name="locDB" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\gqs\GitProject\数据库文件\S800.mdb" />
</connectionStrings>
<!--把配置文件注册进来-->
<log4net configSource="Config\log4net.config" />
</configuration>
4.新建类 Log
using log4net;
using System;
using System.Collections.Generic;
using System.Text;
namespace Laboratory
{
/// <summary>
/// 日志
/// </summary>
public class Log
{
/// <summary>
/// log4net接口
/// </summary>
private ILog logger;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="log">日志操作对象</param>
public Log(ILog log)
{
this.logger = log;
}
/// <summary>
/// 错误日志
/// </summary>
public void Error(object message)
{
this.logger.Error(message);
}
}
}
5.新建工厂类 LogFactory
using log4net;
using System;
using System.Collections.Generic;
using System.Text;
namespace Laboratory
{
public class LogFactory
{
/// <summary>
/// 构造函数
/// </summary>
static LogFactory()
{
//配置文件加载进来
log4net.Config.XmlConfigurator.Configure();
}
/// <summary>
/// 获取日志操作对象
/// </summary>
/// <param name="str">名字</param>
/// <returns></returns>
public static Log GetLogger(string str)
{
return new Log(LogManager.GetLogger(str));
}
}
}
6.新建类 LogFormat(这个根据自己项目情况 可以在使用的位置直接格式化,新建类是为了方便扩展和管理)
using System;
using System.Collections.Generic;
using System.Text;
namespace Laboratory
{
public class LogFormat
{
public static string ErrorFormat(Exception ex)
{
StringBuilder builder = new StringBuilder();
builder.Append("1.主机IP: >>> " + Utils.GetLoctionIp() + "\r\n");
builder.Append("2.时间: >>> " + DateTime.Now.ToString() + "\r\n");
builder.Append("3.异常类型: >>> " + ex.GetType().Name + "\r\n");
builder.Append("4.异常信息: >>> " + ex.Message + "\r\n");
builder.Append("4.堆栈信息: >>> " + ex.StackTrace + "\r\n");
builder.Append("---------------------------------------------------------------------------------------------------------------\r\n");
return builder.ToString();
}
}
}
7.调用例子(CS项目全局异常处理)
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Text;
namespace Laboratory
{
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
private static void Main()
{
//设置应用程序处理异常方式:ThreadException处理
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//处理非UI线程异常
// AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
// MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
var log = LogFactory.GetLogger("化验室同步程序");
string msg = LogFormat.ErrorFormat(e.Exception);
log.Error(msg);
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
var log = LogFactory.GetLogger("化验室同步程序");
string msg = LogFormat.ErrorFormat((Exception)e.ExceptionObject);
log.Error(msg);
}
}
}
8.运行结果