首页 > 其他分享 >Log4j 配置

Log4j 配置

时间:2023-03-11 20:56:01浏览次数:42  
标签:输出 log 配置 Log4j demo2 log4j 日志 appender

1. Log4j 1.2.17 properties配置

1.1 准备工作

  • 创建maven工程
  • 引入log4j的jar包
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

1.2 配置文件(properties和xml二选一)

log4j.properties
# log4j 配置
## 输出log到控制台
log4j.rootLogger=fatal,console
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 = %d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n

## 输出日志到文件1
log4j.logger.demo1=warn,demo1
log4j.appender.demo1 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.demo1.Append = true
log4j.appender.demo1.file = ./logs/demo1.log
log4j.appender.demo1.DatePattern = .yyyyMMdd
log4j.appender.demo1.Threshold = trace
log4j.appender.demo1.layout = org.apache.log4j.PatternLayout
log4j.appender.demo1.layout.conversionPattern = %d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n

## 输出日志到文件2
log4j.logger.demo2=fatal,demo2
log4j.appender.demo2 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.demo2.Append = true
log4j.appender.demo2.file = ./logs/demo2.log
log4j.appender.demo2.DatePattern = .yyyyMMdd
log4j.appender.demo2.Threshold = trace
log4j.appender.demo2.layout = org.apache.log4j.PatternLayout
log4j.appender.demo2.layout.conversionPattern = %d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n
log4j.xml
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN"
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration
    xmlns:log4j="http://jakarta.apache.org/log4j/">

    <!-- 将日志信息输出到控制台 -->
    <appender name="console_appender" class="org.apache.log4j.ConsoleAppender" >
        <param name="Target" value="System.out" />
        <!-- 设置日志输出的样式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 设置日志输出的格式 -->
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n" />
        </layout>
        <!--过滤器设置输出的级别-->
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!-- 设置日志输出的最小级别 -->
            <param name="levelMin" value="WARN" />
            <!-- 设置日志输出的最大级别 -->
            <param name="levelMax" value="ERROR" />
            <!-- 设置日志输出的xxx,默认是false -->
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>
    <!--输出方式:每天一个日志文件 -->
    <appender name="demo3_file" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="./logs/demo3.log" />
        <param name="Append" value="true" />
        <param name="DatePattern" value=".yyyyMMdd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n" />
        </layout>
    </appender>

    <logger name="demo3" additivity="false">
        <level class="org.apache.log4j.Level" value="fatal" />
        <appender-ref ref="demo3_file" />
    </logger>
    <!-- 没有配置logger时,root配置生效 -->
    <root>
        <appender-ref ref="console_appender" />
    </root>
</log4j:configuration>

1.3 测试

    public static void main(String[] args) {
        Logger log = Logger.getLogger("demo3");
        log.fatal(" 严重错误,一般造成系统崩溃并终止运行");
        log.error(" 错误信息,不会影响系统运行");
        log.warn(" 警告信息,可能会发生问题");
        log.info(" 运行信息,数据连接,网络连接,IO操作等");
        log.debug(" 调试信息,一般在开发中使用,记录程序变量传递信息等等");
        log.trace(" 追踪信息,记录程序所有的流程信息");
    }

1.4 关于日志输出格式

%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为IS08601,也可以在其后指定格式,
比如: %dyyy MMM dd HH:mm:ss,SSS},输出类似2002年10月18日 22: 10: 28,921
%r: 输出自应用启动到输出该1og信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C,%M(%;%)的组合,包括类目名、发生的线程,以及在代码中的行数。
举例:Test1og4.main(TestLog4.Java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java servlets这样的多客户多线程的应用中,
输出一个”%”字符%%:
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,windows平台为”r n”,unix平台为”n”输出日志信息换行

2. log4j2 配置

2.1 准备工作

  • 创建maven工程
  • 引入依赖
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.20.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.20.0</version>
        </dependency>

2.2 配置文件

log4j2的配置文件不再支持properties,但同时支持log4j2.xml,log4j.json,log4j.jsn等名称的配置文件.这里只展示xml配置方法

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info" >
    <Properties>
        <Property name="logDir">./logs</Property>
    </Properties>
    <!-- 定义appenders -->
    <appenders>
        <!-- 控制台日志输出 -->
        <Console name="console" target="SYSTEM_OUT" >
            <!-- 定义控制台输出级别 默认输出info以上的信息 -->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{HH:mm:ss:SSS} %l %-5level %m%n" />
        </Console>
        <!-- 日志文件输出 -->
        <File name="demo4_filePattern" fileName="${logDir}/demo4.log" append="true">
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %-5level %m%n" />
        </File>
        <File name="demo5_filePattern" fileName="${logDir}/demo5.log" append="true">
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %-5level %m%n" />
        </File>
        <rollingFile name="demo4_rollingFile" filePattern="${logDir}/demo4-$${date:yyyy-MM-dd}-%i.log" >
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %-5level %m%n" />
            <policies>
                <CronTriggeringPolicy schedule="0 40 23 * * ?" />
                <SizeBasedTriggeringPolicy size="200MB" />
            </policies>
            <!-- 每天日志最多切分成10个 -->
            <DirectWriteRolloverStrategy maxFiles="10">
                <Delete basePath="${logDir}" maxDepth="2">
                    <!-- 此处注意,如果没有*/不会生效 -->
                    <IfFileName glob="*/.*.log" />
                    <!-- 超过30天的日志自动删除,滚动的时候触发 -->
                    <IfLastModified age="P365D" />
                </Delete>
            </DirectWriteRolloverStrategy>
        </rollingFile>
        <rollingFile name="demo5_rollingFile" filePattern="${logDir}/demo5-$${date:yyyy-MM-dd}-%i.log" >
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %-5level %m%n" />
                        <policies>
                <CronTriggeringPolicy schedule="0 40 23 * * ?" />
                <SizeBasedTriggeringPolicy size="200MB" />
            </policies>
            <!-- 每天日志最多切分成10个 -->
            <DirectWriteRolloverStrategy maxFiles="10">
                <Delete basePath="${logDir}" maxDepth="2">
                    <!-- 此处注意,如果没有*/不会生效 -->
                    <IfFileName glob="*/.*.log" />
                    <!-- 超过30天的日志自动删除,滚动的时候触发 -->
                    <IfLastModified age="P365D" />
                </Delete>
            </DirectWriteRolloverStrategy>
        </rollingFile>
    </appenders>
    <loggers>
        <root level = "trace" >
            <appender-ref ref="console" />
            <appender-ref ref="rollingFile" />
        </root>
        <logger name="demo4">
            <appender-ref ref="demo4_filePattern" />
            <appender-ref ref="demo4_rollingFile" />
        </logger>
        <logger name="demo5">
            <appender-ref ref="demo5_filePattern" />
            <appender-ref ref="demo5_rollingFile" />
        </logger>
    </loggers>
</configuration>

1.3 关于日志输出格式

%c 输出logger名称
%C 输出类名
%d{HH:mm:ss.sss} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符.如果不足在右边补0
%logger 输出logger名称因为Root Logger没有名称,所以没有输出%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M或%method 输出所在方法名
%l 输出完整的错误位置,包括类名、方法名、文件名、行数
%p 该条日志的优先级
%replace{patternHregexHsubstitution} 将pattern的输出结果pattern按照正则表达式regex替换成substitution

标签:输出,log,配置,Log4j,demo2,log4j,日志,appender
From: https://www.cnblogs.com/W82838/p/17206022.html

相关文章

  • 超简单CentOS7配置yum源
    1.打开centos的yum文件夹cd/etc/yum.repos.d/2.安装wgetyum-yinstallwget3.用wget下载repo文件,选择下面其中一个即可wgethttp://mirrors.aliyun.com/repo/C......
  • 为application.yml创建自定义配置并进行自动提示
    第一步:导入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></dependency>......
  • YMAL配置文件
    初识YAMLYAML是"YAMLAin'taMarkupLanguage"(YAML不是一种标记语言)的递归缩写。在最初开发这种语言时,YAML其实是:"YetAnotherMarkupLanguage"(仍是一种标记语言)。Y......
  • 12、应用配置--特殊卷ConfigMap和Secret
    应用配置特殊卷(ConfigMap和Secret)ConfigMapSecret都是用来实现去为我们的容器化运行的应用提供配置接口配置接口:基于docker运行应用,对于日常工作来说,有些不便如:基于nginx的i......
  • 3 JDK安装及环境变量配置
    一.JDK安装1.Oracle中文官网https://www.oracle.com/cn/2.下载安装JDK8(JDK中已经包含了JRE,不用再安装JRE)二.环境变量配置1.此电脑右键➜属性➜高级系统......
  • 2 JDK安装及环境变量配置
    JDK安装及环境变量配置一.JDK安装1.Oracle中文官网https://www.oracle.com/cn/2.下载安装JDK8(JDK中已经包含了JRE,不用再安装JRE)二.环境变量配置1.此电脑右......
  • mysql主从数据不同步,重新配置主从同步
    主从数据不一致,重新配置主从同步也是一种解决方法。1.从库停止主从复制stopslave;2.对主库数据库加锁flushtableswithreadlock;3.备份主库数据mysqldump......
  • Nginx基础 - 03基本配置
     一、Nginx配置文件结构Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件。整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始于......
  • 解析JAVA环境变量及配置
    写在前面:参考CSDN博主-StandByMeQuan文章:https://blog.csdn.net/qq_37872792/article/details/80642985其实博主已经写得很好了,但是我怕到时后该博文被删了,无法......
  • conda常用命令及配置总结
     一、常用命令 初始化condainit创建环境condacreate-n环境名python=3.x列出所有虚拟环境condaenvlist进入环境condaactivateenv_name退出环......