1 将 log4net.dll 拷到 Debug 目录
2 项目/右击依赖项 / 添加项目引用 / 点击“浏览”按钮 / 选择dll / 确定
3 右击 log4net.config / 属性 / 复制到输出目录 选择 “如果较新则复制”
4 App.config
<configuration>
<configSections>
</configSections>
<log4net configSource="log4net.config" />
</configuration>
5 AssemblyInfo.cs 增加如下代码
[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch =true)]
6 MainWindow.xaml.cs 增加如下代码
using log4net;
using log4net.Config;
7 log 输出
public static ILog logger = LogManager.GetLogger(typeof(MainWindow));
string strLog = string.Format("log message test {0} , {1}", 123, "abc");
logger.Debug("Debug " + strLog);
logger.Info("Info " + strLog);
logger.Error("Error " + strLog);
8 WPF 工程控制台输出,右击项目属性 / 应用程序 / 输出类型 / 选择 “控制台应用程序”
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--
https://www.cnblogs.com/linybo/p/14046171.html
https://www.cnblogs.com/shanzhiming/p/12207896.html
https://www.jianshu.com/p/0b0731f04a39
-->
<configSections>
<!-- log4net的定义 -->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<root>
<!--Level几种取值: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->
<level value="ALL" />
<!--文件形式记录日志-->
<appender-ref ref="LogFileAppender" />
<appender-ref ref="InfoAppender" />
<appender-ref ref="ErrorAppender" />
<!--控制台控制显示日志-->
<appender-ref ref="ConsoleAppender" />
</root>
<logger name="loginfo">
<level value="INFO" />
<appender-ref ref="InfoAppender" />
<additivity value="true"/>
</logger>
<logger name="logerror">
<level value="ERROR" />
<appender-ref ref="ErrorAppender" />
</logger>
<!-- 将日志输出到控制台 -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--保存路径 项目启动时自动创建log、logError文件-->
<file value="Log/debug/" />
<encoding value="utf-8" />
<appendToFile value="true" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Date" />
<!--这是按日期产生文件夹-->
<datePattern value="yyyyMMdd'_debug.log'" />
<!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,
数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->
<param name="MaxFileSize" value="1048576" />
<!--保留的log文件数量 超过此数量后 自动删除之前的, 只有在 按Size分割时有效 设定值value="-1"为不限文件数-->
<param name="MaxSizeRollBackups" value="100" />
<param name="RollingStyle" value="Composite" />
<!--根据文件的大小和日期滚动文件-->
<!--是否只写到一个文件中-->
<param name="StaticLogFileName" value="false" />
<!-- layout 控制Appender的输出格式,也可以是xml 一个Appender只能是一个layout-->
<!-- <param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger
操作者ID:%property{Operator} 操作类型:%property{Action}%n 当前机器名:%property%n当前机器名及登录用户:%username %n
记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n" />
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority):等同于:%level 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称
%f(file):输出语句所在的文件名。
%l(line):输出语句所在的行号。
%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。(因为日志的几个等级的单词长度不一样,通过设置字符长度,可以示日志更加整齐)
-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] %l: %message%newline" />
</layout>
<!--layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %nDatetime:%utcdate %nHostName:%property{log4net:HostName} %nThreadID:[%thread] %nLogLevel: %-5level %nClassName:%logger property: [%property{NDC}] - %nDescription:%message%newline %n" />
</layout-->
</appender>
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/info/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd'_info.txt'" />
<param name="MaxFileSize" value="1048576" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<!-- 等级过滤 -->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO"/>
<levelMax value="INFO"/>
<!-- <param name="LevelToMatch" value="INFO" />-->
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log/error/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd'_error.txt'" />
<param name="MaxFileSize" value="1048576" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<!-- 等级过滤 -->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="OFF"/>
<!-- <param name="LevelToMatch" value="INFO" />-->
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level %logger %l: %message%newline" />
</layout>
<!--< > = <> %n = 回车-->
</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>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="bobby.chopra@prcm.com"/>
<from value="TagFileUploader@prcm.com"/>
<subject value="TagFileUploader ERROR"/>
<smtpHost value="prc-mn-ex01"/>
<bufferSize value="512"/>
<lossy value="true"/>
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
</log4net>
</configuration>
500

被折叠的 条评论
为什么被折叠?



