zoukankan      html  css  js  c++  java
  • log4j使用及相关说明

    今天尝试着摸索了一下log4j,在这里跟大家分享一下。

    首先,给大家一个log4j的下载地址:http://logging.apache.org/log4j/1.2/download.html

    解压之后,里面有一个log4j-1.2.17.jar,把它添加到工程中。

    【注:文中涉及到的代码都是我自己的代码,没有普遍性,大家用的时候注意修改一下】

    第一步是获取日志记录器 log4j允许开发人员定义多个Logger。

    默认有一个是rootLogger,它不能通过名字检索或者引用,获得方法是使用 Logger.getRootLogger();

    我使用的是自己定义的Logger: static Logger logger = Logger.getLogger("mylog");

    第二步是配置log4j的环境

    有三种类型

    BasicConfigurator.configure ():使用默认log4j环境

    PropertyConfigurator.configure ( String configFilename) :使用Java的特性编写的配置文件

    DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件

    我使用的是第二种 PropertyConfigurator.configure("E:/project/mylog4j.properties");

    注意,括号里最好写绝对路径。

    第三步就是编写配置文件mylog4j.properties

    这步的主要任务是确定三个内容:日志记录器(Logger),输出端(Appenders),格式化器(Layout)

    如果是使用自己定义的Logger的话需要指明(如我前文题到的 mylog)

    输出端有这几种:

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

    org.apache.log4j.FileAppender(文件)

    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

    如果是选择输出到文件需要写明日志文件的路径(最好是绝对路径吧)

    log4j提供的layout有以下几种:

    org.apache.log4j.HTMLLayout(以HTML表格形式布局),

    org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

    选择PatternLayout的话需要写明具体格式:

    1)-X号: X信息输出时左对齐。

    2)%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR。

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

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

    5)%c: 输出日志信息所属的类目,通常就是所在类的全名。

    6)%t: 输出产生该日志事件的线程名。

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

    8)%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。

    9)%%: 输出一个"%"字符。

    10)%F: 输出日志消息产生时所在的文件名称。

    11) %L: 输出代码中的行号。

    12)%m: 输出代码中指定的消息,产生的日志具体信息。

    13)%n: 输出一个回车换行符,Windows平台为" ",Unix平台为" "输出日志信息换行。

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

    (1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。

    (2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。

    (3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

    (4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。

    我的mylog4j.properties如下:

    log4j.logger.mylog=INFO,A

    log4j.appender.A=org.apache.log4j.FileAppender log4j.appender.A.File=e:/project/mylog4j.log

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

    log4j.appender.A.layout.ConversionPattern=%F %L %d %p %c - %m%n

    第四步就是在代码中使用log4j插入记录信息

    logger.info("this is an info"); 
    logger.warn("this is a warn"); 
    logger.error("this is an error"); 
    logger.bebug("this is a bebug"); 
    

    每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。 log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。

    error 指出虽然发生错误事件,但仍然不影响系统的继续运行。

    warm 表明会出现潜在的错误情形。

    info 一般和在粗粒度级别上,强调应用程序的运行全程。

    debug 一般用于细粒度级别上,对调试应用程序非常有帮助。

    也可以在代码中创建一个自定义类,将相关配置及函数调用写在一起

     1 public class log4j {
     2     static Logger logger = Logger.getLogger("mylog");
     3     public static void output(String level, String msg){
     4         PropertyConfigurator.configure("E:/project/mylog4j.properties");
     5 
     6         if(level.equals("debug")){
     7             if (logger.isDebugEnabled()){
     8                 logger.debug(msg);        
     9             }
    10         }else if(level.equals("info")){
    11             if (logger.isInfoEnabled()){
    12                 logger.info(msg);
    13             }            
    14         }else if(level.equals("warn")){
    15             logger.warn(msg);
    16         }else if(level.equals("error")){
    17             logger.error(msg);
    18         }
    19     }
    20 }

    在代码中使用可以直接按以下格式使用:

    1 public static void main(String[] args)
    2 {
    3     System.out.println(("haha"));
    4     System.out.println(("hehe"));
    5     log4j.output("info","this is info.");
    6     log4j.output("info","this is debug."); 
    7     log4j.output("warn","this is warn.");
    8     log4j.output("error","this is error.");
    9 }


    参考资料:

    Apache Log4j配置说明http://zhangjunhd.blog.51cto.com/113473/21014

    使用Log4j进行日志操作http://www.ibm.com/developerworks/cn/java/l-log4j/

    lo4gj详解与实战http://www.iteye.com/topic/378077

    log4j使用笔记http://www.cnblogs.com/eflylab/archive/2007/01/11/618001.html

  • 相关阅读:
    路飞学城-Python爬虫集训-第二章
    路飞学城-Python爬虫集训-第一章
    pymysql 使用
    Mysql 用户管理和权限设置
    spring data jpa
    thymeleaf学习
    Spring Boot技术栈博客笔记(1)
    SpringBoot学习(2)
    使用idea引入注解@SpringBootApplication报错Cannot resolve symbol 'SpringBootApplication'
    SpringBoot学习(1)
  • 原文地址:https://www.cnblogs.com/lettifay/p/3627786.html
Copyright © 2011-2022 走看看