java日志记录之Logger.getLogger()和LogFactory.getLog()的区别

来源:互联网 发布:建筑作品集知乎 编辑:程序博客网 时间:2024/06/08 10:21

最近研究项目代码时发现同一个项目用到关于日志的两种不同写法:

Logger.getLogger()和LogFactory.getLog()的区别
    1.Logger.getLogger()是使用log4j的方式记录日志;API文档

    2.LogFactory.getLog()则来自apache的common-logging包。API文档

根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试( DEBUG )”“信息( INFO )”“警告( WARN )”“错误(ERROR )”“致命错误( FATAL )”

Spring AOP 里面private Logger logger=Logger.getLogger(TaskTest.class);

TaskTest这个类注册到log,然后就能调用log4j里面的配置进行日志输出

Log logger = LogFactory.getLog(TaskTest.class);


为什么同时使用commons-logging和Log4j?    

common-logging组件:
       Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。

LogFactory来自common-logging包。如果用LogFactory.getLog,你可以用任何实现了通用日志接口的日志记录器替换log4j,而程序不受影响。apache的common-logging包是通用日志接口,通过这个中间层,你可以随便指定到底用哪个日志系统。增加系统的灵活性。若log4j它不存在, commons-logging 会另行选择其它的日志实现类。 这样保证了程序中不一定要使用log4j这个日志文件了

增强灵活性的理由:
1)
首先在 classpath 下寻找自己的配置文件 commons-logging.properties ,如果找到,则使用其中定义的 Log 实现类;

2)如果找不到 commons-logging.properties 文件,则在查找是否已定义系统环境变量 org.apache.commons.logging.Log ,找到则使用其定义的 Log 实现类;

3)否则,查看 classpath 中是否有 Log4j 的包,如果发现,则自动使用 Log4j 作为日志实现类;

4)否则,使用 JDK 自身的日志实现类( JDK1.4 以后才有日志实现类);

5)否则,使用 commons-logging 自己提供的一个简单的日志实现类 SimpleLog ;


  为了简化配置 commons-logging ,一般不使用 commons-logging 的配置文件,也不设置与 commons-logging 相关的系统环境变量,而只需将 Log4j 的 Jar 包放置到 classpash 中就可以了。这样就很简单地完成了 commons-logging 与 Log4j 的融合。

Log4j

Log4j系统的三大板块:日志写入器、日志输出终端、日志布局模式                     
在实际使用中,Log4j一般是通过配置文件配置使用的。配置文件有两种,Java properties和XML文件。一般都选用properties文件来配置,因为简洁易读。下面只介绍Java properties的配置方式。
对Log4j的配置就是对rootLogger和子Logger的配置。主要的配置项为:rootLogger、输出终端、输出布局模式,所有的配置项都必须以log4j开头。

<span style="font-size:18px;">##Log4J的配置之简单使它遍及于越来越多的应用中了     ##Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了。     ##此文件(log4j.properties)内容来自网络,非本文作者liigo原创。   log4j.rootLogger = DEBUG, CONSOLE,A1   log4j.addivity.org.apache = true    # 应用于控制台   log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender   log4j.appender.Threshold = DEBUG   log4j.appender.CONSOLE.Target = System.out   log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout   log4j.appender.CONSOLE.layout.ConversionPattern = [framework] % d - % c -%- 4r [ % t] %- 5p % c % x - % m % n   #log4j.appender.CONSOLE.layout.ConversionPattern = [start] % d {DATE} [DATE] % n % p[PRIORITY] % n % x[NDC] % n % t[THREAD] n % c[CATEGORY] % n % m[MESSAGE] % n % n     #应用于文件   log4j.appender.FILE = org.apache.log4j.FileAppender   log4j.appender.FILE.File = file.log   log4j.appender.FILE.Append = false  log4j.appender.FILE.layout = org.apache.log4j.PatternLayout   log4j.appender.FILE.layout.ConversionPattern = [framework] % d - % c -%- 4r [ % t] %- 5p % c % x - % m % n   # Use this layout for LogFactor 5 analysis     # 应用于文件回滚   log4j.appender.ROLLING_FILE = org.apache.log4j.RollingFileAppender   log4j.appender.ROLLING_FILE.Threshold = ERROR   log4j.appender.ROLLING_FILE.File = rolling.log   log4j.appender.ROLLING_FILE.Append = true  log4j.appender.ROLLING_FILE.MaxFileSize = 10KB   log4j.appender.ROLLING_FILE.MaxBackupIndex = 1  log4j.appender.ROLLING_FILE.layout = org.apache.log4j.PatternLayout   log4j.appender.ROLLING_FILE.layout.ConversionPattern = [framework] % d - % c -%- 4r [ % t] %- 5p % c % x - % m % n     #应用于socket   log4j.appender.SOCKET = org.apache.log4j.RollingFileAppender   log4j.appender.SOCKET.RemoteHost = localhost   log4j.appender.SOCKET.Port = 5001  log4j.appender.SOCKET.LocationInfo = true  # Set up for Log Facter 5  log4j.appender.SOCKET.layout = org.apache.log4j.PatternLayout   log4j.appender.SOCET.layout.ConversionPattern = [start] % d {DATE} [DATE] % n % p[PRIORITY] % n % x[NDC] % n % t[THREAD] % n % c[CATEGORY] % n % m[MESSAGE] % n % n     # Log Factor 5 Appender   log4j.appender.LF5_APPENDER = org.apache.log4j.lf5.LF5Appender   log4j.appender.LF5_APPENDER.MaxNumberOfRecords = 2000    # 发送日志给邮件   log4j.appender.MAIL = org.apache.log4j.net.SMTPAppender   log4j.appender.MAIL.Threshold = FATA   log4j.appender.MAIL.BufferSize = 10  log4j.appender.MAIL.From = web@www.wuset.com   log4j.appender.MAIL.SMTPHost = www.wusetu.com   log4j.appender.MAIL.Subject = Log4J Message   log4j.appender.MAIL.To = web@www.wusetu.com   log4j.appender.MAIL.layout = org.apache.log4j.PatternLayout   log4j.appender.MAIL.layout.ConversionPattern = [framework] % d - % c -%- 4r [ % t] %- 5p % c % x - % m % n       # 用于数据库   log4j.appender.DATABASE = org.apache.log4j.jdbc.JDBCAppender   log4j.appender.DATABASE.URL = jdbc:mysql: // localhost:3306/test   log4j.appender.DATABASE.driver = com.mysql.jdbc.Driver   log4j.appender.DATABASE.user = root   log4j.appender.DATABASE.password =   log4j.appender.DATABASE.sql = INSERT INTO LOG4J (Message) VALUES ( ' [framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n ' )   log4j.appender.DATABASE.layout = org.apache.log4j.PatternLayout   log4j.appender.DATABASE.layout.ConversionPattern = [framework] % d - % c -%- 4r [ % t] %- 5p % c % x - % m % n   log4j.appender.A1 = org.apache.log4j.DailyRollingFileAppender   log4j.appender.A1.File = SampleMessages.log4j   log4j.appender.A1.DatePattern = yyyyMMdd - HH ' .log4j '  log4j.appender.A1.layout = org.apache.log4j.xml.XMLLayout     #自定义Appender   log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender   log4j.appender.im.host = mail.cybercorlin.net   log4j.appender.im.username = username   log4j.appender.im.password = password   log4j.appender.im.recipient = corlin@cybercorlin.net   log4j.appender.im.layout = org.apache.log4j.PatternLayout   log4j.appender.im.layout.ConversionPattern = [framework] % d - % c -%- 4r [ % t] %- 5p % c % x - % m % n     # 结束  </span>



0 0