当前位置: 代码迷 >> 综合 >> log4net 保存日志到本地
  详细解决方案

log4net 保存日志到本地

热度:71   发布时间:2023-09-22 22:26:50.0

在项目中记录日志是个不错习惯,可以查看项目运行状况

具体使用

1.添加引用

log4net 保存日志到本地

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/&quot;Error.log&quot;" /><!--追加到文件--><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.运行结果

log4net 保存日志到本地

log4net 保存日志到本地