使用log4j的时候,通过调用logger.debug(...)的时候能log4j能打印出当前调用类的类名、方法名、代码行数,是不是很好奇log4j如何实现的呢?这里有个参考实现方法:
public class Test {
public static void main(String[] args) {
String log = Logger.log("test log");
System.out.println(log);
}
}
public class Logger {
public static String log(String str){
StackTraceElement ste = Thread.currentThread().getStackTrace()[2];
String className = ste.getClassName();
String methodName = ste.getMethodName();
int lineNumber = ste.getLineNumber();
String ret = className+"." +methodName+"()."+lineNumber+" says:"+str;
return ret;
}
}
当然这种实现方法效率比较低,因为每次log()都会对当前线程栈数据进行收集。
分享到:
相关推荐
针对这个漏洞,开发出了专门的Apache Log4j2远程代码执行漏洞检测工具,这些工具包括针对Windows和Linux操作系统的版本。这些工具的主要目的是帮助管理员和安全专家迅速识别其环境中是否存在易受攻击的Log4j2实例。 ...
1. **类名、方法名和行数的获取**:在Java中,`StackTraceElement`类提供了获取当前执行方法的详细信息。通过`Thread.currentThread().getStackTrace()`,我们可以得到一个`StackTraceElement`数组,从中可以获取到...
2. **配置Log4j**:在项目的类路径下创建`log4j.properties`或`log4j.xml`配置文件,指定日志级别、输出目的地等。例如: ```properties # log4j.properties log4j.rootLogger=DEBUG, stdout log4j.appender....
然而,2021 年底,Log4j 发现了一个严重的安全漏洞,被称为 CVE-2021-44228(也称为 Log4Shell),这使得攻击者可以通过在日志记录中注入恶意代码来远程执行任意代码,从而对受影响的系统造成严重威胁。 此漏洞源于...
为了获得总代码行数,一种常见方法是通过管道(`|`)将`git log`的结果传递给其他命令,例如`cloc`(Count Lines of Code),这是一个统计代码行数的工具。例如: ```bash git log --pretty=format:"" --name-only -...
解决Apache Log4j 远程代码执行漏洞log4j2部分jar,包含log4j-1.2-api-2.15.0.jar,log4j-api-2.15.0.jar,log4j-core-2.15.0.jar,log4j-to-slf4j-2.15.0.jar
针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...
在上面的代码中,首先通过`PropertyConfigurator.configure()`加载了Log4j的配置文件,然后通过`Logger.getLogger()`创建了一个日志记录器,最后使用不同级别的方法记录日志。 **5. 配置文件详解** `log4j....
**日志框架Log4j详解及测试代码实例** 在Java编程中,日志记录是必不可少的一个环节,它有助于我们跟踪程序运行状态、定位错误和调试。Log4j是一款广泛使用的开源日志框架,由Apache软件基金会开发。本篇将深入探讨...
log4j 源代码log4j 源代码log4j 源代码log4j 源代码log4j 源代码log4j 源代码log4j 源代码log4j 源代码
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...
2. **配置文件**: Log4j的核心在于其配置文件(通常是log4j.properties或log4j.xml),通过配置文件可以指定日志输出的位置、格式、级别等信息。 3. **Appenders**: Appenders是Log4j用于输出日志的目的地,如...
3. Logger工作原理:在`org.apache.log4j.Logger`类中,每个logger都有一个优先级,通过`isDebugEnabled()`、`isInfoEnabled()`等方法检查当前日志级别是否允许输出特定级别的日志。 4. 配置解析:`org.apache.log4...
在`Log4JWebDemo`项目中,开发者可能创建了一个简单的Java类,用以演示如何在代码中使用Log4j。这通常包括导入`org.apache.log4j.*`包,创建Logger实例,然后调用如`logger.debug("Debug message")`、`logger.info(...
与Log4j 1.x相比,Log4j2在设计上进行了重大改进,并解决了Logback等其他日志框架中存在的某些体系结构问题。 #### 特性概述 1. **审计功能**:Log4j2设计时考虑到了审计需求,这意味着即使在配置更新过程中,它也...
这里,`Logger.getLogger(Log4JTest.class)`会为当前类创建一个logger,然后通过`logger`对象输出不同级别的日志。 4. **优点**: - 动态性:可以在运行时改变日志级别和配置。 - 性能:日志处理效率高,对应用...
这个“log4j示例项目”旨在帮助开发者理解和使用Log4j,通过该项目,我们可以深入学习Log4j的配置、使用方法以及其在实际开发中的应用。 **1. Log4j的组成部分** Log4j主要包括三个核心组件:Logger(日志器)、...
Log4j不仅简单易用,而且功能强大,能够帮助开发者在开发、测试和生产环境中方便地收集和分析日志信息。下面我们将详细探讨Log4j的核心概念、配置以及如何通过示例源代码进行实践。 一、Log4j核心概念 1. **Logger...
在`.properties`文件中,配置信息通过键值对的形式呈现,如示例中的`log4j.category.org.zblog=ERROR,A1`,这里指定了`org.zblog`这个logger的日志级别为`ERROR`,并关联到名为`A1`的appender。 2. **.xml格式**:...
近期,一个名为“log4j2”的严重安全漏洞引发了广泛关注,它影响了所有log4j2版本,从2.0开始直到2.18.0版本之前。这个漏洞,通常被称为“Log4Shell”,因其潜在的危害性被业界高度重视,可能允许攻击者远程执行任意...