Log4net

本文介绍了Log4net日志框架V1.2.10的安装配置过程及使用方法,包括下载、编译、配置文件详解等,并提供了WinForms与ASP.NET程序中的配置实例。此外还推荐了一个日志查看工具log4NetDashboard。

   一、Log4net使用简介(V1.2.10):
   1.http://logging.apache.org/log4net/downloads.html下载incubating-log4net-1.2.10.zip
   2.解压后目录结构:
                                   
   3.打开Src目录下的工程,用sn工具生成密钥对,编译生成Release版本的Log4net.dll。
   4.在应用程序中添加Log4net.dll的引用。
   5.配置Log4net时,需要熟悉的是Logger、Appender 以及 Layout。.Logger 是日志记录器,我们使用其相关方法来完成日志记录;Appender 用于设置日志的存储方式和位置,Logger 的配置中会绑定一个或多个 Appender;Layout 关联具体的 Appender,用于设置日志字符串的格式。
      Log4net配置文件可写在应用程序的配置文件中,也可写成单独的文件,这里使用单独文件形式(文件名与后缀名可自定义),示例Log4netConfig.xml:
   

Log4net配置:RollingFileInfoAppender、AdoNetAppender、SmtpAppender
  <?xml version="1.0" encoding="utf-8" ?> 
<log4net debug="false">
<appender name="RollingFileInfoAppender" type="log4net.Appender.RollingFileAppender">
  
<file value="D:\\Log\\Info\\" /> 
  
<appendToFile value="true" /> 
  
<maximumFileSize value="100KB" /> 
  
<maxSizeRollBackups value="2" /> 
  
<StaticLogFileName value="false" /> 
  
<DatePattern value="yyyyMMdd".htm"" /> 
  
<RollingStyle value="Date" /> 
<layout type="log4net.Layout.PatternLayout">
  
<ConversionPattern value="<HR COLOR=red>%n记录时间: %d [%t] <BR>%n日志级别: %-5p<BR>%n日志记录器: %c[%x]<BR>%n%m <BR>%n <HR Size=1>" /> 
  
</layout>
  
</appender>
<appender name="RollingFileErrorAppender" type="log4net.Appender.RollingFileAppender">
  
<file value="D:\\Log\\Error\\" /> 
  
<appendToFile value="true" /> 
  
<maximumFileSize value="100KB" /> 
  
<maxSizeRollBackups value="2" /> 
  
<StaticLogFileName value="false" /> 
  
<DatePattern value="yyyyMMdd".htm"" /> 
  
<RollingStyle value="Date" /> 
<layout type="log4net.Layout.PatternLayout">
  
<ConversionPattern value="<HR COLOR=red>%n异常时间: %d [%t] <BR>%n异常级别: %-5p<BR>%n异常记录器: %c[%x]<BR>%n%m <BR>%n <HR Size=1>" /> 
  
</layout>
  
</appender>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  
<bufferSize value="1" /> 
<!-- 表示批处理的日志事件,可以避免每次日志事件都访问数据库
  
--> 
  
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
  
<connectionString value="data source=dbServer;initial catalog=LogTest;integrated security=false;persist security info=True;User ID=id;Password=pwd" /> 
  
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
<parameter>
  
<parameterName value="@log_date" /> 
  
<dbType value="DateTime" /> 
  
<layout type="log4net.Layout.RawTimeStampLayout" /> 
  
</parameter>
<parameter>
  
<parameterName value="@thread" /> 
  
<dbType value="String" /> 
  
<size value="255" /> 
<layout type="log4net.Layout.PatternLayout">
  
<conversionPattern value="%thread" /> 
  
</layout>
  
</parameter>
<parameter>
  
<parameterName value="@log_level" /> 
  
<dbType value="String" /> 
  
<size value="50" /> 
<layout type="log4net.Layout.PatternLayout">
  
<conversionPattern value="%level" /> 
  
</layout>
  
</parameter>
<parameter>
  
<parameterName value="@logger" /> 
  
<dbType value="String" /> 
  
<size value="255" /> 
<layout type="log4net.Layout.PatternLayout">
  
<conversionPattern value="%logger" /> 
  
</layout>
  
</parameter>
<parameter>
  
<parameterName value="@message" /> 
  
<dbType value="String" /> 
  
<size value="4000" /> 
<layout type="log4net.Layout.PatternLayout">
  
<conversionPattern value="%message" /> 
  
</layout>
  
</parameter>
<parameter>
  
<parameterName value="@exception" /> 
  
<dbType value="String" /> 
  
<size value="2000" /> 
  
<layout type="log4net.Layout.ExceptionLayout" /> 
  
</parameter>
  
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender,log4net">
  
<to value="Weiwei.Jiang@BenQ.com" /> 
  
<from value="virtualApp@BenQ.com" /> 
  
<username value="username" /> 
  
<password value="password" /> 
  
<smtpHost value="smtpHost" /> 
  
<subject value="Hi,this is test logging message" /> 
  
<bufferSize value="1" /> 
  
<lossy value="false" /> 
<evaluator type="log4net.Core.LevelEvaluator,log4net">
  
<threshold value="FATAL" /> 
  
</evaluator>
<layout type="log4net.Layout.PatternLayout,log4net">
  
<conversionPattern value="%property{log4net:HostName} :: %level :: %message %newlineLogger: %logger%newlineThread: %thread%newlineDate: %date%newlineNDC: %property{NDC}%newline%newline" /> 
  
</layout>
  
</appender>
<root>
  
<level value="DEBUG" /> 
  
<appender-ref ref="" /> 
  
</root>
<logger name="LogInfo">
  
<level value="INFO" /> 
  
<appender-ref ref="RollingFileInfoAppender" /> 
  
</logger>
<logger name="LogError">
  
<level value="ERROR" /> 
  
<appender-ref ref="RollingFileErrorAppender" /> 
  
</logger>
<logger name="AdoNetLogger">
  
<level value="WARN" /> 
  
<appender-ref ref="AdoNetAppender" /> 
  
</logger>
<logger name="SmtpLogger">
  
<level value="FATAL" /> 
  
<appender-ref ref="SmtpAppender" /> 
  
</logger>
  
</log4net>

      所有 Logger 的参数设置都直接或间接继承自 root,其继承关系类似 namespace。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。 
      在创建 Logger 设置时,需要注意 "level" 参数。Log4net 允许我们通过该参数调整日志记录级别,只有高于或等于该级别的日志才会被记录下来。   
      ( Highest) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (Lowest)

   6.在应用程序中添加程序集关联:[assembly: log4net.Config.XmlConfigurator(ConfigFile="Log4netConfig.xml",Watch=true)],其中ConfigFile就是你存放Log4net配置信息的文件名(加后缀)。
      WinForms程序是在AssemblyInfo.cs中添加,而Asp.net程序可在AssemblyInfo.cs或者Global.asax中添加。
      (使用相对路径时在WinForms程序中配置文件(示例Log4netConfig.xml)需放在Bin目录下)

   7.Log4net初始化配置,Asp.net程序在Global.asax中的Application_Start方法中添加如下代码:
      log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("Log4netConfig.xml"));       
      初始化配置是可选的,如果没有显示的进行初始化在第一次调用时Log4net会先进行初始化,但官方文挡上的建议是在程序运行时就将Log4net进行初始化。

   8.在程序中调用:
   

调用示例
private static readonly ILog LogInfo = LogManager.GetLogger("LogInfo");

private void LogTest()
   
{
        
if (LogInfo.IsInfoEnabled)
       
{
             LogInfo.Info(
"Logging info!");    //向文件中记录操作信息
       }

   }

二、Log4net日志查看工具:
      log4Net Dashboard是一个不错的日志查看工具,针对的apprender是AdoNetAppender,也就是以数据库形式记录的日志。使用时,只要简单的配置一下数据库连接字符串就可以了。运行效果:


      下载地址:http://www.l4ndash.com/Download/tabid/53/Default.aspx

转载于:https://www.cnblogs.com/Jiangww0924/archive/2007/06/09/777418.html

### 配置 log4net 的基本步骤 log4net 是一个功能强大的日志记录框架,广泛应用于 .NET 开发中。其配置方式通常分为两种:通过代码手动配置,或通过外部配置文件(如 `App.config` 或 `Web.config`)进行配置。以下是一个典型的 log4net 配置示例: 在 `App.config` 或 `Web.config` 文件中添加如下配置: ```xml <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="logfile.log" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="ConsoleAppender" /> <appender-ref ref="FileAppender" /> </root> </log4net> </configuration> ``` 上述配置定义了两个日志输出目标(Appender):一个是控制台输出,另一个是文件输出。日志格式通过 `PatternLayout` 定义,包含日期、线程名、日志级别、记录器名称以及日志信息[^1]。 ### 使用 log4net 记录日志 在代码中使用 log4net 记录日志非常简单。首先,需要通过 `LogManager.GetLogger` 方法获取一个 `ILogger` 实例,然后调用 `Debug`、`Info`、`Warn`、`Error`、`Fatal` 等方法记录不同级别的日志信息。例如: ```csharp using System; using log4net; using log4net.Config; public class Program { private static readonly ILog logger = LogManager.GetLogger(typeof(Program)); public static void Main(string[] args) { // 加载配置文件 XmlConfigurator.Configure(); logger.Debug("这是一个调试日志"); logger.Info("这是一个信息日志"); logger.Warn("这是一个警告日志"); logger.Error("这是一个错误日志"); logger.Fatal("这是一个致命错误日志"); try { // 模拟异常 int a = 5; int b = 0; int c = a / b; } catch (Exception ex) { logger.Error("发生了一个异常", ex); } } } ``` 在上述代码中,`XmlConfigurator.Configure()` 方法用于加载配置文件中的 log4net 设置。之后,通过 `logger` 实例记录各种级别的日志信息,并在捕获异常时记录错误信息[^1]。 ### 常见问题及解决方案 1. **日志未输出到预期目标** 确保在应用程序启动时调用了 `XmlConfigurator.Configure()` 方法,并检查配置文件中是否正确指定了 Appender 和 Layout。此外,确认日志级别设置是否符合预期,例如 `root` 节点的 `level` 值是否为 `DEBUG` 或更低级别。 2. **日志文件无法写入** 检查应用程序是否有权限写入指定的日志文件路径。如果使用的是 `FileAppender`,确保 `file` 属性指定的路径存在且应用程序具有写入权限。 3. **性能问题** log4net 的性能通常表现良好,但在高并发环境下可能会遇到性能瓶颈。可以通过调整日志级别、减少日志输出频率或使用异步日志记录(如 `log4net.Appender.AsyncForwardingAppender`)来优化性能。 4. **配置文件未正确加载** 如果配置文件未被正确加载,log4net 将使用默认配置。可以通过在代码中添加 `log4net.Util.LogLog.InternalOutput = Console.WriteLine;` 来启用内部日志,以便查看配置加载过程中的详细信息。 通过以上步骤,可以有效地配置和使用 log4net,确保应用程序能够高效、可靠地记录日志信息。对于更复杂的场景,如数据库日志记录、远程日志传输等,可以进一步探索 log4net 提供的高级功能[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值