zoukankan      html  css  js  c++  java
  • log4j升级log4j2

     1、单独使用log4j

        如果在我们系统中单独使用log4j的话,我们只需要引入log4j的核心包就可以了,我这里用的是:log4j-1.2.17.jar,

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

    在src/main/resources添加log4j.properties文件,详见4。

    然后在系统中使用如下代码输出日志:

    public class Log4jTest {
        private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Log4jTest.class);
        
        public static void main(String[] args) {
            logger.info("hello word");
        }
    }

    也可以使用单元测试,测试其他日志输出功能。

    2、单独使用log4j2   

    如果在我们系统中单独使用log4j2的话,我们只需要引入log4j2的核心包就可以了,我这里用的是:log4j-api-2.8.2.jar和log4j-core-2.8.2.jar:

    <properties>
            <logging.log4j.version>2.8.2</logging.log4j.version>
     </properties>
    ......
    <!-- log4j2 -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${logging.log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${logging.log4j.version}</version>
            </dependency>

    在src/main/resources添加log4j2.xml文件,配置文件见下面4.

    然后在系统中使用如下代码输出日志:

    public class Log4j2Test {
        private static org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(Log4jTest.class);
        public static void main(String[] args) {
            logger.info("hello word");
        }
    }

    3、 log4j升级到log4j2,需要用到slf4j

    如果原有系统日志框架使用的log4j,想要升级到log4j2,可以借助slf4j。

    我们需要引入下面的jar包:
    log4j2核心jar包:log4j-api-2.8.2.jar和log4j-core-2.8.2.jar
    slf4j核心jar包:slf4j-api-1.6.4.jar (我没有引入这个包,依旧可以打印日志)
    slf4j与log4j2的桥接包:log4j-slf4j-impl-2.8.2.jar,这个包的作用就是使用slf4j的api,但是底层实现是基于log4j2

    <properties>
             <logging.log4j.version>2.8.2</logging.log4j.version>
        </properties>
    <!-- log4j2 -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${logging.log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${logging.log4j.version}</version>
            </dependency>
            <!-- slf4j Bridge -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
                <version>${logging.log4j.version}</version>
            </dependency>

    所以我们获取日志仍可以通过下面的代码进行:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
      
    public class Slf4jTest {
        private static final Logger logger = LoggerFactory.getLogger(Slf4jTest2.class);
      
        public static void main(String[] args) {
            logger.info("hello world");
        }

    4、日志配置文件

    使用log4J,需要在src/main/resources添加log4j.properties文件:

    #定义LOG输出级别
    log4j.rootLogger=INFO,Console,File
    #定义日志输出目的地为控制台
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.Target=System.out
    #可以灵活地指定日志输出格式,下面一行是指定具体的格式
    log4j.appender.Console.layout = org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
    #文件大小到达指定尺寸的时候产生一个新的文件
    log4j.appender.File = org.apache.log4j.RollingFileAppender
    #指定输出目录
    log4j.appender.File.File = logs/ssm.log
    #定义文件最大大小
    log4j.appender.File.MaxFileSize = 10MB
    # 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
    log4j.appender.File.Threshold = ALL
    log4j.appender.File.layout = org.apache.log4j.PatternLayout
    log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c]%m%n

    使用log4j2,需要在src/main/resources添加log4j2.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="debug">
        <properties>
            <!-- 基本的文件的输出信息的配置 -->
            <property name="LOG_HOME">logs</property>
            <!-- 日志备份目录 -->
            <property name="SERVER_NAME">web-font</property>
        </properties>
        <appenders>
            <!-- 定义控制台输出 -->
            <CONSOLE name="CONSOLE" target="SYSTEM_OUT" follow="true">
                <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}] %p [%t] %l - %m%n"/>
            </CONSOLE>
            <!-- 文件日志 -->
            <RollingRandomAccessFile name="DAILY-ROLL-FILE" fileName="${LOG_HOME}/${SERVER_NAME}.log"
                                     filePattern="${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd-HH}.log">
                <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}] %p [%t] %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                </Policies>
            </RollingRandomAccessFile>
    
        </appenders>
        <loggers>
            <logger name="org.springframework" level="info" additivity="false">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="DAILY-ROLL-FILE"/>
            </logger>
            <logger name="org.apache.ibatis" level="debug" additivity="false">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="DAILY-ROLL-FILE"/>
            </logger>
            <root level="debug">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="DAILY-ROLL-FILE"/>
            </root>
        </loggers>
    </configuration>

     5、单元测试中使用日志

    也可以在单元测试中使用日志,测试其他日志输出功能。这个使用的slf4j+log4j2

    import com.springmvc.com.springmvc.service.MessageService;
    import com.springmvc.pojo.Message;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import javax.annotation.Resource;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"classpath:spring-mybatis1.xml"})
    public class TestMybatis {
        private static Logger logger = LoggerFactory.getLogger(TestMybatis.class);
        @Resource
        private MessageService messageService;
        @Test
        public  void test1(){
            Message message = messageService.getMessageById(1);
            logger.info("command:" + message.getCommand());
            logger.info("command:{}", message.getCommand());
        }
    }

    6、其他问题

    如果使用了log4j2,但是没有配置log4j2.xml,不会报错,会使用默认的配置。

    ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 
    
    Set system property 'org.apache.logging.log4j.simplelog.StatusLogger.level' to TRACE to show Log4j2 internal initialization logging.

    还要看下log4j2比log4j好在哪里?

    参考文章:

    https://blog.csdn.net/HarderXin/article/details/80422903

    log4j+slf4j迁移到log4j2+slf4j (Servlet3.0):

    https://blog.csdn.net/cloud_ll/article/details/47134259

  • 相关阅读:
    php配置修改后,平滑启动php-fpm
    php-fpm参数调优
    php-fpm 高并发 参数调整 转
    redis分布式锁
    MySQL中group_concat函数 --- 很有用的一个用来查询出所有group by 分组后所有 同组内的 内容
    MySQL中information_schema 数据库 是干什么的
    Mysqldump参数大全 这 些参数 不同于 mysql 的那些参数(下边文章开头有链接) :2 种类型的参数含义是不一样的
    mysql命令行参数 --- 这些参数不同于 mysqldump 后的 那些参数(下边文章开头有链接) :2种类型的参数 含义是不一样的
    not found 什么时候触发
    intellJ svn控制错误
  • 原文地址:https://www.cnblogs.com/xingxing0521/p/9418267.html
Copyright © 2011-2022 走看看