zoukankan      html  css  js  c++  java
  • log4j

    1. 描述和备注

    a). 两种配置方式,log4j.xml和log4j.properties
    b). 由3个东西组成,
    		"logger"--负责采集日志,程序中使用,有继承关系
    		"appender"--负责日志输出到哪里,控制台或文件
    		"layout"--定义日志输出的格式
    

    1.1 Maven

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    

    1.2 日志打印时组件调用顺序

    a). 日志信息传入 Logger.
    b). 将日志信息封装成 LoggingEvent 对象并传入 Appender.
    c). 在 Appender 中调用 Filter 对日志信息进行过滤,调用 Layout 对日志信息进行格式化,然后输出.
    d). Logger Logger = LogManager.getLogger("categorylog");   (<category标签的name属性>) -->  category --> Appender  
    

    1.5 示例

    public class Ts {
    	// 按字符串匹配category,无则匹配到root, 支持按package层级匹配
    	Logger Logger = LogManager.getLogger(Ts.class);
    
    	@Test
    	public void test() throws InterruptedException {
    		while (true) {
    			Logger.debug("This is debug ..");
    			Logger.info("This is info ..");
    			Logger.error("This is error ..
    
    ");
    			Thread.sleep(2000);
    
    			// log4j.xml动态修改
    			DOMConfigurator.configure(Ts.class.getResource("/log4j.xml"));
    		}
    	}
    }
    
    
    //log4j.xml
    <?xml version='1.0' encoding='UTF-8' ?>  
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
        <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">  
            <layout class="org.apache.log4j.PatternLayout">  
                <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>  
            </layout>  
        </appender>  
      
        <appender name="FILE-DEBUG" class="org.apache.log4j.DailyRollingFileAppender">  
            <param name="DatePattern" value="'.'yyyyMMdd" />  
            <param name="Append" value="true"/>  
            <param name="Threshold" value="DEBUG"/>  
            <param name="Encoding" value="UTF-8"/>  
            <param name="file" value="./debug.log"/>  
            <layout class="org.apache.log4j.PatternLayout">  
                <param name="ConversionPattern" value="[%d{HH:mm:ss}] [%p] - %l - %m%n"/>  
            </layout>  
        </appender>  
        
        <!-- 支持按包过滤,也可以直接是字符串 -->
        <category name="zhou.test">  
            <priority value="ERROR"/>  
            <appender-ref ref="CONSOLE"/>  
            <appender-ref ref="FILE-DEBUG"/>  
        </category>  
    </log4j:configuration> 
    

    3. log4j.xml

    3.2 Appender--日志位置

    内置 appender : 
    	1).ConsoleAppender (控制台), 
    	2).FileAppender (文件), 
    	3).DailyRollingFileAppender (每天产生一个日志文件), 
    	4).RollingFileAppender (文件大小到达指定尺寸的时候产生一个 新的文件) 
    	5).WriterAppender (将日志信息以流格式发送到任意指定的地方) 
    

    3.2.1 示例-每天输出一个日志

    <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">  
        <param name="File" value="${jboss.server.home.dir}/log/server.log"/>  
    
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->  
        <param name="Append" value="false"/>  
        <!-- Rollover at midnight each day -->  
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>  
    	
        <layout class="org.apache.log4j.PatternLayout">  
            <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>  
        </layout>  
    </appender>  
    

    3.2.2 cmi中实际使用示例

    	<appender name="SYSTEM_RUN_FILE"
    			  class="com.huawei.mdn.cms.log.CMSAppender">
    		<param name="File" value="../logs/run/CMI_system_run" />
    		<param name="MaxFileSize" value="&runLogSize;" />
    		<param name="MaxBackupIndex" value="20" />
    		<param name="Append" value="true" />
    		
    		<layout class="com.huawei.mdn.cms.log.MdnSystemRunLogLayout"/>
    		
    		<filter class="org.apache.log4j.varia.LevelRangeFilter">
    			<param name="LevelMin" value="INFO"/>
    			<param name="LevelMax" value="FATAL"/>
    		</filter>
    
    	</appender>
    

    3.2.3 filter标签

    	<!--过滤器设置输出的级别-->       
    	<filter class="org.apache.log4j.varia.LevelRangeFilter">       
    		<param name="levelMin" value="debug" />       
    		<param name="levelMax" value="warn" />       
    		<param name="AcceptOnMatch" value="true" />       
    	</filter> 
    

    3.2.5 自定义Appender--如把日志发送到flute

    继承AppenderSkeleton类-->[一般]实现Append方法即可
    

     

    3.4. layout--日志格式

    //内置layout
    	HTMLLayout(以HTML表格形式布局),
    	PatternLayout(可自定义布局和输出内容)-- 常用 
    	SimpleLayout(包含日志信息的级别和信息字符串),
    	TTCCLayout(包含日志产生的时间、线程、类别等等信息)
    
    Log4J采用类似C的printf函数的格式化日志,打印参数如下: -- 常用 “[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n”
    	%p 	输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
    	%l 	输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:com.Testlog4.main(TestLog4.java:10)
            %d 	输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
    	%n 	输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
            %m 	输出代码中指定的消息
            
            %x   
            %t 	输出产生该日志事件的线程名        
    
    	%r 	输出自应用启动到输出该log信息耗费的毫秒数
    	%c 	输出所属的类目,通常就是所在类的全名
    	%M   调用logger的方法名。
    	
    

    3.4.1 示例参见3.3.1节

        <layout class="org.apache.log4j.PatternLayout">  
            <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>  
        </layout>  
    </appender>  
    

    3.4.2 自定义layout--自定义输出格式

    继承 TTCCLayout等内置的layout,或是layout接口-->实现format方法即可
    
    public class MdnDebugLogLayout extends TTCCLayout
    {
        private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
    
        public MdnDebugLogLayout()
        {
        }
    
        @SuppressWarnings("unchecked")
        public String format(LoggingEvent event)
        {
            LocationInfo locationInfo = event.getLocationInformation();
            String lineNumber = locationInfo.getLineNumber();
            String fileName = locationInfo.getFileName();
            String threadName = event.getThreadName();
            String message = event.getRenderedMessage();
    
            setDateFormat(DATE_FORMAT);
            buf.setLength(0);
            buf.append("[");
            buf.append(threadName);
    
            return buf.toString();
        }
    }
    
    

    3.5 catagory/root标签--定义打印日志的包

    //Logger Logger = LogManager.getLogger("categorylog");   (<category标签的name属性>) -->  category --> Appender 
        <appender name="FILE-DEBUG" class="org.apache.log4j.DailyRollingFileAppender">  
            <param name="DatePattern" value="'.'yyyyMMdd" />  
            <param name="Append" value="true"/>  
            <param name="Threshold" value="DEBUG"/>  
            <param name="Encoding" value="UTF-8"/>  
            <param name="file" value="${profile.log.root.path}/${profile.log.name.web}/${profile.log.name.web}-debug.log"/>  
            <layout class="org.apache.log4j.PatternLayout">  
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%7r] %-5p %c %M:%L - %m%n"/>  
            </layout>  
        </appender>  
      
    	<!-- 日志过滤,只打印 com.portal.controller路径下日志 -->
        <category name="com.portal.controller">  
            <priority value="INFO"/>  
            <appender-ref ref="CONSOLE"/>  
        </category>  
      
        <root>  
            <priority value="INFO"/>  
            <appender-ref ref="CONSOLE"/>  
            <appender-ref ref="FILE-DEBUG"/>  
        </root>  
    </log4j:configuration>  
    
  • 相关阅读:
    SpringBoot + CXF快速实现SOAP WebService(支持Basic Auth)
    利用iptables做端口转发
    artDialog测试
    jquery的常用ajax操作
    通过委托让缓存操作更优雅
    Jquery取得iframe中元素的几种方法
    jQuery选择器大全
    常用JS汇总
    firefox广告拦截插件
    easyUI删除行的操作
  • 原文地址:https://www.cnblogs.com/Desneo/p/7906341.html
Copyright © 2011-2022 走看看