.NET Framework下使用log4net

1.新建类库CSharpUtils

工具-》NuGet包管理器-》管理解决方案的NuGet程序包,输入log4net,安装

log4net.config文件

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
        <file value=".\Log\Debug.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
        <lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
        <datePattern value="yyyyMMdd" />
        <countDirection value="1"/>
        <maxSizeRollBackups value="-1" />
        <!--<maximumFileSize value="10MB" />-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date|%logger|%message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="DEBUG" />
            <levelMax value="DEBUG" />
        </filter>
    </appender>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
        <file value=".\Log\Error.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
        <lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
        <datePattern value="yyyyMMdd" />
        <countDirection value="1"/>
        <maxSizeRollBackups value="-1" />
        <!--<maximumFileSize value="1MB" />-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date|%logger|%message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="ERROR" />
            <levelMax value="ERROR" />
        </filter>
    </appender>    
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
        <file value=".\Log\Info.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
        <lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
        <datePattern value="yyyyMMdd" />
        <countDirection value="1"/>
        <maxSizeRollBackups value="-1" />
        <!--<maximumFileSize value="1MB" />-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date|%logger|%message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />
            <levelMax value="INFO" />
        </filter>
    </appender>
    <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
        <file value=".\Log\Warn.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
        <lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
        <datePattern value="yyyyMMdd" />
        <countDirection value="1"/>
        <maxSizeRollBackups value="-1" />
        <!--<maximumFileSize value="1MB" />-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date|%logger|%message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="WARN" />
            <levelMax value="WARN" />
        </filter>
    </appender>
    <appender name="FatalAppender" type="log4net.Appender.RollingFileAppender">
        <file value=".\Log\Fatal.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
        <lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
        <datePattern value="yyyyMMdd" />
        <countDirection value="1"/>
        <maxSizeRollBackups value="-1" />
        <!--<maximumFileSize value="1MB" />-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date|%logger|%message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="FATAL" />
            <levelMax value="FATAL" />
        </filter>
    </appender>
  <root>
        <level value="ALL"/>
        <appender-ref ref="DebugAppender" />
        <appender-ref ref="ErrorAppender" />
        <appender-ref ref="InfoAppender" />
        <appender-ref ref="WarnAppender" />
        <appender-ref ref="FatalAppender" />
        <appender-ref ref="AdoNetAppender" />
    </root>
</log4net>

AssemblyInfo.cs文件

LogEvent.cs文件

using System;
using System.Collections.Generic;
using System.Text;

namespace CSharpUtils.Log4netUtil
{
    public interface ILogEventHandler
    {
        void LogEventHandler(LogEventArgs e);
    }
    public enum LogLevel
    {
        DEBUG, ERROR, WARN, INFO, FATAL
    }
    public sealed class LogEventArgs : EventArgs
    {
        private Exception ex = null;
        private LogLevel level = LogLevel.DEBUG;
        private Type type = null;
        private String msg = String.Empty;
        public LogEventArgs(Type type, LogLevel lvl, String msg, Exception ex)
        {
            this.level = lvl;
            this.msg = msg;
            this.type = type;
            this.ex = ex;
        }
        public Type Type
        {
            get { return this.type; }
        }
        public Exception Ex
        {
            get { return this.ex; }
            set { this.ex = value; }
        }
        public LogLevel Level
        {
            get { return this.level; }
        }
        public String Msg
        {
            get { return this.msg; }
            set { this.msg = value; }
        }
        public override string ToString()
        {
            return this.type == null ? Msg : this.type.ToString() + ":" + Msg;
        }
    }
    public delegate void LogEventHandler(LogEventArgs e);
}

Log4netWriter.cs文件

using System;
using System.Collections.Generic;
using System.Text;
using log4net;

namespace CSharpUtils.Log4netUtil
{
    public class Log4netWriter
    {
        private static readonly Object m_lock = new object();
        private static LogEventHandler formLogEventHandler = null;
        private Log4netWriter()
        {
        }

        public static void RegistFormLogEventHandler(LogEventHandler handler)
        {
            formLogEventHandler += handler;
        }

        public static void UnRegistFormLogEventHandler(LogEventHandler handler)
        {
            formLogEventHandler -= handler;
        }

        public static void WriteLog(LogEventArgs e)
        {
            InnerWriteLog(e);
            if (formLogEventHandler != null)
            {
                formLogEventHandler.Invoke(e);
            }
        }
        private static void InnerWriteLog(LogEventArgs e)
        {
            if (e == null)
                return;
            ILog logger = e.Type == null?LogManager.GetLogger(""):
                LogManager.GetLogger(e.Type);
            switch (e.Level)
            {
                case LogLevel.DEBUG:
                default:
                    {
                        logger.Debug(e.Msg, e.Ex);
                        break;
                    }
                case LogLevel.ERROR:
                    {
                        logger.Error(e.Msg, e.Ex);
                        break;
                    }
                case LogLevel.INFO:
                    {
                        logger.Info(e.Msg, e.Ex);
                        break;
                    }
                case LogLevel.WARN:
                    {
                        logger.Warn(e.Msg, e.Ex);
                        break;
                    }
                case LogLevel.FATAL:
                    {
                        logger.Fatal(e.Msg, e.Ex);
                        break;
                    }
            }
        }
    }

}

A项目调用时,在A下添加CSharpUtils项目引用,并放一份log4net.config

Log4netWriter.WriteLog(new LogEventArgs(typeof(Program),LogLevel.ERROR, "日志唉唉唉",ex));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值