概念储备

  •  Apache的一款日志开源框架
  • 可以控制日志输出级别、输出格式、输出位置等

日志级别

  1. fatal:会导致系统退出的错误
  2. error:属于错误,但是不影响程序运行
  3. warn:警告,可能会产生影响程序运行的错误
  4. info:程序正常运行
  5. debug:程序运行过程中,程序员调试时需要知道的信息
  6. trace:变量的变化等信息

推荐仅使用如下四个级别

  1. error
  2. warn
  3. info
  4. debug

输出格式

通过标识符配置

  • %m:日志信息
  • %p:输出优先级
  • %n:换行符
  • %r:自应用启动到改日志输出的毫秒数
  • %c:输出日志的类
  • %t:线程名
  • %d{yyyy.MM.dd}:设备时间,不带格式%d默认为ISO8601
  • %l:类名、线程、行数
  • %F:文件名
  • %L:行号
  • %%:输出百分号

注:可在配置上述指定内容时限定字数,方式为在%和后面的符号之间加数字,下面以日志信息举例

  1. %5m:输出日志内容最少为5字符,少的用空格补齐,默认右对齐
  2. %-5m:输出内容最少为5字符,少的用空格补齐,指定左对齐
  3. %.5m:输出日志的内容最多5个字符,超过5个字符从最后截取5个
  4. %-5.10m:输出内容少于5个的,用空格补齐至5个,左对齐,多出10个的,截取最后十个
  5. %10.10m:输出内容限定为10个,少的空格补齐,右对齐,多的裁剪最后10个

输出位置

  1. ConsoleAppender:输出到控制台
  2. FileAppender:输出到文件
  3. DailyRollingFileAppender:输出到文件,每天更新一个文件
  4. RollingFileAppender:输出到文件,达到一定大小就输出新日志文件
  5. JDBCAppender:输出到数据库

新建文件方式

输出到文件时,会有一定的规则产生新文件,产生新文件的过程如下

  1. 输出日志到配置文件中指定的文件
  2. 达到产生新文件的规则,比如指定文件的大小已经超过限制等
  3. 重命名指定文件,按照规则比如添加序号后缀等
  4. 新建文件,文件名为原指定文件

依赖

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

 

操作

尝试输出日志

1.在resources文件下新建文件log4j.properties

#指定日志的输出级别与输出端
log4j.rootLogger=trace,Console
# 控制台输出配置
log4j.appender.Console=org.apache.log4j.ConsoleAppender
# 指定消息格式 layout
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
# 指定消息格式的内容
log4j.appender.Console.layout.ConversionPattern = %d [%t] %-5p [%c] - %m%n

2.在Java文件中获取日志类并输出日志

public class TestLog4J {

    @Test
    public void firstLog4j(){
        // 将日志读取配置文件的配置过程输出到控制台,方便查找配置的错误
        LogLog.setInternalDebugging(true);

        // 获取日志,并且设置日志所在类为本类
        Logger logger = Logger.getLogger(TestLog4J.class);

        // 打印不同级别的日志
        logger.info("this is info ");
        logger.fatal("this is fatal");
    }
}

 

配置文件

日志使用的Java代码区别不大,主要看配置文件指定日志输出方式

输出到控制台

#指定日志的输出级别与输出端
log4j.rootLogger=trace,Console
# 控制台输出配置
log4j.appender.Console=org.apache.log4j.ConsoleAppender
# 指定消息格式 layout
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
# 指定消息格式的内容
log4j.appender.Console.layout.ConversionPattern = %d [%t] %-5p [%c] - %m%n

输出到文件,日志文件到一定大小就新建文件

# 输出级别为trace 输出形式为文件,文件超过指定大小新建日志文件
log4j.rootLogger=trace,rollingFile
# 文件输出配置
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender

# 指定日志的输出路径
log4j.appender.rollingFile.file = D:/loshill/blog/document/log/testlog.log

# 使用自定义日志格式化器
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
# 指定日志的输出格式
log4j.appender.rollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] -[%p] %m%n

# 指定日志的文件编码
log4j.appender.rollingFile.encoding = UTF-8
# 日志超过1KB就新建文件,文件命名方式是添加序号作为后缀
log4j.appender.rollingFile.maxFileSize = 1KB
# 只保留最新的10个日志文件
log4j.appender.rollingFile.maxBackupIndex = 10

输出到文件,超过一定时间就新建文件

# 指定日志的输出级别与输出方式
log4j.rootLogger=trace,dailyFile
# 文件输出配置
log4j.appender.dailyFile = org.apache.log4j.DailyRollingFileAppender

# 指定日志的输出路径
log4j.appender.dailyFile.File = D:/loshill/blog/document/log/testlog.log
# 每次对文件的操作方式为覆盖,默认是追加
log4j.appender.dailyFile.Append = true
# 使用自定义日志格式化器
log4j.appender.dailyFile.layout = org.apache.log4j.PatternLayout
# 指定日志的输出格式
log4j.appender.dailyFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] -[%p] %m%n

# 指定日志的文件编码
log4j.appender.dailyFile.encoding = UTF-8
# 设置新建文件的时间限制,也是日志文件的命名规则,超过一秒就新建一个日志文件,不过不太准确,一般是几秒新建一次
#
log4j.appender.dailyFile.datePattern = '.'yyyy-MM-dd-HH 每小时新建一次
log4j.appender.dailyFile.datePattern = '.'yyyy-MM-dd-HH-mm-ss

 输出到数据库

# 指定日志的输出级别与输出端
log4j.rootLogger=trace,logDB

# mysql
log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
# 数据库配置 log4j.appender.logDB.Driver
=com.mysql.jdbc.Driver log4j.appender.logDB.URL=jdbc:mysql://localhost:3306/test log4j.appender.logDB.User=root log4j.appender.logDB.Password=123456
# 录入方式 log4j.appender.logDB.Sql=INSERT INTO log(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values('itcast','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')

 

 

参考

 

Java日志 - log4j