WPF之lognet4的基本使用

log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文介绍lognet4的基本使用。

第一步:新建一个项目LoginUI,然后在该项目下新建一个日志管理类LogManager,再添加对lognet4.dll的引用


namespace LoginUI
{
    public class LogManager
    {
        private static LogManager _instance;
 
        private static log4net.ILog _logger;
 
        protected LogManager()
        {
            InitialiseLogger();
        }
 
        public static LogManager Instance
        {
            get
            {
                if (_instance == null)
                    _instance = new LogManager();
                return _instance;
            }
        }
 
        public log4net.ILog Logger
        {
            get { return _logger; }
        }
 
        void InitialiseLogger()
        {
            //通过系统配置文件配置logger ,GUIClientLogger这个名称和待会配置文件中的名称要一致
            _logger = log4net.LogManager.GetLogger("GUIClientLogger");
        }
    }
} 
View Code

第二步:在项目的配置文件App.Config中添加下述代码

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0" />
  </configSections>
  <log4net>
    <root>
      <level value="WARN" />
      <appender-ref ref="LogFileAppender" />
      <!--<appender-ref ref="ConsoleAppender" />-->
    </root>
 
    <logger name="GUIClientLogger">
      <level value="ALL" />
    </logger>
 
    <!--输出到文件-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log/" />
      <param name="AppendToFile" value="true" />
 
      <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
      <param name="MaxSizeToRollBackups" value="-1" />
 
      <!-- 每个文件的大小限制  -->
      <param name="MaximumFileSize" value="30MB" />
 
      <!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
      <param name="RollingStyle" value="Composite" />
 
      <!--设置文件名后缀的格式,那个&quot;起到的作用是转义,就是把.log当作字面义,而不是时间日期的格式定义,如果要改为txt的格式,把log改为txt即可-->
      <param name="DatePattern" value='yyyy-MM-dd/"GUIClientLog.log"' />
      <!--<param name="DatePattern" value='yyyy-MM-dd/"&quot;GUIClientLog_&quot;yyyyMMdd&quot;.log&quot;"' />-->
      <param name="PreserveLogFileNameExtension" value="true" />
 
      <!-- 关掉固定文件名-->
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="Header" value="[Header]
" />
        <param name="Footer" value="[Footer]
" />
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ALL" />
        <param name="LevelMax" value="OFF" />
      </filter>
    </appender>
 
    <!--输出控制台-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>
  </log4net>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
</configuration> 
View Code

第三步:在AsseembllyInfo.cs中添加下述代码

[assembly:log4net.Config.XmlConfigurator(ConfigExtension="Config",Watch=true)]
View Code

输出样式:

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

第四步:使用LoggerManager记录日志信息,btnLogin是那个登陆按钮,点击按钮后就能在启动目录下的Log文件夹下的日志文件看到一条日志消息。

  private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            User user = new User("10001", "zxtang");

            if (txtUserId.Text == user.UserID && txtPassWord.Password == user.Password)
            {
                LogManager.Instance.Logger.Info(string.Format("User [{0}] login  Successd.", txtUserId));
                //发送消息
                Messenger.Default.Send("", "logIn");
                Close();
            }
            else
            {
                Messenger.Default.Send("","logOut");
                LogManager.Instance.Logger.Info(string.Format("User [{0}] login Falied.", txtUserId));
                return;
            }
        }
View Code

 

posted @ 2021-01-12 12:55  WellMandala  阅读(613)  评论(0编辑  收藏  举报