zoukankan      html  css  js  c++  java
  • log4j输出指定功能的log配置方式区别

    日志的配置文件有两种:

    第一

    ### 设置### 1p:表示日志的输出级别,2p:定义了一个名称用来代表输出到控制台的,....3p:全局的日志类型
    log4j.rootLogger = debug,cansole
    
    ### 输出信息到控制抬 ###
    log4j.appender.cansole = org.apache.log4j.ConsoleAppender
    log4j.appender.cansole.Target = System.out
    log4j.appender.cansole.layout = org.apache.log4j.PatternLayout
    log4j.appender.cansole.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    ### 自定义的日志类型:sceneTest1, SceneTest1:是索引的值
    log4j.logger.SceneTest1= debug,sceneTest1
    log4j.appender.sceneTest1=org.apache.log4j.FileAppender
    log4j.appender.sceneTest1.File =F://logs/sceneTest1.log
    log4j.appender.sceneTest1.layout = org.apache.log4j.PatternLayout
    log4j.appender.sceneTest1.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
    ### 自定义的日志类型:sceneTest2, SceneTest2:是索引的值
    log4j.logger.SceneTest2= debug,sceneTest2
    log4j.appender.sceneTest2=org.apache.log4j.FileAppender
    log4j.appender.sceneTest2.File =F://logs/sceneTest2.log
    log4j.appender.sceneTest2.layout = org.apache.log4j.PatternLayout
    log4j.appender.sceneTest2.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

    不使用类,而是使用loggerName来创建日志:

    #json是用java代码创建logger时用name,而不是jsonlog,注意,不需要在rootLogger中再配置,否则其它无关信息也将输出到jsonlog中
    log4j.logger.json=DEBUG,jsonlog
    log4j.additivity.json=false
    log4j.appender.jsonlog=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.jsonlog.File = logs/jsonlog.log
    log4j.appender.jsonlog.Append = true
    log4j.appender.jsonlog.Threshold = INFO
    log4j.appender.jsonlog.layout = org.apache.log4j.PatternLayout
    log4j.appender.jsonlog.layout.ConversionPattern =%5p %d %C: %m%n

    java创建日志的方法

    1
    Logger logger=Logger.getLoger("json");

    第二中、xml的配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    
        <!--
           * 1. 一个appender子元素定义一个日志输出目的地
           * 2. 一个logger子元素定义一个日志写出器
        -->
        <!-- catalina.out -->
        <appender name="consoleAppend" class="org.apache.log4j.ConsoleAppender" >
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p][%t][%c{1}]-[%M] %m%n" />
            </layout>
        </appender>
    
        <!-- error log -->
        <appender name="errorAppend" class="org.apache.log4j.DailyRollingFileAppender">
            <param name="File" value="${webapp.root}/logs/SceneTest1.log" />
            <param name="Append" value="true" />
            <param name="MaxBackupIndex" value="10" />
            <param name="MaxFileSize" value="4000000" />
            <param name="encoding" value="utf-8"/>
            <layout class="org.apache.log4j.PatternLayout" >
                <param name="PatternConverter" value="%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n"/>
            </layout>
        </appender>
    
        <!--
            logger的作用:
            1.[name属性]:指定你定义Logger对象时候的name
            2. additivity : children-logger是否使用 rootLogger的配置,
               additivity在log4j默认为true。这解释了为什么有些时候,一个日志信息在屏幕上会有多次输出。
            3.还可以指定level(输出级别)、appender-ref(指定哪个append)
         -->
        <!-- loggers 定义的日志场景SceneTest1 -->
        <logger name="SceneTest1" additivity="true">
            <!-- 如果1个包想对应多个 Appender 就这样,对于每个Appender自定义的日志级别可以在Appender上加上filter -->
            <appender-ref ref="errorAppend" />
        </logger>
    
    
        <!--
            root的作用(相当于全局的意思):
            1.[priority ]:指定默认的全局输出级别
            2.[appender-ref ]:指定一些默认的append(没有指出特殊包或者类,即那些没有指定<logger>元素的append)的输出;
        -->
        <root>
            <priority value="INFO" />
            <!-- 将 logger 中 additivity=true 的日志或者没有指定<logger>的append输出到控制台 -->
            <appender-ref ref="consoleAppend" />
            <!-- 将全局的 error 日志输出到error文件中 -->
            <!--<appender-ref ref="errorAppend" />-->
        </root>
    
    </log4j:configuration>

    这两种方式大同小异。稍微做下对比就可以知道了。

    除了配置文件的形式配置日志,还能通过代码动态的配置属性和文件

    比如,1、动态的初始化配置代码

     /*
         * 动态获取配置信息
         */
        public static Properties getProperties(){
            Properties pp = new Properties();
            pp.put("log4j.rootLogger", "info");
            pp.put("log4j.logger.SceneTest2","debug,sceneTest2");
            pp.put("log4j.appender.sceneTest2", "org.apache.log4j.FileAppender");
            pp.put("log4j.appender.sceneTest2.File", "${webapp.root}/logs/SceneTest2.log");
            pp.put("log4j.appender.sceneTest2.layout", "org.apache.log4j.PatternLayout");
            pp.put("log4j.appender.sceneTest2.layout.ConversionPattern", "%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m -(:%L)%n");
            return pp;
        }
     
    
        PropertyConfigurator.configure(CoustomLogger.getProperties());

    2、可以往这个logger里面添加Appender,应用于多个功能或者场景下输出到不同的日志文件等。

        public static Appender getAppender(){
            Layout layout = new PatternLayout("%d %p [%c] - %m%n");
            Appender appender = null;
            try {
                appender= new FileAppender(layout,"F://logs/sceneTest3.log");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return  appender;
        }

    3、最后添加这个控制台,和xml配置的<logger/>标签很类似。

            PropertyConfigurator.configure(CoustomLogger.getProperties());
            Logger logger = Logger.getLogger("SceneTest2");
            logger.addAppender(CoustomLogger.getAppender());
            logger.debug("debug logger out ");    

     总结,配置log4j可以通过动态和静态配置。可以实现不同的功能模块输出logger到不同的控制器


     如果采用静态配置文件的形式配置的话,启动方式有:

    1、如果是xml配置文件,可通过web.xml的相关配置来初始化配置

    ,也可以在在spring bean容器中配置:

      <bean id="log4jInitialization"
              class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
            <property name="targetClass"
                      value="org.springframework.util.Log4jConfigurer" />
            <property name="targetMethod" value="initLogging" />
            <property name="arguments">
                <list>
                    <value>classpath:log4j.xml</value>
                </list>
            </property>
        </bean>

    2、如果是properties文件,则在web.xml中配置初始化

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 数的统计
    Java实现 蓝桥杯VIP 算法训练 和为T
    Java实现 蓝桥杯VIP 算法训练 友好数
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 暗恋
    Java实现 蓝桥杯VIP 算法训练 暗恋
    测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留
    RichEdit 各个版本介绍
  • 原文地址:https://www.cnblogs.com/taofudemo/p/6932180.html
Copyright © 2011-2022 走看看