log4j学习
- 互联网
- 2026-08-26 07:00:01
-X号: X信息输出时左对齐; %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 %r: 输出自应用启动到输出该log信息耗费的毫秒数 %c: 输出日志信息所属的类目,通常就是所在类的全名 %t: 输出产生该日志事件的线程名 %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.Java:10) %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java servlets这样的多客户多线程的应用中。 %%: 输出一个"%“字符 %F: 输出日志消息产生时所在的文件名称 %L: 输出代码中的行号 %m: 输出代码中指定的消息,产生的日志具体信息 %n: 输出一个回车换行符,Windows平台为”/r/n",Unix平台为"/n"输出日志信息换行 **可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。**如: 1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。
@Test public void test04() { /* 关于log4j.properties 的 layout 的说明 其中PatternLayout 是日常使用最多的方式 查看源码 setConversionPattern这个方式就是PatterLayout的核心方法 conversionPattern 在log4j.properties 这个文件中将layout设置为PatterLayout 主要配置的属性是conversionPatter [%p]%r %c %t %d{yyyy:MM:dd HH:mm:ss} %m %n 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式 [%p]%r %c %t %d{yyyy:MM:dd HH:mm:ss} %m %n [%-5p] 左对齐5个字符,不足5个空格补齐 [%5p] 右对齐5个字符,不足5个空格补齐 */ Logger logger = Logger.getLogger(Log4jTest.class); logger.fatal("fatal信息"); logger.error("error信息"); logger.warn("warn信息"); logger.info("info信息"); logger.debug("debug信息"); logger.trace("trace信息"); } 将日志输出到文件中 # 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示) log4j.rootLogger = trace,file # 配置appender 输出方式 日志输出到哪里,输出到文件 log4j.appender.file = org.apache.log4j.FileAppender # 表示输出的格式 log4j.appender.file.layout = org.apache.log4j.PatternLayout # 自定义layout输出的内容 log4j.appender.file.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n # 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性 log4j.appender.file.file = E://test//log4j.log # 配置输出的字符编码 log4j.appender.file.encoding = utf-8 @Test public void test05() { /* 将日志输出到文件中 console是输出控制台的,将日志输出到文件中,也可以做多方向的输出 查看FileAppender的源码 查看属性信息 protected boolean fileAppend = true; 表示是否追加日志信息,true表示追加 protected int bufferSize = 8*1024; 缓冲区的大小 kb 继续观察找到 setFile 方法 设置文件的位置 通过ognl可以推断出setFile这个方法操作的就是File 如果有输出中文的需求怎么办 观察FileAppender的父类 WriterAppender protected String encoding; 有一个这个属性,就是来设置日志输出的字符编码 */ Logger logger = Logger.getLogger(Log4jTest.class); logger.fatal("fatal信息"); logger.error("error信息"); logger.warn("warn信息"); logger.info("info信息"); logger.debug("debug信息"); logger.trace("trace信息"); } 日志太大对其进行分割----按照文件大小 # 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示) log4j.rootLogger = trace,rollingFile # 配置RollingFileAppender 输出方式 日志输出到哪里,输出到文件 log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender # 表示输出的格式 log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout # 自定义layout输出的内容 log4j.appender.rollingFile.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n # 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性 log4j.appender.rollingFile.file = E://test//log4j.log # 配置输出的字符编码 log4j.appender.rollingFile.encoding = utf-8 # 指定日志文件内容大小 1兆b 超过就进行拆分 log4j.appender.rollingFile.maxFileSize = 1MB # 指定日志拆分的数量 log4j.appender.rollingFile.maxBackupIndex = 5 @Test public void test06() { /* 将日志输出到文件中 日志太多了,不方便管理怎么维护 FileAppender为我们提供了好用的子类来进一步对文件输出进行处理 RollingFileAppender DailyRollingFileAppender 1、RollingFileAppender 这个类表示按照文件的大小来进行拆分的方式进行操作 配置文件进行RollingFileAppender的相关配置 如何拆分,观察RollingFileAppender的源码 protected long maxFileSize = 10*1024*1024;表示拆分文件的大小,默认是10m protected int maxBackupIndex = 1; 拆分文件的书名 # 指定日志文件内容大小 1兆b 超过就进行拆分 log4j.appender.rollingFile.maxFileSize = 1MB # 指定日志拆分的数量 log4j.appender.rollinFile.maxBackupIndex = 5 只要文件超过1MB,那么则会生成另外一个文件,文件的数量最多是5个 文件1 记录日志 1MB 文件2 记录日志 1MB ... ... 文件5 记录日志 1MB 如果5个文件不够怎么办,作为日志管理来说,也不可能让日志无休止的继续增长下去 所以,覆盖策略,按照时间来进行覆盖,原则就是保留新的,覆盖旧的 */ Logger logger = Logger.getLogger(Log4jTest.class); for (int i = 0; i < 10000; i++) { logger.fatal(i + "fatal信息" ); logger.error(i + "error信息"); logger.warn(i + "warn信息"); logger.info(i + "info信息"); logger.debug(i + "debug信息"); logger.trace(i + "trace信息"); } 日志太大对其进行分割----按照时间大小配置文件
# 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示) log4j.rootLogger = trace,dailyRollingFile # 配置DailyRollingFileAppender 输出方式 日志输出到哪里,输出到文件 log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender # 表示输出的格式 log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout # 自定义layout输出的内容 log4j.appender.dailyRollingFile.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n # 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性 log4j.appender.dailyRollingFile.file = E://test//log4j.log # 配置输出的字符编码 log4j.appender.dailyRollingFile.encoding = utf-8 # 根据时间来进行拆分 # 设置DatePattern属性为'.'yyyy-ww 这个是按照周来进行拆分日志 log4j.appender.dailyRollingFile.datePattern = '.'yyyy-MM-dd HH-mm-ss