欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#使用log4net记录日志

程序员文章站 2022-12-14 22:26:20
一、下载log4net.dll(百度云里面有)文件,然后再在项目中添加引用。 二、在AssemblyInfo.cs文件中添加log4net.dll的参数。 三、右击项目→添加→新建项→xxx配置文件(web或者winform……)并修改名字叫:log4net.config→右击生成出来的log4ne ......

 

一、下载log4net.dll(百度云里面有)文件,然后再在项目中添加引用。

二、在assemblyinfo.cs文件中添加log4net.dll的参数。

[assembly: log4net.config.xmlconfigurator(configfile = "log4net.config", configfileextension = "config", watch = true)]

三、右击项目→添加→新建项→xxx配置文件(web或者winform……)并修改名字叫:log4net.config→右击生成出来的log4net.config→属性→将 “复制到输出目录” 的值改为 如果较新则复制。

在configuration节点下添加下面这段

<log4net>
  <!--错误日志类-->
  <logger name="logerror"><!--日志类的名字-->
    <level value="all" /><!--定义记录的日志级别-->
    <appender-ref ref="errorappender" /><!--记录到哪个介质中去-->
  </logger>
  <!--信息日志类-->
  <logger name="loginfo">
    <level value="all" />
    <appender-ref ref="infoappender" />
  </logger>
  <!--错误日志附加介质-->
  <appender name="errorappender" type="log4net.appender.rollingfileappender"><!-- name属性指定其名称,type则是log4net.appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
    <param name="file" value="log\\logerror\\" /><!--日志输出到exe程序这个相对目录下-->
    <param name="appendtofile" value="true" /><!--输出的日志不会覆盖以前的信息-->
    <param name="maxsizerollbackups" value="100" /><!--备份文件的个数-->
    <param name="maxfilesize" value="10240" /><!--当个日志文件的最大大小-->
    <param name="staticlogfilename" value="false" /><!--是否使用静态文件名-->
    <param name="datepattern" value="yyyymmdd&quot;.htm&quot;" /><!--日志文件名-->
    <param name="rollingstyle" value="date" /><!--文件创建的方式,这里是以date方式创建-->
    <!--错误日志布局-->
    <layout type="log4net.layout.patternlayout">
      <param name="conversionpattern" value="&lt;hr color=red&gt;%n异常时间:%d [%t] &lt;br&gt;%n异常级别:%-5p &lt;br&gt;%n异 常 类:%c [%x] &lt;br&gt;%n%m &lt;br&gt;%n &lt;hr size=1&gt;"  />
    </layout>
  </appender>
  <!--信息日志附加介质-->
  <appender name="infoappender" type="log4net.appender.rollingfileappender">
    <param name="file" value="log\\loginfo\\" />
    <param name="appendtofile" value="true" />
    <param name="maxfilesize" value="10240" />
    <param name="maxsizerollbackups" value="100" />
    <param name="staticlogfilename" value="false" />
    <param name="datepattern" value="yyyymmdd&quot;.htm&quot;" />
    <param name="rollingstyle" value="date" />
    <!--信息日志布局-->
    <layout type="log4net.layout.patternlayout">
      <param name="conversionpattern" value="&lt;hr color=blue&gt;%n日志时间:%d [%t] &lt;br&gt;%n日志级别:%-5p &lt;br&gt;%n日 志 类:%c [%x] &lt;br&gt;%n%m &lt;br&gt;%n &lt;hr size=1&gt;"  />
    </layout>
  </appender>
</log4net>
下面是其他的一些配置
//这种配置,是将日志写入到文本文件当中,若是需要将日志已其他形式保存,可以看 http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html
        
<param name="file" value="logger/"/>//日志存放位置(这里的value值是一个logger,表示在项目文件夹中创建一个名叫logger的文件。也可以是value="c:\log.txt")
<param name="appendtofile" value="true"/>//是否追加到文件
<param name="rollingstyle" value="date"/>//变换的形式为日期
<param name="datepattern" value="&quot;logs_&quot;yyyymmdd&quot;.txt&quot;"/>//生成格式;每天生成一个日志
<param name="staticlogfilename" value="false"/>//日志文件名,是否固定不变
<layout type="log4net.layout.patternlayout,log4net">
<param name="conversionpattern" value="%d [%t] %-5p %c - %m%n"/>//这3行表示日志输出的格式,若不喜欢这样的样式,可以查看下面的输出样式,自行修改
<param name="header" value="&#xa;----------------------header--------------------------&#xa;"/>
<param name="footer" value="&#xa;----------------------footer--------------------------&#xa;"/>    

输出样式:

%m(message):输出的日志消息,如ilog.debug(…)输出的一条消息 
%n(new line):换行 
%d(datetime):输出当前语句运行的时刻 
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 
%t(thread id):当前语句所在的线程id 
%p(priority): 日志的当前优先级别,即debug、info、warn…等 
%c(class):当前日志对象的名称,例如: 
%f(file):输出语句所在的文件名。 
%l(line):输出语句所在的行号。 
%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。

通过这些东西,你可以任意组合你喜欢的输出格式内容。

四、使用log4net记录日志

1添加一个帮助类loghelper

    public class loghelper
    {
        public static readonly log4net.ilog loginfo = log4net.logmanager.getlogger("loginfo");
        public static readonly log4net.ilog logerror = log4net.logmanager.getlogger("logerror");
        public static void writelog(string info)
        {
            if (loginfo.isinfoenabled)
            {
                loginfo.info(info);
            }
        }

        public static void writelog(string info, exception ex)
        {
            if (logerror.iserrorenabled)
            {
                logerror.error(info, ex);
            }
        }
    }

2、在代码中记录错误

        protected void page_load(object sender, eventargs e)
        {
            try
            {
                string a = "ff";
                int b = convert.toint32(a);
            }
            catch (exception ex){
                loghelper.writelog(ex.message.tostring(), ex);
            }
        }

如何是在web中,可以创建global.asax页面,

右击项目→添加→新建项目→选择web中的全局应用程序类。

在global.asax.cs文件中,找到application_error方法中,增加写入错误日志的代码。

exception ex = server.getlasterror().getbaseexception(); //获取异常源 
然后使用上面的方法记录就可以了

 如果项目使用的框架是 client profile版本的是不能使用log4net的,请将框架修改相对应的完整版的  项目→xxx属性→修改目标框架。

参考:https://www.cnblogs.com/xuxuzhaozhao/p/6640623.html