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中配置初始化

  • 相关阅读:
    【CoreData】多个数据库使用
    栅格那点儿事(四B)---多波段栅格数据的显示
    栅格那点儿事(四A)---栅格的显示与渲染
    栅格那点儿事(三)---关于压缩
    栅格那点儿事(二)---细看Raster属性
    栅格那点儿事(一)---Raster是个啥子东西
    栅格那点儿事(零)
    ArcMap如何修改地图坐标系统
    ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)
    什么是TOPO学
  • 原文地址:https://www.cnblogs.com/taofudemo/p/6932180.html
Copyright © 2011-2022 走看看