log4j2日志的使用(为什么使用日志+配置文件详解+使用步骤)

为什么使用日志:

项目在运行时,要通过日志文件才能知道你的服务器在做什么,了解项目的运行过程、数据的变化,当系统出现问题才能更快的定位问题,针对性优化;
所以我们在写程序日志的时候要知道:

  1. 在那些地方该加上日志?
  2. 如何规范的写日志? 不仅让自己看的懂,也要让别人(运维人员)看的懂。

日志框架:SLF4J,Logback,Log4j2,尽量使用异步日志,因为效率会比较高;
重点:
1、如何使用日志工具以及使用它的API,就成为了重点;
https://blog.youkuaiyun.com/pan_junbiao/article/details/104313938
https://blog.youkuaiyun.com/vbirdbest/article/details/71751835
2、知道在什么情况下使用什么日志类型要写入日志文件;
https://www.cnblogs.com/lilinwei340/p/9697287.html
https://blog.youkuaiyun.com/Farrell_zeng/article/details/99303649
3、使用日志分析问题出在哪里;

了解写日志的工具及其API

https://blog.youkuaiyun.com/pan_junbiao/article/details/104313938
https://blog.youkuaiyun.com/vbirdbest/article/details/71751835

JAVA日志及其最佳实践经验

https://www.cnblogs.com/lilinwei340/p/9697287.html
如何选择日志的格式,消息的格式,日志记录的内容,哪种消息对应于哪一种日志级别,则完全是基于经验。

日志的基本使用步骤:

在配置文件中定义日志的级别,比该级别小的信息就不输出;让后定义日志输出的目的地,然后再定义logger;

1、写日志的配置文件:配置文件节点解析

<?xml version="1.0" encoding="UTF-8"?>

<!-- 日志级别 trace<debug<info<warn<error<fatal -->
<!--根节点 <Configuration>
status:用来指定log4j本身的打印日志的级别。
monitorinterval:用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s。-->
<configuration status="info" monitorInterval="30">
    <Properties>
        <Property name="LOG_HOME">/tmp/logback</Property>
        <Property name="FILE_SIZE">200M</Property>
        <Property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger :%L - %msg%n</Property>
        <Property name="rolling_file_name">-%d{HH:mm:ss.SSS}.%i</Property>
        <Property name="rollover_strategy_max">30</Property>
    </Properties>

    <!--先定义所有的appender  输出源,用于定义日志输出的地方 -->
    <appenders>
        <!--将日志打印到控制台上-->
      	<!--name:指定Appender的名字。
						target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT。
					-->
        <console name="console" target="SYSTEM_OUT">
            <!--输出日志的格式不设置默认为:%m%n -->
            <PatternLayout>
                <Pattern>${log_pattern}</Pattern>
                <Charset>UTF-8</Charset>
            </PatternLayout>
        </console>
			 <!--<RollingRandomAccessFile>: 该输出源也是写入到文件
					不同的是比File更加强大,可以指定当文件达到一定大小(如20MB)时,另起一个文件继续写入日志,
					另起一个文件就涉及到新文件的名字命名规则,因此需要配置文件命名规则这种方式更加实用,
					因为你不可能一直往一个文件中写,如果一直写,文件过大,打开就会卡死,也不便于查找日志。 
				-->
     		<!-- name:指定Appender的名字。
           fileName:指定当前日志文件的位置和文件名称
           filePattern="${LOG_HOME}/%d{yyyy-MM-dd}/app{rolling_file_name}.log"
           immediateFlush="false" 
					 append="true"
				-->
        <RollingRandomAccessFile name="rollingFile"
                                 fileName="${LOG_HOME}/app.log"
                                 filePattern="${LOG_HOME}/%d{yyyy-MM-dd}/app{rolling_file_name}.log"
                                 immediateFlush="false" append="true">
           <!--用于指定输出文件的格式(如 日志输出的时间 文件 方法 行数 等格式) -->
            <PatternLayout>
                <Pattern>${log_pattern}</Pattern>
                <Charset>UTF-8</Charset>
            </PatternLayout>
          	<!--指定滚动日志的策略,就是什么时候进行新建日志文件输出日志 -->
            <Policies>
               <!--基于指定文件大小的滚动策略,
                size:属性用来定义每个日志文件的大小。
                -->
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}"/>
               	<!--基于时间的滚动策略
										interval:属性用来指定多久滚动一次,默认是1hour。
										modulate=true:用来调整时间:比如现在是早上3am,interval是4,
									那么第一次滚动是在4am,接着是8am,12am...而不是7am。 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
          
          	<!--
        DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,
							创建新的(通过max属性)。
						-->
            <DefaultRolloverStrategy max="${rollover_strategy_max}"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${LOG_HOME}">
                    <IfFileName glob="*/app*.log" />
                    <IfLastModified age="20d" />
                </Delete>	
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>
    </appenders>

    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
        <!--
        level:日志输出级别,共有8个级别,按照从低到高为:
          All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
        name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点。
        AppenderRef:Logger的子节点A,用来指定该日志输出到哪个appender,如果没有指定,
        就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,
        此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。-->
        <logger name="com.gillion.ds" level="DEBUG"/>
        
        <!--Root节点用来指定项目的根日志,如果没有单独指定Logger,
        那么就会默认使用该Root日志输出。-->
        <!--level:日志输出级别,共有8个级别,按照从低到高为:
        All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
        AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender。-->
        <root level="info">
            <appender-ref ref="console"/>
        </root>
    </loggers>
</configuration>

关于日志level。
共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
                                                                       
All:最低等级的,用于打开所有日志记录。
Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
Debug:指出细粒度信息事件对调试应用程序是非常有帮助的。
Info:消息在粗粒度级别上突出强调应用程序的运行过程。
Warn:输出警告及warn以下级别的日志。
Error:输出错误信息日志。
Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志。
OFF:最高等级的,用于关闭所有日志记录。
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

2、在类中加注解,然后使用log4j2

    private static Logger logger = 
        LoggerFactory.getLogger(RuleServiceImpl.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值