<style type="text/css">
.CodeFormat {font-family:"Courier New", Courier, mono; font-size:10pt; }
</style>
今天看到一篇文章,谈Log4j对系统的效能的影响...整理如下:
一般,我们用log4j写log的时候,很习惯于如下面记录:
2005-01-11 09:57:57,816 DEBUG (BizProc.java:275) Begin to get connection... 2005-01-11 09:57:57,816 DEBUG (BizProc.java:275) Obtain connection 2345@defd 2005-01-11 09:57:57,816 DEBUG (BizProc.java:275) Begin transaction [TX_2015_RECV] processing... 2005-01-11 09:57:57,925 DEBUG (BizProc.java:328) All of the values were: |
这里会把Java Source Code中的行号带出来,查找错误很方便...
但,这也是问题之所在...文章中介绍,Log4j之所以可以得到行号,是用了JVM的一个特性,不知道大家有没有注意到,如果我们的Java程序在运行时出现错误,会出现下面的信息:
javax.naming.NamingException: Cannot create resource instance at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:189) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:301) at org.apache.naming.NamingContext.lookup(NamingContext.java:834) at org.apache.naming.NamingContext.lookup(NamingContext.java:181) at org.apache.naming.NamingContext.lookup(NamingContext.java:822) at org.apache.naming.NamingContext.lookup(NamingContext.java:181) at org.apache.naming.NamingContext.lookup(NamingContext.java:822) at org.apache.naming.NamingContext.lookup(NamingContext.java:181) at org.apache.naming.NamingContext.lookup(NamingContext.java:822) at org.apache.naming.NamingContext.lookup(NamingContext.java:194) at org.apache.naming.SelectorContext.lookup(SelectorContext.java:183) at javax.naming.InitialContext.lookup(InitialContext.java:347) |
看到黑体字没有,原来JVM已经内嵌支持Debug出行号信息了!可是,这里是出错的时候,JVM抛出的,那为什么用 log4j.info() 的时候,也可以看到行号呢?
下面就是重点,Log4j中记录行号的过程...
(1) 调用了 log4j.info() 或是log4j.debug()方法... (2) 建立一个Throwable 的对象来取得当前运行堆栈的快照...Throwable.fillInStackTrace(); (3) 从抛出的Throwable对象中,来分析出当前log信息的行号...
|
但是,请注意,建立运行时的堆栈跟踪,对JVM来说,是一项非常大的开销!
所以,我们在配置log4j的PatternLayout的时候,如果是要上线到正式环境,一定要记者把参数关掉,
一般来说,用 “%d %-5p %m%n" 就可以满足了!
原文请参考这里:
Sneaky, sneaky Log4J===========================================================================
补遗篇~~~~~!
log4j.rootLogger=info, Console
log4j.logger.net.csdn.blog.xport=debug, RollingFile
log4j.additivity.net.csdn.blog.xport=false
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %-5p [%t] %C{1} - %m%n
log4j.appender.RollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File=SystemLog.log
log4j.appender.RollingFile.Append=true
log4j.appender.RollingFile.MaxFileSize=2MB
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d %-5p [%t] %C{1} - %m%n
分享到:
相关推荐
你可以打开这个项目,查看`log4j.properties`配置文件,以及`Main`类中的日志输出代码,运行程序,观察日志文件`app.log`的内容,以直观地理解Log4j的工作原理。 总结,Log4j作为Java日志管理的重要工具,通过配置...
你可以根据需要自定义格式,比如增加线程ID、源代码行号等信息。 5. **运行与调试** 在Android Studio中运行应用,日志将在指定的文件路径下生成,同时控制台也会显示日志信息。在实际开发中,可能需要根据应用的...
通过对Log4j的配置文件进行详细的解析,我们可以了解到如何灵活地配置Log4j来满足不同应用场景的需求。合理的日志配置不仅可以帮助开发者更好地追踪问题,还可以提高系统的可维护性和扩展性。希望本文能帮助初学者...
总之,Log4j的日志配置是一个关键环节,它直接影响到日志的可读性、可管理性和系统稳定性。通过合理配置`DailyRollingFileAppender`,可以实现高效、有序的日志记录,使得在问题排查和系统监控时能迅速找到关键信息...
**Java Log4j 示例** Java Log4j 是一个广泛使用的日志记录...你可以通过阅读源代码并结合上述知识点,更好地理解 Log4j 在实际应用中的工作原理和用法。同时,也可以参考链接中的博客文章以获取更详细的解释和指导。
在提供的`slf4jDemo`中,可能包含了创建简单日志示例的Java源代码,以及相应的Log4j配置文件。通过运行这个示例,你可以直观地了解SLF4J和Log4j如何协同工作,以及如何配置和使用它们来满足项目的需求。通过实践,你...
在项目源代码的同级目录下,创建一个名为 `log4j.properties` 的文件,这是Log4j默认的配置文件名。在此文件中,你可以定义日志的输出方式和格式。 2.2 设置日志内容 在 `log4j.properties` 文件中,你可以设置...
在压缩包文件“mytest”中,可能包含了一个简单的Log4j应用实例,你可以通过查看源代码来实践上述知识点。学习和熟练运用Log4j,不仅可以提升代码的可读性和可维护性,还能在问题排查时提供关键信息,是每个Java...
特别的是,这些配置都可以通过一个外部配置文件完成,无需改动应用程序的源代码,极大地提高了灵活性。 配置Log4j主要涉及三个关键组件:Logger、Appender和Layout。 1. **Logger配置**: - `rootLogger`定义了...
通过上述介绍,我们可以看到Log4j不仅是一个功能强大的日志记录工具,而且具有高度可配置性,能够满足各种不同的日志记录需求。无论是简单的控制台输出还是复杂的多渠道日志记录,Log4j都能够提供完善的解决方案。...
1. **性能考虑**:频繁调用`StackTrace`可能会对性能造成一定影响,尤其是在性能敏感的应用场景下。因此,在不需要行号信息的情况下避免使用这一机制。 2. **准确性**:由于`StackTrace`是基于运行时的调用栈来...
在这个Log4jDemo项目中,`pom.xml`文件就是项目的POM,包含了项目的构建配置和依赖信息,包括对Log4j库的引用。 **Log4j配置详解** Log4j的核心配置文件通常是`log4j.properties`或`log4j.xml`,但在这个Demo中...
Log4j是Apache软件基金会的一个开放源代码项目,提供了灵活的日志记录功能,它具有丰富的配置选项,可以定制化地满足各种日志需求。 Log4j主要包括三个核心组件:Appender(输出目的地),Layout(日志格式)和...
log4c 是一个基于 C 语言的日志记录框架,它借鉴了 Java 中的 log4j 设计理念,旨在为 C 语言开发者提供一个功能强大、灵活且易于使用的日志系统。这个压缩包包含了 log4c 的一个完整实例,适合初学者学习和参考。 ...
通过对Log4j配置文件的理解与应用,我们可以有效地管理和记录Java应用程序的日志信息。合理设置日志级别和输出目标可以帮助开发者更好地监控和调试程序运行状态。同时,灵活运用不同的布局方式,可以使日志信息的...
而log4j作为一款优秀的日志框架,提供了强大的日志记录功能,其配置的灵活性和丰富的格式化选项使其成为众多开发者的选择。本文将详细解析log4j配置中的输出格式化符号,帮助读者更深入地理解和应用log4j。 ### log...
《Go-log:Go语言中的日志处理库——致敬log4j》 在软件开发中,日志记录扮演着至关重要的角色,它可以帮助开发者追踪程序运行状态、定位问题以及进行性能分析。在Java世界中,log4j是一个广泛使用的日志框架,而...
Log4j 是一款广泛使用的Java日志记录框架,它提供了灵活的日志配置和丰富的日志级别,便于开发者调试和监控应用程序。以下是对Log4j的详细说明: **1. 日志级别** Log4j 提供了五种不同的日志级别,它们按照严重...