zoukankan      html  css  js  c++  java
  • C#中web项目使用log4net日志

      我准备把log4net的实现方法放在一个类库项目中,别的项目直接引用该类库,即可进行日志的记录,操作步骤如下:

    1.下载log4net.dll文件

    2.在解决方案下创建类库项目

    3.把log4net.dll添加到上面创建的类库引用中

    4.在web项目下,创建单独的log4net配置文件(当然,也可以写在web.config里),配置文件的内容如下

    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
      <log4net>
        <!--定义输出到文件中-->
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--定义文件存放位置-->
          <file type="log4net.Util.PatternString" value="C:iWSCloud\%date{yyyy-MM}AllLogsALL_%date{yyyy-MM-dd}.log" />
          <appendToFile value="true"/>
          <rollingStyle value="Date"/>
          <datePattern value="yyyy-MM-dd"/>
          <staticLogFileName value="true"/>
          <param name="MaxSizeRollBackups" value="100"/>
          <layout type="log4net.Layout.PatternLayout">
            <!--输出格式-->
            <!--样例:2015-02-05 14:41:32,164 [16] INFO  File - info-->
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
          </layout>
        </appender>
        <root>     
          <level value="DEBUG"/>
          <!--文件形式记录日志-->
          <appender-ref ref="RollingLogFileAppender"/>
        </root>
      </log4net>
    </configuration>

    5.在类库项目的AssemblyInfo.cs 文件中添加对web项目log4net.config文件的监视,代码为

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

    6.在类库项目中添加类文件Logs.cs,创建日志帮助方法,代码为

    using log4net;
    using System;
                 
    namespace myTest //出于保护,命名控件名进行了更改
    {
        public class Logs
        {
            #region log4net实例化声明
            private static readonly ILog log;
            #endregion
    
            /// <summary>
            /// 静态构造方法
            /// </summary>
            static Logs()
            {
                //GetLogger("File"),日志输出“ File - 日志信息”
                //如果是GetLogger(typeof(类名)),则日志输出 “类名 - 日志信息”。
                //例如:GetLogger(typeof(Logs)),日志输出“Logs - 日志信息”
                log = LogManager.GetLogger("File");
            }
    
            /// <summary>
            /// Debug级别日志
            /// </summary>
            /// <param name="message">信息</param>
            public static void LogDebug(Object message)
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug(message);
                }
            }
    
            /// <summary>
            /// Debug级别日志
            /// </summary>
            /// <param name="message">信息</param>
            /// <param name="exception">异常</param>
            public static void LogDebug(Object message, Exception exception) 
            {
                if (log.IsDebugEnabled) 
                {
                    log.Debug(message, exception);
                }
            }
    
            /// <summary>
            /// Info级别日志
            /// </summary>
            /// <param name="message">信息</param>
            public static void LogInfo(Object message) 
            {
                if (log.IsInfoEnabled)
                {
                    log.Info(message);
                }
            }
    
            /// <summary>
            /// Info级别日志
            /// </summary>
            /// <param name="message">信息</param>
            /// <param name="exception">异常</param>
            public static void LogInfo(Object message, Exception exception) 
            {
                if (log.IsInfoEnabled) 
                {
                    log.Info(message,exception);
                }
            }
    
            /// <summary>
            /// Warn级别日志
            /// </summary>
            /// <param name="message">信息</param>
            public static void LogWarn(Object message)
            {
                if (log.IsWarnEnabled)
                {
                    log.Warn(message);
                }
            }
    
            /// <summary>
            /// Warn级别日志
            /// </summary>
            /// <param name="message">信息</param>
            /// <param name="exception">异常</param>
            public static void LogWarn(Object message, Exception exception) 
            {
                if (log.IsWarnEnabled)
                {
                    log.Warn(message, exception);
                }
            }
    
            /// <summary>
            /// Error级别日志
            /// </summary>
            /// <param name="message">信息</param>
            public static void LogError(Object message)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error(message);
                }
            }
    
            /// <summary>
            /// Error级别日志
            /// </summary>
            /// <param name="message">信息</param>
            /// <param name="exception">异常</param>
            public static void LogError(Object message, Exception exception)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error(message, exception);
                }
            }
    
            /// <summary>
            /// Fatal级别日志
            /// </summary>
            /// <param name="message">信息</param>
            public static void LogFatal(Object message)
            {
                if (log.IsFatalEnabled)
                {
                    log.Fatal(message);
                }
            }
    
            /// <summary>
            /// Fatal级别日志
            /// </summary>
            /// <param name="message">信息</param>
            /// <param name="exception">异常</param>
            public static void LogFatal(Object message, Exception exception)
            {
                if (log.IsFatalEnabled)
                {
                    log.Fatal(message, exception);
                }
            }
    
        }
    }

    7.现在把该类库项目生成一下,这样在希望使用日志功能的项目里直接添加对该类库的引用即可,比如在web项目中要使用日志功能,我把该类库的dll添加到了我的项目里

       下面是我的代码结构

    8.使用的方式是:Logs.LogInfo("记录日志信息。");其他的方法跟此类似,不再赘述。

    后续说明:以上的日志的配置文件是一个独立的配置文件(log4net.config)。当然也可以把配置文件合并到Web项目自带的配置文件当中,配置内容如下,

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
      <appSettings>
        <!--Excel磁盘路径-->
        <add key="filePath" value="C:alley	empws02.xlsx" />
        <!--数据所在的Sheet名-->
        <add key="sheetName" value="ws02" />
        <add key="ClientSettingsProvider.ServiceUri" value="" />
      </appSettings>
      <log4net>
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--定义文件存放位置-->
          <file type="log4net.Util.PatternString" value="C:DrizzleAlleyLog\%date{yyyy-MM}\%date{yyyy-MM-dd}.log" />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <datePattern value="yyyy-MM-dd" />
          <staticLogFileName value="true" />
          <param name="MaxSizeRollBackups" value="100" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
          </layout>
        </appender>
        <root>
          <level value="All" />
          <appender-ref ref="RollingLogFileAppender" />
        </root>
      </log4net>
      <system.web>
        <membership defaultProvider="ClientAuthenticationMembershipProvider">
          <providers>
            <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
          </providers>
        </membership>
        <roleManager defaultProvider="ClientRoleProvider" enabled="true">
          <providers>
            <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
          </providers>
        </roleManager>
      </system.web>
    </configuration>

    这里需要说明的一点是以下配置项必须放是 <configuration>的第一个子项,要不然会报错。

    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>

    这样在类库项目的AssemblyInfo.cs 文件中添加对web项目log4net.config文件的视应该修改为如下形式,

    //watch config
    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
  • 相关阅读:
    TextOut和DrawText
    VC中字符串定义
    #define new DEBUG_NEW
    洛谷【P2257】 YY的GCD
    Lizards and Basements 2 解题报告
    在windows服务中添加WCF
    从数据库中获得表的字段和描述信息
    sql格式化工具
    在XPSP3中添允许多个远程桌面的步骤
    无法连接到WCF的异常
  • 原文地址:https://www.cnblogs.com/lishidefengchen/p/4274924.html
Copyright © 2011-2022 走看看