log4j 使用介绍

Log4j组件

Log4j主要有Loggers(日志记录器)、Appenders(输出端)和Layout(日志格式化器)组成。
其中Loggers控制日志的输出级别与日志是否输出,Appenders指定日志的输出方式(输出到控制到,文件等),Layout控制日志信息的输出格式。

Log4j的日志级别(默认级别:Debug):

  • FATAL - 严重错误
  • ERROR - 错误信息
  • WARN - 警告信息
  • INFO - 运行信息
  • DEBUG - 调试信息
  • TRACE - 追踪信息

Log4j常用的输出位置有以下几种:

输出端类型 介绍
ConsoleAppender 将日志输出到控制台
FileAppender 将日志输出到文件中
DailyRollingFileAppender 将日志输出到日志文件中,并且每天生成一个新文件
RollingFileAppender 将日志输出到日志文件中,并且指定文件的尺寸,当文件大小达到指定大小后,会自动把文件更名,并生成一个新的文件
JDBCAppender 将日志信息保存到数据库中

Log4j常用的Layout:

格式化类型 介绍
HTMLLayout 格式化日志输出为HTML表格形式
SimpleLayout 简单的日志输出格式化,打印的日志格式为(info - message)
PatternLayout 最强大的格式化器,可以根据自定义格式输出日志,如果没有指定转换格式,就用默认的转换格式

HTMLLayout:
log4j 使用介绍

自定义消息格式常用(conversionPattern):

  • %m 输入代码中指定的日志信息
  • %p 输出优先级,即DEBUG、INFO等
  • %r 输出自应用启动到输出该log信息耗费的毫秒数
  • %c 输出打印语句所属的全限定名
  • %t 输出产生该日志的线程全名
  • %d 输出服务器当前时间,默认为IS08601,也可以指定格式,如:%d{yyyy-MM-dd HH:mm:ss:SSS}
  • %l 输出日志发生的位置,包括类名、线程名以及代码的行数,如:Test.main(Test.java:10)
  • %F 输出日志消息产生时,所在的文件名称
  • %L 输出代码的行数
  • %% 输出一个"%"字符
  • %n 换行符

可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本对齐方式。如:

  • %5c 输出category,最小宽度是5,category<5,默认情况下为右对齐
  • %5c 输出category,最小宽度是5,category<5,- 指定左对齐,产生空格
  • %.5c 输出category,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有有空格
  • %20.30c category<20补空格,并且右对齐,>30字符,就会把左边超出的字符截掉
# 指定rootLogger *父元素默认配置信息
# 指定日志级别为info,使用的appender是什么(自定义名称)
log4j.rootLogger = trace,logDB

# 自定义logger对象
#log4j.logger.cn.sivan = info,file
#log4j.logger.org.apache = trace,console

# 指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
# 指定名称为console的appender 使用的消息格式(layout)
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# 指定消息格式的内容 [test] 文件的开头
log4j.appender.console.layout.conversionPattern = [test][%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n

# 自定义消息格式常用(conversionPattern):
# log4j采用类似c语言的printf函数的打印格式 格式化日志信息,具体的占位符及其含义如下:
# %m  输入代码中指定的日志信息
# %p  输出优先级,即DEBUG、INFO等
# %r  输出自应用启动到输出该log信息耗费的毫秒数
# %c  输出打印语句所属的全限定名
# %t  输出产生该日志的线程全名
# %d  输出服务器当前时间,默认为IS08601,也可以指定格式,如:%d{yyyy-MM-dd HH:mm:ss:SSS}
# %l  输出日志发生的位置,包括类名、线程名以及代码的行数,如:Test.main(Test.java:10)
# %F  输出日志消息产生时,所在的文件名称
# %L  输出代码的行数
# %%  输出一个"%"字符
# %n  换行符

# 可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本对齐方式。如:
# %5c       输出category,最小宽度是5,category<5,默认情况下为右对齐
# %5c       输出category,最小宽度是5,category<5,- 指定左对齐,产生空格
# %.5c      输出category,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有有空格
# %20.30c   category<20补空格,并且右对齐,>30字符,就会把左边超出的字符截掉


# 将日志输出到文件
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.append = true
# 指定消息格式的内容
log4j.appender.file.layout.conversionPattern = [test][%p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
# 指定日志文件的保存路径
log4j.appender.file.file = logs/log4j.log
# 指定日志文件的编码
log4j.appender.file.encoding = UTF-8

# 将日志输出到文件 并按照指定大小拆分
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.append = true
# 指定消息格式的内容 [test] 文件的开头
log4j.appender.rollingFile.layout.conversionPattern = [test][%p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
# 指定日志文件的保存路径
log4j.appender.rollingFile.file = logs/log4j.log
# 指定日志文件的编码
log4j.appender.rollingFile.encoding = UTF-8
# 指定日志文件内容的大小
log4j.appender.rollingFile.maxFileSize = 1MB
# 指定日志文件的数量
log4j.appender.rollingFile.maxBackupIndex = 10

# 将日志输出到文件 并按照日期进行拆分
log4j.appender.dailyFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyFile.append = true
# 指定消息格式的内容 [test] 文件的开头
log4j.appender.dailyFile.layout.conversionPattern = [test][%p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
# 指定日志文件的保存路径
log4j.appender.dailyFile.file = logs/log4j.log
# 指定日志文件的编码
log4j.appender.dailyFile.encoding = UTF-8
# 指定日期拆分规则 第二天才会有指定日期格式的名称
log4j.appender.dailyFile.datePattern = '.'yyyy-MM-dd'.log'

# 保存到数据库
log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
log4j.appender.logDB.BufferSize=1
log4j.appender.logDB.Driver=com.mysql.jdbc.Driver
log4j.appender.logDB.URL=jdbc:mysql://152.136.24.98:3306/db_java?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&rewriteBatchedStatements=true
log4j.appender.logDB.User=root
log4j.appender.logDB.Password=mysql6059@NingChuan
log4j.appender.logDB.Sql=INSERT INTO log(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values('test','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')
上一篇:android-从另一个活动获取并设置listPreference不起作用


下一篇:scala读取mysql数据