asp.net 页面中引用log4net,添加日志操作

最近在一个项目中使用到了log4net.dll用于记录操作日志,从网上找的大部分资料都是在每个需要输出日志的类中都先声明一下,然后再调用它的输出函数,如debug,error等等

如果是一个小的项目,这样比较简单,使用起来很容易,但是如果项目涉及多个解决方案,比如我现在的贸易系统项目,每天的流水会达到几个亿,会涉及多个操作类型,因此就需要有详细的日志记录信息,

如果还用以前的方式会比较麻烦,因此就按照项目需要,单独创建一个dll用于实现记录日志。

1、下载一个log4net.dll

2、创建一个类库如:LogUtility,添加log4net.dll的引用

添加一个类LogHelper.cs,用于执行日志写入

public class LogHelper
    {
        private const string m_ConfigName = "log4net.config";

        static LogHelper()
        {
            InitConfig();
        }

        public static void WriteLog(LogLevelType logLevel, object message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            DoWriteLog(log, logLevel, message);
        }

        public static void WriteLog(string logAreaName, LogLevelType logLevel, object message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(logAreaName);
            DoWriteLog(log, logLevel, message);
        }
        public static void WriteLog(LogLevelType logLevel, object message, Exception exception)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            DoWriteLog(log, logLevel, message, exception);
        }

        public static void WriteLog(string logAreaName, LogLevelType logLevel, object message, Exception exception)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(logAreaName);
            DoWriteLog(log, logLevel, message, exception);
        }

        public static void InitConfig()
        {
            log4net.Config.XmlConfigurator.Configure();
        }

        /// <summary>
        /// 初始化配置信息
        /// </summary>
        /// <param name="configFile">log4net.config路径</param>
        public static void InitConfig(string configFile)
        {
            if (System.IO.File.Exists(configFile))
            {
                log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(configFile));
            }
        }

        public static log4net.ILog GetLogger(string logName)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(logName);
            return log;
        }

        private static void DoWriteLog(ILog log, LogLevelType logLevel, object message)
        {
            switch (logLevel)
            {
                case LogLevelType.DEBUG:
                    if (log.IsDebugEnabled)
                    {
                        log.Debug(message);
                    }
                    break;
                case LogLevelType.INFO:
                    if (log.IsInfoEnabled)
                    {
                        log.Info(message);
                    }
                    break;
                case LogLevelType.WARN:
                    if (log.IsWarnEnabled)
                    {
                        log.Warn(message);
                    }
                    break;
                case LogLevelType.ERROR:
                    if (log.IsErrorEnabled)
                    {
                        log.Error(message);
                    }
                    break;
                case LogLevelType.FATAL:
                    if (log.IsFatalEnabled)
                    {
                        log.Fatal(message);
                    }
                    break;
                default:
                    break;
            }
        }
        private static void DoWriteLog(ILog log, LogLevelType logLevel, object message, Exception exception)
        {
            switch (logLevel)
            {
                case LogLevelType.DEBUG:
                    if (log.IsDebugEnabled)
                    {
                        log.Debug(message, exception);
                    }
                    break;
                case LogLevelType.INFO:
                    if (log.IsInfoEnabled)
                    {
                        log.Info(message, exception);
                    }
                    break;
                case LogLevelType.WARN:
                    if (log.IsWarnEnabled)
                    {
                        log.Warn(message, exception);
                    }
                    break;
                case LogLevelType.ERROR:
                    if (log.IsErrorEnabled)
                    {
                        log.Error(message, exception);
                    }
                    break;
                case LogLevelType.FATAL:
                    if (log.IsFatalEnabled)
                    {
                        log.Fatal(message, exception);
                    }
                    break;
                default:
                    break;
            }
        }

  还需要添加一个日志级别的类LogLevelType.cs 用于区分日志的类型

    /// <summary>
    /// 日志级别
    /// </summary>
    public enum LogLevelType
    {
        DEBUG = 1,
        INFO = 2,
        WARN = 3,
        ERROR = 4,
        FATAL = 5
    }

  由于项目涉及多个解决方案,还需要创建一个类LogArea:用于区分日志的使用区域

      /// <summary>
      /// 日志区域
    /// </summary>
    public class LogArea
    {
        /// <summary>
        /// 系统管理
        /// </summary>
        public const string SYSTEM = "SYSTEM";

        //等等
    }

 

3、在Web解决方案中,引用刚刚创建的dll,并且添加log4net.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
  </configSections>

  <log4net>
    <appender name="PmsLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="Logs\%date{yyyy-MM}\AllLogs\ALL_%date{yyyy-MM-dd}.log" />
      <appendToFile value="true" />
      <datePattern value="yyyy-MM-dd" />
      <rollingStyle value="Date" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>

    <root>
      <!--level级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF -->
      <level value="ERROR"/>
      <appender-ref ref="PmsLogFileAppender" />
    </root>

    <logger name="SYSTEM">
      <level value="ERROR"/>
      <appender-ref ref="PmsLogFileAppender" />
    </logger>
  </log4net>
</configuration>

  在项目中AssemblyInfo.cs添加

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

  

4、在需要添加日志的方法中,引用dll

/// <summary>
        /// 根据用户名与密码检查登录用户是否存在
        /// </summary>
        /// <param name="UserID">用户名</param>
        /// <param name="PassWord">用户密码</param>
        /// <returns>返回查询用户存在真值</returns>
        public bool CheckUser(string UserID, string PassWord)
        {
            DBHelper db = new DBHelper();		//通用数据操作类
            SqlParameter[] prams = {
										db.MakeInParam("@UserID", SqlDbType.VarChar, 20, UserID),
										db.MakeInParam("@Password", SqlDbType.VarChar, 20, PassWord),
									};
            try
            {
                int intReturnValue = db.ExecuteProc("Wygl_System_UserAuthorization_CheckLoginUser", prams);
                return intReturnValue == 1 ? true : false;
            }
            catch//(Exception exc)
            {
                LogHelper.WriteLog(LogArea.SYSTEM, LogLevelType.ERROR, "系统警告:检验登录用户过程中出错!");
                return false;
            }
        }

  即可

效果图:

首次使用,如果有错误,请理解,谢谢

时间: 2024-10-10 20:41:10

asp.net 页面中引用log4net,添加日志操作的相关文章

在asp.net core的项目中通过log4net添加日志记录到本地文件

=============================================== 2020/2/25_第1次修改                       ccb_warlock =============================================== 由于之前的时间都忙于项目的业务开发,对于log4net的使用一直是“拿来主义”,仅仅用在了调试时输出到控制台看结果,而没有深究配置文件的参数和具体的机制. 正巧这段时间项目进度没有那么紧张,我也有时间来完善框

asp.net 页面中添加普通视频的几种方式

第一种 是通过调用window media player进行播放诸如:wmv,asf等格式文件: <object align=center class="OBJECT" classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 height=320 id=MediaPlayer width=356> <param name="ShowStatusBar" value="-1"> 

如何在ASP.NET页面中使用异步任务(PageAsyncTask)

在页面加载期间,可能有些操作是要比较耗用时间的(例如调用外部资源,要长时间等待其返回),正常情况下,这个操作将一直占用线程.而大家知道,ASP.NET在服务端线程池中的线程数是有限的,如果一直占用的话,就会导致其他操作需要等待. 在ASP.NET 2.0中,提供了一种异步页的技术.微软有一个专门的文档介绍这个技术 看看下面这个图,很重要 [注意]ASP.NET的异步机制与windows From的异步机制有一个根本区别,就是因为Response不可以分布发送到客户端的,所以,这个异步的效果对客户

ASP.NET页面中去除VIEWSTATE视图状态乱码

首先声明下这篇文章:本文章的发表于2014-10-11日,原作者和版权所有:KoalaAPI(还是本人啦),原链接:http://www.cnblogs.com/KoalaAPI/p/4018727.html(曾被删除!) 保存页的所有视图状态信息和控件状态信息. 作者在早期参与的项目中曾遇到这样的需求:基于SEO技术的开发,当因为时没有接触的MVC框架的 Razor 引擎,所以只能用ASP.NET引擎,如果使用ASP.NET引擎的服务器端控件,那么在ASP.NET页面中就会生成 __Views

在ASP.NET MVC中使用NuGet添加SignalR类库之后,再次运行程序时,它出现了一个异常:

自从在ASP.NET MVC中使用NuGet添加SignalR类库之后,再次运行程序时,它出现了一个异常: Server Error in '/' Application. The following errors occurred while attempting to load the app.- No assembly found containing an OwinStartupAttribute.- No assembly found containing a Startup or [

使用CSS3对页面中的文字添加彩色边框

<!doctype html> <html> <head> <meta charset="utf-8"> <title>使用CSS3对页面中的文字添加彩色边框</title> <style>  #boarder{  border:solid 5px blue;  border-radius:20px;  -moz-border-radius:20px;  padding:20px;  width:180

使用CSS2对页面中的文字添加彩色边框

<!doctype html> <html> <head> <meta charset="utf-8"> <title>使用CSS2对页面中的文字添加彩色边框</title> <style> #boarder{  margin:3px;  width:180px;  padding-left:14px;  border-width:5px;  border-style:solid;  height:10

[转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求

在没有做题目中所述的内容的时候,感觉这应该是很简单的东西,但是当真正开始做的时候却发现,有很多问题现在在这里写出来,供和我一样水平不高的参考一下. 在写本文之前参照了一下文章 欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212 http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html C#通过webRequest保持在同一Session中Post数据 http://blog.c

asp.net mvc中加入log4net记录错误日志

首先添加加log4net的dll,推荐用nuget.... 贴上配置文件 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net&q