项目日志log管理

项目中一般都需要日志输出。这里主要谈谈commons-logging、log4j、slf4j、logback这四个东西。

可以使用apache commons logging + log4j组合,或者slf4j + logback的组合(新秀)。

commons-logging:
简介:日志的门面接口。避免和具体的日志方案直接耦合。
我 们经常会看到两个 jar 包:commons-logging.jar 和 log4j.rar。为什么我们在使用 log4j 的同时还要引入 commons-logging.jar 呢?原因是commons-logging只是一种日志前端接口,而log4j才是真正的输出日志实现。
官网:http://commons.apache.org/proper/commons-logging/
使用时导入jar包:commons-logging-[version].jar

log4j:
简介:经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;
我们也可以通过编写配置文件来控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
官网:http://logging.apache.org/log4j/2.x/
使用时导入jar包:log4j-[version].jar

一般使用commons-logging时,都要导入log4j,因为其底部是调用了log4j,如果没导入,会出现“找不到类”异常。


tips:commons项目也是Apache很强大的一个项目,主要提供编程时一些公共的功能。


slf4j:
简介:java简单日志门面。 是对不同日志框架提供的一个门面封装。可作为commons-logging的替代。
是一种日志前端接口,可以用logback来作为它的实现。
官网:http://www.slf4j.org/
使用时导入jar包:slf4j-api-[version].jar


logback:
简介:一个通用可靠、快速灵活的日志框架,可以代替log4j作为一种新的解决方案。
官网:http://logback.qos.ch/
使用时导入jar包:logback-core-[version].jar、logback-classic-[version].jar

logback为什么要和slf4j结合使用:原因跟commons-logging和log4j结合使用一样!

log4j:项目中使用log4j来进行 日志 输出管理  【详解】:

为什么需要Log4j---项目的调试是log4j产生的内在驱动力

原始的方法是:把信息输出到屏幕(console),利用JDK提供的System.out.println。但是,这样做的坏处是显而易见的: 

a)信息的输出不够灵活,并且繁琐。比如,要输出执行处的文件名,行数,当前时间等,println显得很原始。
b
)如果要改变输出的内容和格式,需要重新编译源程序。
c
)更严重的是,如果程序中有很多的println,会严重的影响程序的性能。

Log4j使用的几个关键点?

——根记录器(Logger),输出端(appenders)和布局(layouts

简单示例:

#定义DEBUG优先级,R为日志输出目的的  
log4j.rootLogger=DEBUG, R  

#设置日志输出类型,为文件类型  
log4j.appender.R=org.apache.log4j.FileAppender  
#org.apache.log4j.ConsoleAppender,将日志信息输出到控制台
#org.apache.log4j.FileAppender,将日志信息输出到一个文件
#org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件
#org.apache.log4j.WriterAppender,将日志信息以流格式发送到任意指定的地方。
#org.apache.log4j.jdbc.JDBCAppender,通过JDBC把日志信息输出到数据库中


#设置日志文件名my.log  
log4j.appender.R.file=my.log  

#每次在文件尾写入新的日志信息  
log4j.appender.R.Append=true 

#日志输出信息格式类型  
log4j.appender.R.layout=org.apache.log4j.PatternLayout  
#org.apache.log4j.HTMLLayout,以HTML表格形式布局
#org.apache.log4j.PatternLayout,可以灵活地指定布局模式
#org.apache.log4j.SimpleLayout,包含日志信息的级别和信息字符串


#日志输出信息格式为 换行、换行、日期、优先级、[类名]、日志信息、换行  
log4j.appender.R.layout.ConversionPattern=%n%n%d%p[%c]-%m%n 
#%c 输出日志信息所属的类的全名
#%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
#%f 输出日志信息所属的类的类名
#%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
#%m 输出代码中指定的信息,如log(message)中的message
#%n 输出一个回车换行符,Windows平台为“
”,Unix平台为“
”
#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
#%r 输出自应用启动到输出该日志信息所耗费的毫秒数
#%t 输出产生该日志事件的线程名

log4j的配置文件——log4j.properties或者log4j.xml

a)有几种方式可以配置Log4J

在程序中调用BasicConfigurator.configure()方法;
配置放在文件里,通过命令行参数传递文件名字,通过

PropertyConfigurator.configure(args[x])解析并配置;
配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。

b)配置文件的初始化:

通过应用服务器完成初始化

通过servlet辅助完成初始化

java代码写日志简单示例:

package com.log4j;

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

public class Log4jTest {

    static Logger logger;    
    
    public static void main(String[] args) {
        
        String filePath = Log4jTest.class.getResource("/").getPath().replaceAll("%20", " ");
        
        System.out.println("filePath=" + filePath);
        
        
        
        logger = Logger.getLogger(Log4jTest.class);
        
        PropertyConfigurator.configure(filePath + "log4j.properties");
        
        
        //输出 错误信息
        logger.error("出错了!!");
        
        //一般信息
        logger.info("my name is chenyouhuang!!");
        
        //警告信息
        logger.warn("warning!!");
        
        //调试信息
        logger.debug("debug!!");
        
        //致命错误信息
        logger.fatal("致命错误!!");
    }
    
}
原文地址:https://www.cnblogs.com/cyh123/p/3240935.html