zoukankan      html  css  js  c++  java
  • 有关Log4j知识小结

    log4J是什么
    Log4J是一个基于Java的记录日志通用包。最早由一个叫Ceki的人开始编写,现在已经成为Apache软件基金会的一个项目。Log4J是Java日志框架之一。
    使用Log4J的优点
    1. 通过修改配置文件,可以决定Log信息的目的地。
    2. 通过修改日志文件,可以定义日志输出的级别,从而控制日志信息的输出。在系统开发阶段可以打印详细的log信息以跟踪系统运行情况而在系统稳定后可以关闭log输出从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println)
    3. 使用log4j,使得整个系统有一个统一的log机制,有利于系统的规划
    Log4J的组成
    There are two ways to configure log4j. One is with a properties file and the other is with an XML file. Within either you can define 3 main components: Loggers, Appenders and Layouts. Configuring logging via a file has the advantage of turning logging on or off without modifying the application that uses log4j. The application can be allowed to run with logging off until there's a problem, for example, and then logging can be turned back on simply by modifying the configuration file.
    Three main components:
    Loggers are logical log file names. They are the names that are known to the Java application. Each logger is independently configurable as to what level of logging (FATAL, ERROR, etc) it currently logs. In early versions of log4j, these were called category and priority, but now they're called logger and level, respectively.
    The actual outputs are done by Appenders. There are numerous Appenders available, with descriptive names, such as FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, NTEventLogAppender and even SMTPAppender. Multiple Appenders can be attached to any Logger, so it's possible to log the same information to multiple outputs; for example to a file locally and to a socket listener on another computer.
    Appenders use Layouts to format log entries. A popular way to format one-line-at-a-time log files is PatternLayout, which uses a pattern string, much like the C/C++ function printf. There are also HTMLLayout and XMLLayout formatters for use when HTML or XML formats are more convenient, respectively.

    Log4J的配置
    一个简单的log4j.properties配置文件:
    log4j.rootLogger=debug, stdout
    log4j.appender.stdout
    = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target
    = System.err##或者System.out(默认)
    log4j.appender.stdout.layout
    = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern
    = %d{ABSOLUTE} %5p %c %t:%L - %m%n
    对这段代码的注释:

      log4j.rootLogger=debug, stdout

      配置根Logger,其语法为:

      log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

      level:日志记录的优先级,分别为:OFF、FATAL、ERROR、WARN、INFO、DEBUG和ALL或者自定义的级别。Log4J建议只是用四个级别,优先级从高到低分别是:ERROR、WARN、INFO和Debug。通过在这定义级别,我们就可以控制应用程序中相应级别的日志信息的开关。例如:在这里定义了INFO级别,则应用程序中DEBUG级别的日志信息将不会被打印出来。

      AppenderName:指定的日志信息输出到哪里。这里可以指定多个输出目的地。AppenderName可以自己定义。

      log4j.appender.stdout=org.apache.log4j.ConsoleAppender

      配置日志信息输出地目的地Appender,其语法为:

      log4j.appender.appenderName = fully.qualified.name.of.appender.class

      其中, fully.qualified.name.of.appender.class可以有五个选项:

      1.org.apache.log4j.ConsoleAppender(控制台)

    2.org.apache.log4j.FileAppender(文件)
      3.org.apache.log4j.DailyRollingFileAppender
    (每天产生一个日志文件)
      4.org.apache.log4j.RollingFileAppender
    (文件大小到达指定尺寸的时候产生一个新的文件)
      5.org.apache.log4j.WriterAppender
    (将日志信息以流格式发送到任意指定的地方)

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    配置日志信息的格式(布局)Layout,其语法为:
    log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class  
    Log4J提供四种Layout,其分别是:
    1. org.apache.log4j.HTMLLayout(以HTML表格形式布局)
    2. org.apache.log4j.PatternLayout(灵活的指定布局模式)
    3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
    4. org.apache.log4j.TTCCLayout(包含日志信息的线程、级别、所属类目、信息字符串)

    为不同的Appender设置日志输出:
    1. ConsoleAppender
      如上例子
    2. DailyRollingFileAppender
      
    log4j.appender.file = org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.file.File = logs/log.log 
    log4j.appender.file.Append = true
    log4j.appender.file.Threshold = Info
    log4j.appender.file.layout = org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern = %5p [%t:%r]  %m %-d{yyyy-MM-dd HH:mm:ss} %n
    

      3.其他类似

    一个可以运行的小程序:
    log4j.propertites文件配置:
    log4j.rootLogger=Debug, file
    #log4j.appender.A=org.apache.log4j.ConsoleAppender
    #log4j.appender.A.layout=org.apache.log4j.PatternLayout
    #log4j.appender.A.layout.ConversionPattern=%5p [%t] (%F:%L) - %m %n
    
    log4j.appender.file = org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.file.File = logs/log.html
    log4j.appender.file.Append = true
    log4j.appender.file.Threshold = debug 
    log4j.appender.file.layout = org.apache.log4j.HTMLLayout
    

      ConversionPattern中打印参数含义:

      Log4J 采用类似C 语言中的 printf 函数的打印格式格式化日志信息,如下:

      %m   输出代码中指定的消息 

        %p   输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL  

          %r   输出自应用启动到输出该 log信息耗费的毫秒数  

          %c   输出所属的类目,通常就是所在类的全名  

          %t   输出产生该日志事件的线程名  

          %n   输出一个回车换行符,Windows 平台为“\r\n”,Unix 平台为“\n”  

          %d   输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002 年10月 18 日  22 : 10 : 28 , 921   

          %l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )  

      

      Java小程序

      

    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    
    public class MyLog4J {
    	static Logger logger = Logger.getLogger(MyLog4J.class.getName());
    	public static void main(String[] args) {
    		PropertyConfigurator.configure( "./src/log4j.properties" );
    		logger.debug("Hello World!");
    		logger.info("Hello China!");
    	}
    }
    

      


  • 相关阅读:
    IO模型
    协程
    线程
    进程
    网络编程
    模块二
    面向对象(二)
    面向对象(一)
    优化异常报错
    python 模块
  • 原文地址:https://www.cnblogs.com/shitouer/p/log4j.html
Copyright © 2011-2022 走看看