使用log4j 的三种配置组合详解
2023-09-11 14:16:44 时间
方式① 使用Commons Logging + Log4j 方式 (获得 Log)
-
导入
-
正常导入
导入(下载) 三个 jar 包
- log4j-api-xxx.jar
- log4j-core-xxx.jar
- log4j-jcl-xxx.jar
且需要 使用 Commons Logging 的 jar包
- commons-logging-xxx.jar
-
meven 导入
<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.18.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.18.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>2.18.0</version> </dependency>
-
-
使用
需要打印日志: 只需要 按 Commons-Logging 的写法写,不需要改动任何代码,即可以得到 Log4j 的日志输出
即:
LogFactory.getLog()
方式获得 Log- 注意 导入包的 地址
package _2022_08_18_demo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Test_Log4j { public static void main(String[] args) { Log log = LogFactory.getLog(Test_Log4j.class); log.info("Log4j info..."); log.warn("Log4j warn..."); log.error("Log4j error..."); } }
-
配置
-
只能使用 .xml 配置方式
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Properties> <!-- 定义日志格式 --> <Property name="log.pattern">%d{MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}%n%msg%n%n</Property> <!-- 定义文件名变量 --> <Property name="file.err.filename">log/err.log</Property> <Property name="file.err.pattern">log/err.%i.log.gz</Property> </Properties> <!-- 定义Appender,即目的地 --> <Appenders> <!-- 定义输出到屏幕 --> <Console name="console" target="SYSTEM_OUT"> <!-- 日志格式引用上面定义的log.pattern --> <PatternLayout pattern="${log.pattern}" /> </Console> <!-- 定义输出到文件,文件名引用上面定义的file.err.filename --> <RollingFile name="err" bufferedIO="true" fileName="${file.err.filename}" filePattern="${file.err.pattern}"> <PatternLayout pattern="${log.pattern}" /> <Policies> <!-- 根据文件大小自动切割日志 --> <SizeBasedTriggeringPolicy size="1 MB" /> </Policies> <!-- 保留最近10份 --> <DefaultRolloverStrategy max="10" /> </RollingFile> </Appenders> <Loggers> <Root level="info"> <!-- 对info级别的日志,输出到console --> <AppenderRef ref="console" level="info" /> <!-- 对error级别的日志,输出到err,即上面定义的RollingFile --> <AppenderRef ref="err" level="error" /> </Root> </Loggers> </Configuration>
-
方式② 单独Log4j 方式 (获得 Logger)
-
导入
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
-
使用
使用:
Logger.getLogger()
获得 Loggerpackage _2022_08_18_demo; import org.apache.log4j.Logger; public class Test_log4j2 { public static void main(String[] args) { Logger logger = Logger.getLogger(Test_log4j2.class.getName()); logger.info("Log4j info..."); logger.warn("Log4j warn..."); logger.error("Log4j error..."); } }
-
配置文件
-
使用 .properties 文件配置 (建议)
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH:mm:ss.SSS}][%l] %n <%m> %n #文件输出的相关设置 log4j.appender.file = org.apache.log4j.RollingFileAppender #下面的语句是将在项目目录里 创建一个文件,文件里面就是输出的日志。 log4j.appender.file.File=./Java_meven/untitled1/src/main/resources/err2.log #单个文件最大值为10mb log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c] <%m>%n #日志输出级别 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
参数 解释 输出示例 %c 输出 所在包+类的位置 _2022_08_18_demo.Test1 %t 输出 调用函数 main %l 输出 包名 +函数名+ 第几行 包括( %c.%t) _2022_08_18_demo.Test1.main(Test1.java:10) %p 表示 输出级别 INFO %d 表示设置时间格式 一般设置为 %-d{yyyy-MM-dd HH:mm:ss.SSS} 2022-08-18 16:24:52.326 %m 表示 输出信息 %n 换行 %数字 表示 最少输出字符个数 %- 设置左对齐 (默认右对齐) -
xml 配置方式
- 不经常使用 ( 省略 )
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> <log4j:configuration> <!-- appender指定输出目的地,如控制台或文件; appender的名称任意 --> <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" /> </layout> </appender> <!-- category(类别)为'org.springframework'的logger只记录level为“info”或更高级别的消息; 即:如果您使用的类名获取logger(如Logger.getLogger(AClass.class)) 而且AClass是org.springframework包的一部分,则它属于这一category --> <logger name="org.springframework"> <level value="info"/> </logger> <!-- spring的所有日志消息都被设置为“info”等级,但对于类PropertyEditorRegistrySupport, 我们想将其日志消息设置为“debug”等级 --> <logger name="org.springframework.beans.PropertyEditorRegistrySupport"> <level value="debug"/> </logger> <logger name="org.acegisecurity"> <level value="info"/> </logger> <root> <!-- 所有日志消息的级别为“debug”或更高的将被记录,除非另有定义 所有日志消息将都记录到appender “stdout”中,除非另有定义 --> <level value="debug" /> <appender-ref ref="stdout" /> </root> </log4j:configuration>
- 不经常使用 ( 省略 )
-
### 使用 SLF4J + log4j 方式
-
导入包
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.36</version> <!-- <scope>test</scope> --> </dependency>
-
使用
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test_slf4j2 { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(Test_slf4j2.class.getClass()); logger.info("sfl4j+log4j info"); logger.warn("sfl4j+log4j warn"); logger.error("sfl4j+log4j error"); } }
-
配置
使用 Log4j 的配置方式 即可
简单来说
- 一般Commons Logging 与 Log4j 为好基友(一组),
- SLF4j 与 Logback 为好基友(一组)
但是 也可以 强硬的将 SLF4j 与 Log4j 一组
相关文章
- Web应用程序项目XX已配置为使用IIS
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- create-react-app项目添加less配置
- CKA真题:题目和解析-7--手动配置TLS BootStrap
- 在ubuntu14.04上配置SNMPv3
- log4j.properties 详解与配置步骤
- Log4j 1.x和2.x的配置示例
- 2022最新IDEA配置Maven及Tomcat--详细、简单,适合初学者
- ELK菜鸟手记 (一) 环境配置+log4j日志记录
- Java log4j slf4j 日志配置笔记
- log4j配置说明
- ArduinoYun教程之OpenWrt-Yun与CLI配置Arduino Yun
- 使用华为性能管理服务,按需配置采样率
- Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
- Centos7配置IP地址教程
- Django 4.x Logging 日志使用示例和配置方法
- 使用 Sparkle 为 Mac Catalyst 应用程序配置应用程序更新,让我们在 App Store 之外发布应用程序
- mysql5.7.25免安装版配置方法图文教程
- Windoes下安装配置flutter环境
- 【FAQ】【Push Kit】推送服务,回执配置一直报错、回执过期修改、怎么删除配置的回执
- 负载均衡—实现配置篇(Nginx)
- log4j配置
- 配置Log4j(非常具体)
- 配置Log4j(非常具体)
- springMVC项目在jboss7中配置应用自己的log4j--转载
- 基于自动配置jar包和SpringBoot以及注解一分钟快速搭建企业项目开发环境,主要包含DataBase、mybatis、Dubbo、log4j、RabbitMQ、redis及相关客户端配置等等
- SpringBoot配置集成log4j统一处理请求日志(AOP)