log4net配置

(转)非常完善的Log4net详细说明
转自:http://www.cnblogs.com/zhangchenliang/p/4546352.htmlhttp://www.cnblogs.com/zhangchenliang/p/4546352.html

(转)非常完善的Log4net详细说明

1、概述
log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统日志,如何扩展以输出自定义字段。

2、一个简单的使用实例
第一步:在项目中添加对log4net.dll的引用,这里引用版本是1.2.10.0。

第二步:程序启动时读取log4net的配置文件。

如果是CS程序,在根目录的Program.cs中的Main方法中添加:

log4net.Config.XmlConfigurator.Configure();

如果是BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加:

log4net.Config.XmlConfigurator.Configure();

无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句:

[assembly: log4net.Config .XmlConfigurator()]

也可以使用自定义的配置文件,具体请参见4.4 关联配置文件。

第三步:修改配置文件。如果是CS程序,则在默认的App.config文件(没有新建一个)中添加内容;如果是BS程序,则添加到Web.config文件中,添加内容一样,这里不再列出。

App.config文件添加内容如下:

//

// Copyright 2001-2005 The Apache Software Foundation

//

// Licensed under the Apache License, Version 2.0 (the “License”);

// you may not use this file except in compliance with the License.

// You may obtain a copy of the License at

//

// http://www.apache.org/licenses/LICENSE-2.0

//

// Unless required by applicable law or agreed to in writing, software

// distributed under the License is distributed on an “AS IS” BASIS,

// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

// See the License for the specific language governing permissions and

// limitations under the License.

//

endregion

using System;

using System.Reflection;

using System.Collections;

using log4net;

using log4net.Core;

using log4net.Repository;

using log4net.Repository.Hierarchy;

namespace TGLog.ExpandILog

{

public class MyLogManager

{

    #region Static Member Variables



    /// <summary>

    /// The wrapper map to use to hold the <see cref="EventIDLogImpl"/> objects

    /// </summary>

    private static readonly WrapperMap s_wrapperMap = new WrapperMap(newWrapperCreationHandler(WrapperCreationHandler));



    #endregion



    #region Constructor



    /// <summary>

    /// Private constructor to prevent object creation

    /// </summary>

    private MyLogManager() { }



    #endregion



    #region Type Specific Manager Methods



    /// <summary>

    /// Returns the named logger if it exists

    /// </summary>

    /// <remarks>

    /// <para>If the named logger exists (in the default hierarchy) then it

    /// returns a reference to the logger, otherwise it returns

    /// <c>null</c>.</para>

    /// </remarks>

    /// <param name="name">The fully qualified logger name to look for</param>

    /// <returns>The logger found, or null</returns>

    public static IMyLog Exists(string name)

    {

        return Exists(Assembly.GetCallingAssembly(), name);

    }



    /// <summary>

    /// Returns the named logger if it exists

    /// </summary>

    /// <remarks>

    /// <para>If the named logger exists (in the specified domain) then it

    /// returns a reference to the logger, otherwise it returns

    /// <c>null</c>.</para>

    /// </remarks>

    /// <param name="domain">the domain to lookup in</param>

    /// <param name="name">The fully qualified logger name to look for</param>

    /// <returns>The logger found, or null</returns>

    public static IMyLog Exists(string domain, string name)

    {

        return WrapLogger(LoggerManager.Exists(domain, name));

    }



    /// <summary>

    /// Returns the named logger if it exists

    /// </summary>

    /// <remarks>

    /// <para>If the named logger exists (in the specified assembly's domain) then it

    /// returns a reference to the logger, otherwise it returns

    /// <c>null</c>.</para>

    /// </remarks>

    /// <param name="assembly">the assembly to use to lookup the domain</param>

    /// <param name="name">The fully qualified logger name to look for</param>

    /// <returns>The logger found, or null</returns>

    public static IMyLog Exists(Assembly assembly, string name)

    {

        return WrapLogger(LoggerManager.Exists(assembly, name));

    }



    /// <summary>

    /// Returns all the currently defined loggers in the default domain.

    /// </summary>

    /// <remarks>

    /// <para>The root logger is <b>not</b> included in the returned array.</para>

    /// </remarks>

    /// <returns>All the defined loggers</returns>

    public static IMyLog[] GetCurrentLoggers()

    {

        return GetCurrentLoggers(Assembly.GetCallingAssembly());

    }



    /// <summary>

    /// Returns all the currently defined loggers in the specified domain.

    /// </summary>

    /// <param name="domain">the domain to lookup in</param>

    /// <remarks>

    /// The root logger is <b>not</b> included in the returned array.

    /// </remarks>

    /// <returns>All the defined loggers</returns>

    public static IMyLog[] GetCurrentLoggers(string domain)

    {

        return WrapLoggers(LoggerManager.GetCurrentLoggers(domain));

    }



    /// <summary>

    /// Returns all the currently defined loggers in the specified assembly's domain.

    /// </summary>

    /// <param name="assembly">the assembly to use to lookup the domain</param>

    /// <remarks>

    /// The root logger is <b>not</b> included in the returned array.

    /// </remarks>

    /// <returns>All the defined loggers</returns>

    public static IMyLog[] GetCurrentLoggers(Assembly assembly)

    {

        return WrapLoggers(LoggerManager.GetCurrentLoggers(assembly));

    }



    /// <summary>

    /// Retrieve or create a named logger.

    /// </summary>

    /// <remarks>

    /// <para>Retrieve a logger named as the <paramref name="name"/>

    /// parameter. If the named logger already exists, then the

    /// existing instance will be returned. Otherwise, a new instance is

    /// created.</para>

    ///

    /// <para>By default, loggers do not have a set level but inherit

    /// it from the hierarchy. This is one of the central features of

    /// log4net.</para>

    /// </remarks>

    /// <param name="name">The name of the logger to retrieve.</param>

    /// <returns>the logger with the name specified</returns>

    public static IMyLog GetLogger(string name)

    {

        return GetLogger(Assembly.GetCallingAssembly(), name);

    }



    /// <summary>

    /// Retrieve or create a named logger.

    /// </summary>

    /// <remarks>

    /// <para>Retrieve a logger named as the <paramref name="name"/>

    /// parameter. If the named logger already exists, then the

    /// existing instance will be returned. Otherwise, a new instance is

    /// created.</para>

    ///

    /// <para>By default, loggers do not have a set level but inherit

    /// it from the hierarchy. This is one of the central features of

    /// log4net.</para>

    /// </remarks>

    /// <param name="domain">the domain to lookup in</param>

    /// <param name="name">The name of the logger to retrieve.</param>

    /// <returns>the logger with the name specified</returns>

    public static IMyLog GetLogger(string domain, string name)

    {

        return WrapLogger(LoggerManager.GetLogger(domain, name));

    }



    /// <summary>

    /// Retrieve or create a named logger.

    /// </summary>

    /// <remarks>

    /// <para>Retrieve a logger named as the <paramref name="name"/>

    /// parameter. If the named logger already exists, then the

    /// existing instance will be returned. Otherwise, a new instance is

    /// created.</para>

    ///

    /// <para>By default, loggers do not have a set level but inherit

    /// it from the hierarchy. This is one of the central features of

    /// log4net.</para>

    /// </remarks>

    /// <param name="assembly">the assembly to use to lookup the domain</param>

    /// <param name="name">The name of the logger to retrieve.</param>

    /// <returns>the logger with the name specified</returns>

    public static IMyLog GetLogger(Assembly assembly, string name)

    {

        return WrapLogger(LoggerManager.GetLogger(assembly, name));

    }



    /// <summary>

    /// Shorthand for <see cref="LogManager.GetLogger(string)"/>.

    /// </summary>

    /// <remarks>

    /// Get the logger for the fully qualified name of the type specified.

    /// </remarks>

    /// <param name="type">The full name of <paramref name="type"/> will

    /// be used as the name of the logger to retrieve.</param>

    /// <returns>the logger with the name specified</returns>

    public static IMyLog GetLogger(Type type)

    {

        return GetLogger(Assembly.GetCallingAssembly(), type.FullName);

    }



    /// <summary>

    /// Shorthand for <see cref="LogManager.GetLogger(string)"/>.

    /// </summary>

    /// <remarks>

    /// Get the logger for the fully qualified name of the type specified.

    /// </remarks>

    /// <param name="domain">the domain to lookup in</param>

    /// <param name="type">The full name of <paramref name="type"/> will

    /// be used as the name of the logger to retrieve.</param>

    /// <returns>the logger with the name specified</returns>

    public static IMyLog GetLogger(string domain, Type type)

    {

        return WrapLogger(LoggerManager.GetLogger(domain, type));

    }



    /// <summary>

    /// Shorthand for <see cref="LogManager.GetLogger(string)"/>.

    /// </summary>

    /// <remarks>

    /// Get the logger for the fully qualified name of the type specified.

    /// </remarks>

    /// <param name="assembly">the assembly to use to lookup the domain</param>

    /// <param name="type">The full name of <paramref name="type"/> will

    /// be used as the name of the logger to retrieve.</param>

    /// <returns>the logger with the name specified</returns>

    public static IMyLog GetLogger(Assembly assembly, Type type)

    {

        return WrapLogger(LoggerManager.GetLogger(assembly, type));

    }



    #endregion



    #region Extension Handlers



    /// <summary>

    /// Lookup the wrapper object for the logger specified

    /// </summary>

    /// <param name="logger">the logger to get the wrapper for</param>

    /// <returns>the wrapper for the logger specified</returns>

    private static IMyLog WrapLogger(ILogger logger)

    {

        return (IMyLog)s_wrapperMap.GetWrapper(logger);

    }



    /// <summary>

    /// Lookup the wrapper objects for the loggers specified

    /// </summary>

    /// <param name="loggers">the loggers to get the wrappers for</param>

    /// <returns>Lookup the wrapper objects for the loggers specified</returns>

    private static IMyLog[] WrapLoggers(ILogger[] loggers)

    {

        IMyLog[] results = new IMyLog[loggers.Length];

        for (int i = 0; i < loggers.Length; i++)

        {

            results[i] = WrapLogger(loggers[i]);

        }

        return results;

    }



    /// <summary>

    /// Method to create the <see cref="ILoggerWrapper"/> objects used by

    /// this manager.

    /// </summary>

    /// <param name="logger">The logger to wrap</param>

    /// <returns>The wrapper for the logger specified</returns>

    private static ILoggerWrapper WrapperCreationHandler(ILogger logger)

    {

        return new MyLogImpl(logger);

    }

    #endregion

}

}

8.5 IMyLog类代码
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using log4net;

namespace TGLog.ExpandILog

{

public interface IMyLog : ILog

{

    void Debug(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName);

    void Debug(int operatorID, string operand, int actionType,object message,

string ip, string browser, string machineName, Exception t);

    void Info(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName);

    void Info(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName, Exception t);

    void Warn(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName);

    void Warn(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName, Exception t);

    void Error(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName);

    void Error(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName, Exception t);

    void Fatal(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName);

    void Fatal(int operatorID, string operand, int actionType, object message,

string ip, string browser, string machineName, Exception t);

}

}

8.6附件
使用log4net记录日志

8.7参考
1、http://peibing211.blog.163.com/blog/static/37116360200992811595469/

2、http://www.cnblogs.com/qiangzi/archive/2009/09/10/1541023.html

3、http://blog.chinaunix.net/u/23701/showart_1414206.html

4、http://itrust.cnblogs.com/archive/2005/01/25/97225.html

5、http://www.cnitblog.com/seeyeah/archive/2009/09/20/61491.aspx

6、http://www.cnblogs.com/zhmore/archive/2009/03/19/1416707.html

7、http://blog.shinylife.net/blog/article.asp?id=948

8、http://www.cnblogs.com/manhoo/archive/2009/06/25/1511066.html

分类: C#
标签: log4net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值