技术笔记:log4net使用详解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 技术笔记:log4net使用详解

Log4net库是.Net下一个非常优秀的开源日志记录组件,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。


它具有:支持多数框架、可输出日志到多种目标、层级日志体系、可使用XML配置、可动态配置、模块化和可扩展化设计、灵活、高性能等特征。


日志记录器(Logger)的行为是分等级的,一般可分为5种日志等级(Level),优先级从高到低:


1、FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。


2、ERROR(一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。


3、WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。


4、INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。


5、DEBUG (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。


我们可以控制到应用程序中相应级别的日志信息的开关。比如在定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来。


使用实例:


创建log4net.xml文件放到项目根目录。


xml配置文件:


<?xml version="1.0"?>


[/span>configuration

[/span>configSections

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



[/span>log4net

[/span>logger name="LogInfo" additivity="false"

[/span>level value="ALL" />


[/span>appender-ref ref="InfoAppender"/>



[/span>logger name="LogError" additivity="false"

[/span>level value="ALL" />


[/span>appender-ref ref="ErrorAppender"/>



[/span>logger name="LogSmsInfo" additivity="false"

[/span>level value="ALL" />


[/span>appender-ref ref="SmsInfoAppender"/>



[/span>logger name="LogSmsError" additivity="false"

[/span>level value="ALL" />


[/span>appender-ref ref="SmsErrorAppender"/>




[/span>appender name="InfoAppender" type="log4net.Appender.RollingFileAppender,log4net"

style="color: rgba(0, 0, 255, 1)"]


[/span>filter type="log4net.Filter.LevelRangeFilter"

[/span>param name="LevelMin" value="INFO" />


[/span>param name="LevelMax" value="INFO" />




[/span>param name="File" value="Log\"/>



[/span>param name="DatePattern" value="yyyy-MM-dd'.txt'"/>



[/span>appendToFile value="true"/>



[/span>rollingStyle value="Composite"/>



[/span>staticLogFileName value="false"///代码效果参考:http://www.jhylw.com.cn/402925411.html

>


[/span>maximumFileSize value="4MB"/>



[/span>maxSizeRollBackups value="-1"/>



[/span>layout type="log4net.Layout.PatternLayout"

[/span>conversionPattern value="%n%n %date{yyyy-MM-dd HH:mm:ss,fff} %m"/>





[/span>appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender,log4net"


[/span>filter type="log4net.Filter.LevelRangeFilter"

[/span>param name="LevelMin" value="INFO" />


[/span>param name="LevelMax" value="INFO" />




[/span>param name="File" value="log\"/>



[/span>param name="DatePattern" value="yyyy-MM-dd 'error.txt'"/>



[/span>appendToFile value="true"/>



[/span>rollingStyle value="Composite"/>



[/span>staticLogFileName value="false"/>



[/span>maximumFileSize value="4MB"/>



[/span>maxSizeRollBackups value="-1"/>



[/span>layout type="log4net.Layout.PatternLayout"

[/span>conversionPattern value="%n%n %date{yyyy-MM-dd HH:mm:ss,fff} %m"/>






xml配置注释


输出样式:


%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。


%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。


%r:输出自应用程序启动到输出该log信息耗费的毫秒数。


%t:输出产生该日志事件的线程名。


%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。


%c:输出日志信息所属的类目,通常就是所在类的全名。


%M:输出产生日志信息的方法名。


%F:输出日志消息产生时所在的文件名称。


%L::输出代码中的行号。


%m::输出代码中指定的具体日志信息。


%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。


%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。


%%:输出一个"%"字符。


另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:


1)%20c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。


2)%-20c:"-"号表示左对齐。


3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。


c# helper类代码:


public class Log4Helper


{


public static log4net.ILog Loginfo = log4net.LogManager.GetLogger("LogInfo");


public static log4net.ILog Logerror = log4net.LogManager.GetLogger("LogError");


public static Log4Helper MInstance;


public static Log4Helper GetInstance()


{


return MInstance (MInstance = new Log4Helper());


}


public Log4Helper()


{


var file = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "\log4net.xml");


log4net.Config.XmlConfigurator.Configure(file);


}


///


/// 设置备置文件


///


///


public static void SetConfig(FileInfo configFile)


{


log4net.Config.XmlConfigurator.Configure(configFile);


}


///


/// 写入信息


///


///


public void WriteInfo(string info)


{


if (Loginfo.IsInfoEnabled)


{


Loginfo.Info(info);


}


}


///


/// 写入错误信息


///


///


public void WriteError(string info)


{


if (Logerror.IsInfoEnabled)


{


Logerror.Info(info);


}


}


///


/// 写入错误信息


///


///


///


public void WriteInfo(string loggerName, string info)


{


log4net.ILog logInfo = log4net.LogManager.GetLogger(loggerName);


if (logInfo.IsInfoEnabled)


{


logInfo.Info(info);


}


}


///


/// 写入信息


///


///


public void Info(string message)


{


if (Loginfo.IsInfoEnabled)


{


Loginfo.Info(message);


}


}


///


/// 写入错误信息


///


///


public void Error(string message)


{


if (Logerror.IsInfoEnabled)


{


Logerror.Info(message);


}


}


///


/// 写入错误信息


///


///


public void Error(Exception ex)


{


if (Logerror.IsInfoEnabled)


{


var sb = new StringBuilder("");


sb.AppendFormat("\r\n异常信息:{0}", ex.Message);


sb.AppendFormat("\r\n异常来源:{0}", ex.Source);


sb.AppendFormat("\r\n异常堆栈:{0}", ex.StackTrace);


Logerror.Info(sb.ToString());


}


}


///


/// 写入错误信息


///


///


消息


///


异常


public void Error(string msg, Exception ex)


{


if (Logerror.IsInfoEnabled)


{


Logerror.Info(msg, ex);


}


}


}


项目中使用:


/// <span style="color: rgba(128,

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
人工智能 前端开发 Devops
.NET技术在现代开发中的作用:.NET技术的核心价值、在现代应用开发中的实际应用、以及面临的挑战与未来趋势。
.NET技术是软件开发领域的核心力量,本文从其核心价值、实际应用及未来挑战三方面进行探讨。它支持多种语言,提供强大的开发工具和丰富的类库,并具备跨平台能力。在现代应用开发中,.NET广泛应用于企业级系统、Web应用、移动应用、云服务和游戏开发等领域。面对性能优化、容器化、AI集成等挑战,.NET持续创新以适应不断发展变化的技术环境。
48 4
|
1月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
65 4
|
1月前
|
人工智能 物联网 开发者
.NET技术在现代软件开发中的应用愈发广泛和深入
.NET技术是软件开发的关键支柱,本文分为三部分探讨其创新应用:最新进展如.NET 5/6统一平台、性能提升、跨平台支持增强、云集成优化及开源社区贡献;应用场景涵盖微服务架构、物联网、AI/机器学习、游戏及移动应用开发;未来发展潜力在于持续性能优化、云原生支持、新兴技术集成、生态扩张及教育培训加强。.NET正以其强大适应性和创新潜力引领软件开发的新方向。
31 3
|
1月前
|
人工智能 开发框架 .NET
如何掌握.NET技术,引领开发前沿:.NET技术的核心能力、在现代开发中的应用实践、以及如何通过.NET技术实现持续创新。
.NET技术已成为软件开发不可或缺的部分,本文分三部分探讨:核心能力如多语言支持、统一运行时环境、丰富的类库及跨平台能力;现代开发实践包括企业级应用、Web与移动开发、云服务及游戏开发;并通过性能优化、容器化、AI集成等方面实现持续创新,使开发者站在技术前沿。
47 3
|
1月前
|
存储 搜索推荐 大数据
阿里泛日志设计与实践问题之schema-on-read技术的发展对日志搜索的影响是啥,如何解决
阿里泛日志设计与实践问题之schema-on-read技术的发展对日志搜索的影响是啥,如何解决
|
2天前
|
人工智能 前端开发 开发工具
解读.NET 技术的开发潜力
本文全面介绍了.NET技术在软件开发领域的核心优势、创新应用及面临的挑战。.NET以其统一的开发平台、强大的工具和跨平台能力,成为企业级应用、Web应用乃至游戏开发的理想选择。然而,在性能优化、容器化及AI集成等方面仍需不断突破。通过积极拥抱开源和社区驱动模式,.NET将持续推动软件开发的进步。
13 1
|
15天前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
58 12
|
9天前
|
人工智能 前端开发 Devops
.NET技术自发布以来,在软件开发领域发挥了重要作用
【9月更文挑战第12天】.NET技术自发布以来,在软件开发领域发挥了重要作用。本文分为三部分探讨其在现代开发中的应用:首先介绍.NET的核心价值,包括语言多样性、强大的开发工具支持、丰富的类库、跨平台能力和活跃的社区;接着分析其在企业级应用、Web开发、移动应用、云服务及游戏开发中的实际应用;最后讨论.NET面临的挑战与未来趋势,如性能优化、容器化、AI集成及跨平台框架竞争等。通过不断的技术创新和社区驱动,.NET将持续推动软件开发的进步。
21 4
|
14天前
|
人工智能 开发框架 算法
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
|
14天前
|
传感器 应用服务中间件 Linux
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)