zoukankan      html  css  js  c++  java
  • 项目日志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("致命错误!!");
        }
        
    }
  • 相关阅读:
    vs2015帮助文档
    算法之冒泡排序
    c++ 离散数学 群的相关判断及求解
    Entity Framwork(EF) 7——在现在数据库的甚而上开发MVC 新项目
    ASP.NET MVC 5 一 入门
    c# winform TreeView NODE(节点) 重命名或获取节点修改后的值
    xml 中转意字符&/使用方法
    entityframework 入门-来自微软
    c# 利用 两个TREEVIEW控件完成TEENODE的鼠标拖动操作
    Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持
  • 原文地址:https://www.cnblogs.com/cyh123/p/3240935.html
Copyright © 2011-2022 走看看