日志管理-Log4net

引言

  log4net库是Apache log4j框架在Micorsoft.NET平台的实现,是一个帮组程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。(百度百科)

  实际项目中使用log4net极大的方便程序猿记录系统运行过程中的日志信息,特别是对bs系统说是一个比较实用的工具。本文简单解释它的使用过程,都是最基本的最简单的运用,没有其他多余的解释只是简单使用。

使用步骤:

步骤一:

  在项目文件中创建一个类库,本例使用类库名:Log4NetUtility。引用log4net库的dll,添加配置文件log4net.cfg.xml,注意将该文件的属性设置为始终复制。配置文件都是一些固定的格式,可以做一些简单的改动。基本内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <!--日志记录组建配置-->
  <log4net debug="true">
    <!-- 调试日志配置 -->
    <appender name="DebugAppender" type="log4net.Appender.DebugAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date][%thread][%-5level][%c] - %message%newline" />
      </layout>
    </appender>

    <!-- 文件日志配置 -->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <staticLogFileName value="false"/>
      <maxSizeRollBackups value="-1" />
      <datePattern value="yyyy-MM-dd_HH‘.log‘" />
      <lockingModel value="log4net.Appender.FileAppender.MinimalLock" />
      <file value="Log\\" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date][%thread][%-5level]%message%newline" />
      </layout>
    </appender>

    <!-- Setup the root category, add the appenders and set the default priority -->
    <root>
      <level value="ALL" />
      <appender-ref ref="DebugAppender" />
    </root>

    <logger name="FileLogLogger" additivity="false">
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </logger>
  </log4net>
</configuration>

步骤二:

  编写日志方法,如下:

public class Log4NetUtility
    {
        private static ILog fileLogger = LogManager.GetLogger("FileLogLogger");
        private static ILog debugLogger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        static Log4NetUtility()
        {
            string binPath = System.AppDomain.CurrentDomain.BaseDirectory;
            string webFfileName = binPath + @"bin\Config\log4net.cfg.xml";
            string appFileName = binPath + @"Config\log4net.cfg.xml";
            if (File.Exists(webFfileName))
                log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(webFfileName));
            else if (File.Exists(appFileName))
                log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(appFileName));
            else
                Console.WriteLine("找不到Log4net配置文件");
        }
        public static void DebugLog(String message)
        {
            debugLogger.Debug(message);
        }
        public static void Debug(object o, string message, Exception exception)
        {
            Type type = o.GetType();
            fileLogger.Debug(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message), exception);
        }
        public static void Debug(object o, String message)
        {
            Type type = o.GetType();
            fileLogger.Debug(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message));
        }
        public static void Debug(String typeName, String message, Exception exception)
        {
            fileLogger.Debug(string.Format("[{0}] - {1}", typeName, message), exception);
        }
        public static void Debug(String typeName, String message)
        {
            fileLogger.Debug(string.Format("[{0}] - {1}", typeName, message));
        }
        public static void Info(object o, String message, Exception exception)
        {
            Type type = o.GetType();
            fileLogger.Info(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message), exception);
        }
        public static void Info(object o, String message)
        {
            Type type = o.GetType();
            fileLogger.Info(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message));
        }
        public static void Info(string typeName, String message, Exception exception)
        {
            fileLogger.Info(string.Format("[{0}] - {1}", typeName, message), exception);
        }
        public static void Info(string typeName, String message)
        {
            fileLogger.Info(string.Format("[{0}] - {1}", typeName, message));
        }
        public static void Warn(object o, String message, Exception exception)
        {
            Type type = o.GetType();
            fileLogger.Warn(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message), exception);
        }
        public static void Warn(object o, String message)
        {
            Type type = o.GetType();
            fileLogger.Warn(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message));
        }
        public static void Warn(string typeName, String message, Exception exception)
        {
            fileLogger.Warn(string.Format("[{0}] - {1}", typeName, message), exception);
        }
        public static void Warn(string typeName, String message)
        {
            fileLogger.Warn(string.Format("[{0}] - {1}", typeName, message));
        }
        public static void Error(object o, String message, Exception exception)
        {
            Type type = o.GetType();
            fileLogger.Error(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message), exception);
        }
        public static void Error(object o, String message)
        {
            Type type = o.GetType();
            fileLogger.Error(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message));
        }
        public static void Error(string typeName, String message, Exception exception)
        {
            fileLogger.Error(string.Format("[{0}] - {1}", typeName, message), exception);
        }
        public static void Error(string typeName, String message)
        {
            fileLogger.Error(string.Format("[{0}] - {1}", typeName, message));
        }
        public static void Fatal(object o, String message, Exception exception)
        {
            Type type = o.GetType();
            fileLogger.Fatal(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message), exception);
        }
        public static void Fatal(object o, String message)
        {
            Type type = o.GetType();
            fileLogger.Fatal(string.Format("[{0}.{1}] - {2}", type.Namespace, type.Name, message));
        }
        public static void Fatal(string typeName, String message, Exception exception)
        {
            fileLogger.Fatal(string.Format("[{0}] - {1}", typeName, message), exception);
        }
        public static void Fatal(string typeName, String message)
        {
            fileLogger.Fatal(string.Format("[{0}] - {1}", typeName, message));
        }
    }

步骤三:

  系统内进行调用:

Log4NetUtility.Log4NetUtility .Error(this, "log4net日志错误记录");

  至此,log4net的简单应用就介绍完了,本文还是那句话,就是介绍它的一些简单用法,告诉你如何使用它,具体其内部的原理还有更深层的东西还是交给以后吧。

时间: 2024-08-02 23:07:48

日志管理-Log4net的相关文章

使用Common.Logging+log4net规范日志管理

Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大的具体实现,也可以用其它不同的实现,如EntLib的日志.NLog等. Common.Logging可以通过修改配置,更换不同的日志实现类,而不需要修改任何代码. .net 项目使用CommonLogging: 1.添加必要的程序集:Common.Logging.dll.Common.Logging.Core.dll.Common.Logging.log4net1

ABP日志管理

ABP日志管理 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 本文由东莞-天道提供翻译 Server side(服务器端) ASP.NET Boilerplate使用Castl

基于DDD的现代ASP.NET开发框架--ABP系列之8、ABP日志管理

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 本文由东莞-天道提供翻译 Server side(服务器端) ASP.NET Boilerplat

slf4j+logback搭建超实用的日志管理模块

文章转自http://www.2cto.com/kf/201702/536097.html slf4j+logback搭建超实用的日志管理模块(对日志有编号管理):日志功能在服务器端再常见不过了,我们非常有必要记录下发生在服务器上的活动,这些日志将用于debug.统计等各种用途. slf4j+logback这种实现方式是很常见的,好处自然是方便!.在这篇文章中,你将看到如何使用logback搭建你自己的日志组件并将日志输出到文件.如何查看这些文件.如何为每个线程上的访问分配独有的一个日志id.

linux 学习 14 日志管理

第十四讲 日志管理 14.1 日志管理-简介 1.日志服务 ?在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的,所以学习起来基本和syslogd服务一致. ?rsyslogd的新特点: ?基于TCP网络协议传输日志信息; ?更安全的网络传输方式: ?有日志消息的及时分析框架: ?后台数据库: ?配置文件中可以写简单的逻辑判断: ?与sysl

MySQl Study学习之--MySQl二进制日志管理

MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log):   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库(DML)的语句的执行时间信息    不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能    主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新    用于在主复制服务器上记录所有将发送

SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)

首先我们为什么需要做日志管理,在现实的上线中我们经常会遇到系统出现异常或者问题.这个时候就马上打开CRT或者SSH连上服务器拿日子来分析.受网络的各种限制.于是我们就想为什么不能直接在管理后台查看报错的信息呢.于是日志管理就出现了. 其次个人觉得做日志管理最好的是Aop,有的人也喜欢用拦截器.都可以,在此我重点介绍我的实现方式. Aop有的人说拦截不到Controller.有的人说想拦AnnotationMethodHandlerAdapter截到Controller必须得拦截org.sprin

java程序日志管理

初入软件开发这一行的人,可能对日志管理的概念并不是很明确,大概是由于经验所限,以至于根本还考虑不到这个问题. 而从某种意义上来说,日志管理实际上也不需要初入这一行的人来管,他们只需要负责实现自己的主要业务逻辑和功能就好了. 我当初刚入行的时候就有很长一段时间完全不用去关心日志,到后来偶尔涉及到的时候,也都是从其他地方采用cv大法直接搬用. 不过,随着工作时间的变化,随着手头上任务重要程度的变化,也随着接触到的项目数量的变化,让我越来越意识到日志的重要性,它在整个系统中发挥着至关重要的作用! 尤其

Linux的日志管理

Linux日志的管理 日志:记录了你几乎所有的操作记录,用于系统的审核,故障的排除.日志文件永久存放在日志目录中,系统日志保存在/var/log中 rsyslog 按照日志类型分类,把所有日志记录到/var/log目录下. /var/log/messages是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵. /var/log/secure 与安全相关的日志. /var/log/cron 与计划任务相关的日志. /var/log/boot.log与系统启动的相关日志,只保留本次系