最近在写一些 C# 的程序,想找一个记录日志的软件,当然会想起在 java 中大名鼎鼎的 log4j ,查了一下还真的发现有 .net 版的,就上网找了一些资料学了一下,把它用起来再说,用法很简单,只要把 Log4Net.dll 加入工程中,然后在 App.config 添加如下配置文件:
<? xml version="1.0" encoding="utf-8" ?>
< configuration >
< configSections >
< section name ="log4net" type ="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</ configSections >
< log4net >
<!-- 定义输出到文件中 -->
< appender name ="LogFileAppender" type ="log4net.Appender.FileAppender">
<!-- 定义文件存放位置 -->
< file value ="log.log" />
< layout type ="log4net.Layout.PatternLayout">
<!-- 每条日志末尾的文字说明 -->
< footer value ="[Footer]--Test By Ring1981 " />
<!-- 输出格式
每种转换符号都以 % 开始,后面跟着一个格式符号和换符号。
%- 数字 :该项的最小长度,小于最小长度的用空格填充
%m(message): 输出的日志消息
%n(new line): 换行
%d(datetime): 输出当前语句运行的时刻
%r(run time): 输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id): 当前语句所在的线程 ID
%p(priority): 日志的当前优先级别,即 DEBUG 、 INFO 、 WARN… 等
%c(class): 当前日志对象的名称,
%L(line ) :输出语句所在的行号
%F(file name) :输出语句所在的文件名
%logger 日志名称
-->
< conversionPattern value =" 时间 :%date [ 线程 :%thread] %-5level [ 类 :%c][%L 行 ]%n %-5level:%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" /-->
< conversionPattern value =" 时间 :%date [ 线程 :%thread] %-5level [ 类 :%c][%L 行 ]%n %-5level:%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 >
<!--RollingFileAppender 是输出源也是输出到文件中,只是以自增长的方式 -->
< appender name ="RollingLogFileAppender" type ="log4net.Appender.RollingFileAppender">
< param name ="File" value ="log/system_log_"/>
<!-- 是否覆盖 -->
< param name ="AppendToFile" value ="true"/>
<!-- 设置无限备份 =-1 ,最大备份数为 1000-->
< param name ="MaxSizeRollBackups" value ="100"/>
<!-- 每个文件的最大 20k-->
< param name ="MaximumFileSize" value ="1KB"/>
<!-- 名称是否可以更改 为 false 为可以更改 -->
< param name ="StaticLogFileName" value ="false"/>
<!-- 文件名称 -->
< param name ="DatePattern" value ="yyyyMMdd".log""/>
< param name ="RollingStyle" value ="Date"/>
< layout type ="log4net.Layout.PatternLayout">
<!--conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline" /-->
< conversionPattern value =" 时间 :%date [ 线程 :%thread] %-5level [ 类 :%c][%L 行 ]%n %-5level:%message%newline" />
</ layout >
</ appender >
<!-- 定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。 -->
< root >
< appender-ref ref ="LogFileAppender" />
< appender-ref ref ="ConsoleAppender" />
< appender-ref ref ="EventLogAppender" />
< appender-ref ref ="RollingLogFileAppender" />
</ root >
</ log4net >
</ configuration >
然后在 AssemblyInfo.cs 文件最后加入 [assembly: log4net.Config.DOMConfigurator()] 即可用了
示例:
class Program
{
private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static void Main( string [] args)
{
log.Debug( " 测试日志 " );
log.Info( " 测试日志 " );
log.Warn( " 测试日志 " );
Console.Read();
}
}
运行效果: