Log4Net 日志配置

前述

  园子里有许多人对log4net这款开源的日志记录控件有很多介绍。在这里个人再做一次总结,希望对以后有所帮助,需要的时候可以直接使用,减 少查阅资料的时间。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库,并且我们还可以记载控制要记载的日志级 别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。 log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).

准备工作:

1.下载log4net.dll 下载地址[http://logging.apache.org/log4net/download_log4net.cgi]

下载文件:log4net-1.2.13-bin-newkey.zip。 解压选择对应的net版本找到log4net.dll。

2.在项目中引用log4net.dll。

实例代码

准备工作完成后我们来看下实例代码 ,首先在项目中创建一个文件夹LogConfig。把有关log4net的一些配置文件和类都放在这个文件夹里面。

WEB网站为例,在项目LogConfig文件夹中创建Log4Net.config配置文件。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

<?xml version="1.0" encoding="utf-8"?>

<configuration>

 <configSections>

  <!--添加自定义节点:log4net type:解析类名,程序集名(log4net.dll)-->

  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

 </configSections>

 <log4net>

  <!--定义输出到文件中-->

  <appender name="Log4Net_INFO" type="log4net.Appender.RollingFileAppender">

   <!--定义文件存放位置-->

   <file value="C:/log4net/"/>

   <!--是否追加到文件,默认为true,通常无需设置-->

   <appendToFile value="true"/>

   <RollingStyle value="Date"/>

   <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->

   <DatePattern value="INFO_yyyyMMdd".log"" />

   <!--日志文件名是否为静态-->

   <StaticLogFileName value="false"/>

   <!--多线程时采用最小锁定-->

   <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

   <!--布局(向用户显示最后经过格式化的输出信息)-->

   <layout type="log4net.Layout.PatternLayout">

    <!--

      %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

      %n(new line):换行

      %d(datetime):输出当前语句运行的时刻

      %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

      %t(thread id):当前语句所在的线程ID

      %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

      %c(class):当前日志对象的名称,例如:

      %L:输出语句所在的行号

      %F:输出语句所在的文件名

      %-数字:表示该项的最小长度,如果不够,则用空格填充

     -->

    <Header value="[Header]

"/>

    <Footer value="[Footer]

"/>

    <!--正文-->

    <ConversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />

   </layout>

  </appender>

  <appender name="Log4Net_ERROR" type="log4net.Appender.RollingFileAppender">

   <file value="C:/log4net/"/>

   <appendToFile value="true"/>

   <RollingStyle value="Date"/>

   <DatePattern value="ERROR_yyyyMMdd".log"" />

   <StaticLogFileName value="false"/>

   <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

   <layout type="log4net.Layout.PatternLayout">

    <Header value="[Header]

"/>

    <Footer value="[Footer]

"/>

    <!--正文-->

    <ConversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />

   </layout>

  </appender>

  <root>

   <level value="DEBUG"/>

   <appender-ref ref="Log4Net_ERROR" />

   <level value="INFO"/>

   <appender-ref ref="Log4Net_INFO" />

  </root>

 </log4net>

</configuration>

配置文件写完后我们在来写一个Helper类。同样在项目中创建一个名为LogHelper.cs的类文件。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

using log4net;

using System;

using System.Collections.Concurrent;

using System.Collections.Generic;

//指定log4net使用的config文件来读取配置信息

[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"LogConfig\Log4Net.config", Watch = true)]

namespace Project.Log4.Net.LogConfig

{

  /// <summary>

  /// 日志帮助类

  /// </summary>

  public class LogHelper

  {

    private static readonly ConcurrentDictionary<Type, ILog> _loggers = new ConcurrentDictionary<Type, ILog>();

    /// <summary>

    /// 获取记录器

    /// </summary>

    /// <param name="source"></param>

    /// <returns></returns>

    private static ILog GetLogger(Type source)

    {

      if (_loggers.ContainsKey(source))

      {

        return _loggers[source];

      }

      else

      {

        ILog logger = LogManager.GetLogger(source);

        _loggers.TryAdd(source, logger);

        return logger;

      }

    }

    /* Log a message object */

    /// <summary>

    /// 调试信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Debug(object source, string message)

    {

      Debug(source.GetType(), message);

    }

    /// <summary>

    /// 调试信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="ps"></param>

    public static void Debug(object source, string message, params object[] ps)

    {

      Debug(source.GetType(), string.Format(message, ps));

    }

    /// <summary>

    /// 调试信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Debug(Type source, string message)

    {

      ILog logger = GetLogger(source);

      if (logger.IsDebugEnabled)

        logger.Debug(message);

    }

    /// <summary>

    /// 关键信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Info(object source, object message)

    {

      Info(source.GetType(), message);

    }

    /// <summary>

    /// 关键信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Info(Type source, object message)

    {

      ILog logger = GetLogger(source);

      if (logger.IsInfoEnabled)

        logger.Info(message);

    }

    /// <summary>

    /// 警告信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Warn(object source, object message)

    {

      Warn(source.GetType(), message);

    }

    /// <summary>

    /// 警告信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Warn(Type source, object message)

    {

      ILog logger = GetLogger(source);

      if (logger.IsWarnEnabled)

        logger.Warn(message);

    }

    /// <summary>

    /// 错误信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Error(object source, object message)

    {

      Error(source.GetType(), message);

    }

    /// <summary>

    /// 错误信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Error(Type source, object message)

    {

      ILog logger = GetLogger(source);

      if (logger.IsErrorEnabled)

        logger.Error(message);

    }

    /// <summary>

    /// 失败信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Fatal(object source, object message)

    {

      Fatal(source.GetType(), message);

    }

    /// <summary>

    /// 失败信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    public static void Fatal(Type source, object message)

    {

      ILog logger = GetLogger(source);

      if (logger.IsFatalEnabled)

        logger.Fatal(message);

    }

    /* Log a message object and exception */

    /// <summary>

    /// 调试信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Debug(object source, object message, Exception exception)

    {

      Debug(source.GetType(), message, exception);

    }

    /// <summary>

    /// 调试信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Debug(Type source, object message, Exception exception)

    {

      GetLogger(source).Debug(message, exception);

    }

    /// <summary>

    /// 关键信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Info(object source, object message, Exception exception)

    {

      Info(source.GetType(), message, exception);

    }

    /// <summary>

    /// 关键信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Info(Type source, object message, Exception exception)

    {

      GetLogger(source).Info(message, exception);

    }

    /// <summary>

    /// 警告信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Warn(object source, object message, Exception exception)

    {

      Warn(source.GetType(), message, exception);

    }

    /// <summary>

    /// 警告信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Warn(Type source, object message, Exception exception)

    {

      GetLogger(source).Warn(message, exception);

    }

    /// <summary>

    /// 错误信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Error(object source, object message, Exception exception)

    {

      Error(source.GetType(), message, exception);

    }

    /// <summary>

    /// 错误信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Error(Type source, object message, Exception exception)

    {

      GetLogger(source).Error(message, exception);

    }

    /// <summary>

    /// 失败信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Fatal(object source, object message, Exception exception)

    {

      Fatal(source.GetType(), message, exception);

    }

    /// <summary>

    /// 失败信息

    /// </summary>

    /// <param name="source"></param>

    /// <param name="message"></param>

    /// <param name="exception"></param>

    public static void Fatal(Type source, object message, Exception exception)

    {

      GetLogger(source).Fatal(message, exception);

    }

  }

}

配置和Helper类都有了..现在来看看调用方法。在项目中创建一个index.aspx页面

?


1

2

3

4

5

LogHelper.Debug(this, "Debug");

LogHelper.Error(this, "Error");

LogHelper.Fatal(this, "Fatal");

LogHelper.Info(this, "Info");

LogHelper.Warn(this, "Warn");

日志生成格式[每天一个文件]:

参数说明

Log4Net.config是配置日志输出参数文件。在这个文件中可以到看很多配置节点,大体可以分为二个大
类<configSections>...</configSections> 和
<log4net>...</log4net>。我们来看看这些节点都是啥意思。

1:<configSections>..</configSections>:申明自定义节点log4net解析的类名和程序集名(log4net.dll)。
2:<log4net>..</log4net>:使用log4net的配置信息都在这里设置。来重点看看都有那些设置信息,这个大节点整体也可以分为二类。

2.1:定义输出信息设置节点<appender></appender>。
2.2:定义日志的输出媒介<root></root>。

配置的总体结构就是这样,下面来看一些详细内容。

appender:决定日志输出的方式(可设置多个节点,如对INFO,ERROR等设置不同的输出方式)。

主要包括已下几种:

1 AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。
2 AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
3 BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。
4 ConsoleAppender:将日志输出到控制台。
5 EventLogAppender:将日志写到Windows Event Log.
6 FileAppender:将日志写到文件中。
7 LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下).
8 MemoryAppender:将日志存到内存缓冲区。
9 NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
10 RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。
11 RemotingAppender:通过.NET Remoting将日志写到远程接收端。
12 RollingFileAppender:将日志以回滚文件的形式写到文件中。(实例代码中使用的是此类型)
13 SmtpAppender:将日志写到邮件中。
14 TraceAppender:将日志写到.NET trace 系统。
15 UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

从上面提供的方式中可以看出能输出文件、控制台、Windows事件日志和数据库。这个可根据实际情况选择。

复制代码 代码如下:

<appender name="Log4Net_INFO" type="log4net.Appender.RollingFileAppender">
...
</appender>

这里配置的name(“Log4Net_INFO”)会在定义日志的输出媒介中使用到。name可任意设置。

在appender 节点中还会配置一些文件存放的地址,日志个数等信息。这些在实例代码中都在体现,这里不做说明。我们在来看看日志最后输出呈现的布局设置信息。

?


1

2

3

4

5

6

7

8

<layout type="log4net.Layout.PatternLayout">

    <!--头-->

    <Header value="[Header]"/>

    <!--脚注-->

    <Footer value="[Footer]"/>

    <!--正文-->

    <ConversionPattern value="%d [%t] %-5p %c [%x] - %m%n" />

</layout>

这里配置的信息最终是日志打印出来的样式。我们可以看到这里可以设置内容头Header和尾Footer。正文ConversionPattern。在正文中有出现有 %d [%t]这些都是啥意思了表示什么。这里有一个对照表可提供参考:

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%L:输出语句所在的行号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充

配置的基本也就这些。下就是root的配置说明 。

root:

对设置输出的方式进行指定。

?


1

2

3

4

5

6

7

8

9

<root>

   <!--批定DEBUG输出的文件形式记录日志-->

   <level value="DEBUG"/>

   <appender-ref ref="Log4Net_ERROR" />

 

  <!--批定INFO输出的文件形式记录日志-->

   <level value="INFO"/>

   <appender-ref ref="Log4Net_INFO" />

</root>

控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
如果没有定义LEVEL的值,则缺省为DEBUG

时间: 2024-10-26 12:31:20

Log4Net 日志配置的相关文章

Log4Net 日志配置[附带源码]

前述 园子里有许多人对log4net这款开源的日志记录控件有很多介绍.在这里个人再做一次总结,希望对以后有所帮助,需要的时候可以直接使用,减少查阅资料的时间.利用log4net可以方便地将日志信息记录到文件.控制台.Windows事件日志和数据库,并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误).ERROR(一般错误).WARN(警告).INFO(一般信息).DEBUG(调试信息).log4net 有四种主要的组件,分别是Logger(记录器), Repos

log4net日志的配置及简单应用

在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率.而本菜鸟在大神推荐和指导下使用log4net这一插件工具,其中也学到了一些皮毛,所谓好记性不如烂笔头嘛.为此,将把这些心得体会记录下来,以免遗忘.同时,也为各位童鞋提供一些参考.在此声明,本文粗浅之极,大神莫入. 对于log4net有什么功能,这里就不赘述了.直接进入本文重点,也就是log4net的配置和简单使用. 首先,项目要引入log4net.dl

Log4net日志GUI配置工具

关于log4net的配置文章在园子里真的很多,但是有关GUI界面配置的文章确定太少,改写了一个以前很早的工具 以前的那个有很多的问题,这个基本的大的问题没有,可能一个小问题还是需要修改下,基本功能肯定是能满足的,先上图再说: 首先选择一个要配置的文件,然后加载配置文件里面相关配置显示到界面上,然后再分别配置Appender与logger,关于它们, appender其实就是输出到哪种介质上,也就是输出源,logger就是记录器. 点击Appenders中的新增,可以添加一个新的附加器,如下图所示

关于log4net日志的配置流程

最近又重新整理一下log4net日志的配置,现在记录一下流程和一些遇到的问题,以备后续使用,具体的配置参数等信息.此文无,见谅! 1. 下载log4net.dll文件(网上很多,随便找一个!) 2. 项目中引用此dll 3. appconfig中配置log4net(具体配置方案有很多例子.) 4. AssemblyInfo.cs 中添加"[assembly: log4net.Config.XmlConfigurator(Watch = true)]" 5. winform中调用&quo

Log4net 日志记录配置信息

<log4net> 8 <!--配置日志的级别,低于此级别的就不写到日志里面去 9 OFF.FATAL.ERROR, WARN, INFO, DEBUG, ALL 10 --> 11 <root> 12 <level value="DEBUG" /> 13 <appender-ref ref="LogFileAppender" /> 14 <appender-ref ref="Console

[转]Log4Net日志插件配置详解

log4net是一款优秀的第三方日志框架,可以很容易的加载到开发项目中(引用log4net的dll,再配置些基本参数即可),帮助程序员把日志信息输出到各种不同的目标,常见的有文本.数据库.windows日志.邮件.内存缓冲区等目标. 首先需要log4net的dll(源码中dll版本是1.2.10.0),引用到程序中,然后再配置下配置文件,配置文件如下: [html] view plain copy <?xml version="1.0"?> <configuratio

log4net 日志框架的配置

log4net 日志框架的配置(一) 添加对log4net程序集的引用 选择程序集文件添加引用即可,需要注意的是需要添加相应程序版本的程序集,如果你的应用是基于.netFramework2.0,则应选择net 2.0版本的程序集 修改配置文件,配置log4net相关设置 在web.config或在app.config(如果没有则创建一个)中,配置log4net的使用 1 <?xml version="1.0"?> 2 3 <configuration> 4 &l

.net Log4Net日志的配置及使用 全局异常过滤器

.net添加Log4Net日志的配置及使用,以及将其设置为全局异常过滤器,主要有以下步骤: 1. 新建一个Web应用程序2. 引用log4net.dll3. 添加config文件4. 在AssemblyInfo.cs进行注册5. 在Global.asax中进行初始化设置6. 添加Log4Helper.cs帮助类7. 新增过滤器LogExceptionFilter.cs文件8. 在FilterConfig.cs中添加过滤器9. 在Global.asax中注册过滤器 详细步骤如下: 1.新建一个we

log4net日志组件

一.什么是log4net组件 Log4net是基于.net开发的一款非常著名的记录日志开源组件.他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4j.Log4net记录日志的功能非常强大.它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介(数据库.文本.控制台.邮件--). 二.log4net的核心内容 Log4net 主要分为5个核心主键: Logger,Appender,Filter,Layout,Object