温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在.net中使用log4net

发布时间:2021-12-17 16:05:33 来源:亿速云 阅读:144 作者:小新 栏目:开发技术

小编给大家分享一下怎么在.net中使用log4net,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创建日志记录步骤

第一步,

当然是添加log4net.dll的引用啦

第二步,

在AssemblyInfo.cs文件中添加下面一句话:

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

这句话的意思是log4net会自动寻找配置文件App.config或Web.config从而获得并加载其中的配置信息。如果想log4net随时监视配置文件以便重新加载的话就要这样写按照上面一样写(winform程序ConfigFile为App.config)。

第三步,

配置Web.config。

<configuration>
 
  <configSections>
 
        <!--注意:这里需要添加-->
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
   </configSections>
  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
 
   
 
   <!--注意:这里需要添加-->
 
   <log4net>
 
 
        <!--定义输出到文件中-->
        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <!--定义文件存放位置-->
            <file value="C:\log.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value="yyyyMMdd-HH:mm:ss" />
            <layout type="log4net.Layout.PatternLayout">
                <!--输出格式-->
                <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
                <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
            </layout>
        </appender>
 
 
        <!--定义输出到控制台命令行中-->
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>
 
 
        <!--定义输出到windows事件中-->
        <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>
 
 
        <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
        <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
            <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
            <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
            <!--定义各个参数-->
            <parameter>
                <parameterName value="@logDate" />
                <dbType value="String" />
                <size value="240" />
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%date" />
                </layout>
            </parameter>
            <parameter>
                <parameterName value="@thread" />
                <dbType value="String" />
                <size value="240" />
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%thread" />
                </layout>
            </parameter>
            <parameter>
                <parameterName value="@logLevel" />
                <dbType value="String" />
                <size value="240" />
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%level" />
                </layout>
            </parameter>
            <parameter>
                <parameterName value="@logger" />
                <dbType value="String" />
                <size value="240" />
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%logger" />
                </layout>
            </parameter>
            <parameter>
                <parameterName value="@message" />
                <dbType value="String" />
                <size value="240" />
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%message" />
                </layout>
            </parameter>
        </appender>
 
 
        <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
        <root>
            <!--文件形式记录日志-->
            <appender-ref ref="LogFileAppender" />
            <!--控制台控制显示日志-->
            <appender-ref ref="ConsoleAppender" />
            <!--Windows事件日志-->
            <!--<appender-ref ref="EventLogAppender" />-->
            <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
                <appender-ref ref="AdoNetAppender_Access" />
            -->
        </root>
 
    </log4net>
 
 
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpModules>
 
      <add name="fileUpload" type="WebApplication3.ProcessFileModule"/>
    </httpModules>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>
 
    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>
 
    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
      </providers>
    </profile>
 
    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>
    <httpRuntime maxRequestLength="10240000"/>
  </system.web>
 
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
 
</configuration>

上面这段配置取自周公,配置的说明上面已经注释的比较详细了。

第四步,

在程序中记录信息。我们在项目下Default.aspx的Page_Load方法加入如下代码:

//获得log4net实例
ILog log = log4net.LogManager.GetLogger("LogFileAppender");
log.Info("Default.aspx下面的PageLoad方法被执行");

然后运行项目,可以发现在c:\log4netfile.txt中已经记录了一条日志信息:

记录时间:2011-04-21 21:26:17,729 线程ID:[4] 日志级别:INFO  出错类:LogFileAppender property:[(null)] - 错误描述:Default.aspx下面的PageLoad方法被执行

通过上面这几步我想您已经能够为程序创建一些简单日志记录功能了。下面我们再来详细说说log4net其他的一些使用方法与特点。

log4net详细说明

这里我通过问答的形式来说明log4net的一些应用。

1.log4net总共有几种记录方式,每种方式该如何配置与使用?

Log4net目前支持的输出方式包括:

  • 1 AdoNetAppender
    将日志记录到数据库中。可以采用SQL和存储过程两种方式。

  • 2 AnsiColorTerminalAppender
    在ANSI 窗口终端写下高亮度的日志事件。

  • 3 AspNetTraceAppender
    能用asp.net中Trace的方式查看记录的日志。

  • 4 BufferingForwardingAppender
    在输出到子Appenders之前先缓存日志事件。

  • 5 ConsoleAppender
    将日志输出到控制台。

  • 6 EventLogAppender
    将日志写到Windows Event Log.

  • 7 FileAppender
    将日志写到文件中。

  • 8 LocalSyslogAppender
    将日志写到local syslog service (仅用于UNIX环境下).

  • 9 MemoryAppender
    将日志存到内存缓冲区。

  • 10 NetSendAppender
    将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

  • 11 RemoteSyslogAppender
    通过UDP网络协议将日志写到Remote syslog service。

  • 12 RemotingAppender
    通过.NET Remoting将日志写到远程接收端。

  • 13 RollingFileAppender
    将日志以回滚文件的形式写到文件中。

  • 14 SmtpAppender
    将日志写到邮件中。

  • 15 TraceAppender
    将日志写到.NET trace 系统。

  • 16 UdpAppender
    将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

可以看到目前支持的方式还是很多的,我这里调几个认为常用的做个例子。

1.文件的方式我们上面已经讲过了,这里不再做例子了。

2.数据库方式:

首先,添加数据库记录appender

<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
        <!--数据库连接字符串-->
        <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
        <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
        <!--定义各个参数-->
        <parameter>
            <parameterName value="@logDate" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@thread" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%thread" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@logLevel" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@logger" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%logger" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@message" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message" />
            </layout>
        </parameter>
    </appender>

然后建立c:log4net.mdb 数据库,并在代码中启用数据库记录方式:

//获得log4net实例
ILog log = log4net.LogManager.GetLogger("AdoNetAppender_Access");
log.Debug("Default.aspx下面的PageLoad方法被执行");

这样日志就被记录到数据库中了。

2.log4net如何过滤我想要的日志信息,比如一个日志中只记录程序错误日志?

这个需求可以通过配置filter来实现。具体操作如下:

全局方式:

这种方式会将级别应用于所有的日志输入方式。具体操作为在root节点下添加:

<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
    比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
-->
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="ERROR" />

这样对于所有的日志记录方式,所有地域ERROR级别的都不会被记录了。

单独配置级别方式:

该方式不会影响其他的日志输入方式。方法如下为,在具体的appender下添加filter:

<filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR" />
     <param name="LevelMax" value="Fatal" />
 </filter>

这种方式可以配置记录级别的方位,如果只需要记录一种,则最大和最小设置一样就行了。

3.你上面的日志输出格式我不喜欢,如何在log4net中配置我想要的日志输出格式?

log4net的输入格式定义在每个appender的layout中。具体的有以下内置可选项:

%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个字符则以空格填充。

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

4.有没有方式控制程序自动按日期记录日志信息,即每天的日志都在不同的日志文件中?

其实这种方式对应于一种特定的记录方式:RollingFileAppender。这种方式也是基于文件记录的,不过他提供更加灵活的日志记录方式。具体说来他可以按日志文件的大小或者日志记录的时间进行自动变换日志文件。

按每天不同的日期进行记录分类:

<appender name="RollingLogFileAppenderEveryMin" type="log4net.Appender.RollingFileAppender">
 
<!--日志文件名开头-->
 
<file value="c:\logfile.txt" />
 
<!--是否追加到文件-->
 
<appendToFile value="true" />
 
<!--变换的形式为日期-->
 
<rollingStyle value="Date" />
 
<!--日期的格式,每分钟换一个文件记录-->
 
<datePattern value="yyyyMMdd-HHmm" />
 
<layout type="log4net.Layout.PatternLayout">
 
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
 
</layout>
 
</appender>

按照日志文件的大小进行变换,通过这种方式可以有效降低日志文件体积膨胀的问题:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
 
<!--日志文件名-->
 
<file value="c:\log.txt"/>
 
<!--是否在文件中追加-->
 
<appendToFile value="true"/>
 
<!--按照文件的大小进行变换日志文件-->
 
<rollingStyle value="Size"/>
 
<!--最大变换数量,如果超过这个数量则从第一个文件开始复写-->
 
<maxSizeRollBackups value="10"/>
 
<!--最大文件大小,支持KB,MB,GB-->
 
<maximumFileSize value="100KB"/>
 
<!--日志文件名是否为静态-->
 
<staticLogFileName value="true"/>
 
<layout type="log4net.Layout.PatternLayout">
 
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
 
</layout>
 
</appender>

以上是“怎么在.net中使用log4net”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI