JAVA log4j记录日志

本文介绍如何使用 Log4j 进行日志记录。主要内容包括将 log4j.jar 添加到项目中、创建并配置 log4j.properties 文件以及通过示例代码展示如何调用 Log4j 类来记录不同级别的日志。
log4j,是一个java封装了日志函数的jar包。
官方文档:http://logging.apache.org/log4j/1.2/manual.html
从网上down一个 http://ishare.iask.sina.com.cn/f/12460553.html?from=like 。
   
    如何使用 log4j.jar:
1、将log4j.jar导入到项目中。web项目需要放在 WebRoot/WEB-INF/lib 目录下
2、新建配置文件 我将其命名为 log4j.properties ,放到src目录下
   配置文件中填写如下配置:
   #用来作界面显示的...只显示 INFO 等级的log信息
   log4j.rootLogger= debug,mylogAppenderName,mylogFile
   # mylogAppenderName 在控制台输出
   log4j.appender.mylogAppenderName =org.apache.log4j.ConsoleAppender
   # 定义布局类型
   log4j.appender.mylogAppenderName.layout=org.apache.log4j.PatternLayout
   # 定义输出格式
   log4j.appender.mylogAppenderName.layout.ConversionPattern= %-10p [%t] %C.%M(%L) | %m%n
   # mylogFile 将日志信息输出到文件 
   log4j.appender.mylogFile=org.apache.log4j.FileAppender
   # 日志文件路径
   log4j.appender.mylogFile.File=c:\\example.log
   # 定义布局类型
   log4j.appender.mylogFile.layout=org.apache.log4j.PatternLayout
   # 定义输出格式
   log4j.appender.mylogFile.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n

3、调用log4j里面的类,写日志,参考代码如下:
package log4j;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Mylog4j {
   
    public void getLog4jConf(){
       
        //这句代码视情况添加,有时候载入配置文件会报找不到文件的错误,没必要载入
        //PropertyConfigurator.configure("/log4j.properties");
        Logger logger = Logger.getLogger(Mylog4j.class);
          
        logger.error("这是 error 日志信息。");
        logger.warn("这是 warn 日志信息。");
        logger.info("这是 info 日志信息。");

    }
}
这样运行一下,会根据配置文件在c:\\example.log中记录相应日志信息

ps:java日志也可以利用java.util.logging包中的函数
### 如何在 Java 中实现日志打印 在 Java 开发中,日志记录是一个非常重要的部分,它可以帮助开发者调试程序并监控运行状态。以下是几种常见的日志框架及其使用方法。 #### 使用 Log4j 打印 List 日志信息 Log4j 是 Apache 提供的一个强大的日志框架,可以通过简单的配置完成复杂的日志管理任务。以下是如何通过 Log4j 来打印 `List` 类型的数据: ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.Arrays; import java.util.List; public class LogExample { private static final Logger logger = LogManager.getLogger(LogExample.class); public void logList(List<String> list) { if (logger.isDebugEnabled()) { // 判断是否启用了 Debug 级别的日志 StringBuilder sb = new StringBuilder(); for (String item : list) { sb.append(item).append(", "); } String result = sb.toString(); if (!result.isEmpty()) { result = result.substring(0, result.length() - 2); // 去掉最后多余的逗号和空格 } logger.debug("The content of the list is: {}", result); } } public static void main(String[] args) { LogExample example = new LogExample(); List<String> items = Arrays.asList("Item1", "Item2", "Item3"); example.logList(items); } } ``` 上述代码展示了如何将一个 `List` 转换为字符串形式并通过 `Logger` 对象将其作为 DEBUG 级别日志输出[^1]。 --- #### 获取当前方法名称并打印日志 有时我们可能需要知道某条日志来自哪个方法。这可以通过获取堆栈跟踪信息来实现: ```java class MethodNameLogging { private static final Logger logger = LogManager.getLogger(MethodNameLogging.class); public void someMethod() { String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); logger.info("This message comes from method: {}", methodName); } public static void main(String[] args) { MethodNameLogging logging = new MethodNameLogging(); logging.someMethod(); } } ``` 此代码片段利用了 `Thread.currentThread().getStackTrace()` 方法动态获取调用者的类名和方法名,并将其嵌入到日志消息中[^2]。 --- #### 将日志写入文件 为了持久化存储日志数据,通常会将它们保存至外部文件而非仅限于控制台显示。下面是基于 Log4j 配置文件的方式设置日志路径的例子: **log4j.properties** ```properties # 设置根日志级别以及默认处理器 log4j.rootLogger=DEBUG, FILE # 定义名为FILE的Appender log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.File=./logs/app.log log4j.appender.FILE.MaxFileSize=1MB log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n ``` 当项目启动时加载该属性文件后即可自动按照指定格式向目标位置追加新纪录[^3]。 --- #### 实现异步日志打印 对于高并发环境下的应用来说,同步阻塞式的日志处理可能会成为瓶颈之一。因此推荐采用异步机制优化性能表现。这里给出基于 Logback 的解决方案: ```xml <configuration> <!-- 异步 Appender --> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>500</queueSize> <discardingThreshold>0</discardingThreshold> <includeCallerData>true</includeCallerData> <!-- 文件输出器 --> <appender-ref ref="FILE"/> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/path/to/log/file.log</file> <encoder> <pattern>%date [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/path/to/log/archive.%d{yyyy-MM-dd}.gz</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <root level="debug"> <appender-ref ref="ASYNC"/> </root> </configuration> ``` 以上 XML 片段定义了一个异步附加组件 (`AsyncAppender`) 和其关联的实际物理介质 (`RollingFileAppender`) ,从而实现了高效且安全的日志记录过程[^4]。 --- #### 不同日志框架的选择建议 根据实际需求选择合适的日志库至关重要。如果追求灵活性与扩展能力,则优先考虑 **Log4j 或 Logback**;而如果是小型项目或者对依赖引入敏感的话可以选择轻量级方案比如 **JUL**(Java Util Logging)[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值