Spring Mvc那点事---(41)SSM使用log4j2记录日志

引子

   现在项目开发中,越来越多使用log4j2来记录日志,log4j2比log4更方便,更快捷,效率更高,更加灵活。使用log4j2需要引入 log4j-api-xxx.jar和log4j-core-xxxx.jar. 今天研究了下使用方法,包括怎样使用log4j2记录日志和把日志信息写入数据库。

准备

    log4j2写入日志包括的级别有如下几种,优先级别为 trace<debug<info<warn<error<fatal, 如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来
    文件名称约定为 log4j2.xml,文件必须放在src目录下面,系统运行的时候,会自动去src目录下加载log4j2.xml文件.
   log4j2.xml文件内容包括 Appender和logger,  根节点configuration下有两个子节点:appenders和loggers(可定义多个appender和logger了)
  Appender表示输出目的地,不同的输出位置都可以被称为Appender,例如,appender可以是console,文件,远程socket服务器,
  一个logger可以绑定多个不同appender
Appenders中的标签内容含义如下
1,ConsoleAppender
输出结果到System.out或是System.err。
2,FileAppender
输出结果到指定文件,同时可以指定输出数据的格式。append=“false”指定不追加到文件末尾
3,RollingFileAppender
自动追加日志信息到文件中,直至文件达到预定的大小,然后自动重新生成另外一个文件来记录之后的日志。


appender常用配置:
           name:appender的名称
    fileName:输出文件和名称
    append:是否追加,true表示追加内容到所在的日志,false表示每次都覆盖
    filePattern:表示当日志到达指定的大小或者时间,产生新日志时,旧日志的命名路径
    PatternLayout:指定输出日志的格式,具体代表的意思见前面的博客中
    Policies:策略,表示日志什么时候应该产生新日志,可以有时间策略和大小策略等
    ThresholdFilter :过滤器,log4j2中有很多的filter
Logger常用配置
   additivity设置为true会被打印多次,加入一个类ProductServiceImpl.class同时满足logger,又满足root,在输出的时候就会输出两次


用法

引入jar包
    <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>
log4j2.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" ignoreExceptions="false">
            <PatternLayout
                pattern="%d{HH:mm:ss.SSS} [%t] %M %-5level %logger{36} - %msg%n" />
        </Console>
        <RollingFile name="RollingFile" fileName="logs/app.log"
            filePattern="logs/app-%d{MM-dd-yyyy}.log.gz" ignoreExceptions="false">
            <PatternLayout>
                <Pattern>%d %p %c [%t] %m%n</Pattern>
            </PatternLayout>
            <TimeBasedTriggeringPolicy />
        </RollingFile>
        />
        </Async>
    </Appenders>
    <Loggers>
        <Logger name="org.supersoft.erp" level="debug" additivity="false">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" /> 
        </Logger>
        <Root level="debug">
                   <appender-ref ref="Console"/>  
        </Root>
    </Loggers>
</Configuration>
在程序中我们有两种方式可以使用
1.private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
    上面这种方式会根据类名获取logger,  logger的使用是有命名规则的,与java的包类似,例如 org.supersoft.erp.service.impl. LogTest的父级是 org.supersoft.erp
  最先找到是和类名匹配的名称的logger,如果找不到,就使用包含匹配名称的, LogTest.class的全名是 org.supersoft.erp.service.impl. LogTest,如果没有匹配的,就使用上级名称为org.supersoft.erp的logger

2.private static final Logger logger = LoggerFactory.getLogger("org.supersoft.erp");
    上面这种使用方法直接从log4j2.xml中找名称为 org.supersoft.erp为logger



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值