log4net 保存日志到本地

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

具体使用

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/&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.运行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值