当前位置:首页 » 数据仓库 » log4j2数据库日志
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

log4j2数据库日志

发布时间: 2023-05-27 16:36:05

❶ Log4j2自动清理历史日志

在 log4j2 中,可以通过配置 RollingFileAppender 的清理策略来实现自动清理日志孙察,具则尘茄体可以参照官网中对RollingFileAppender配置文件的介绍: https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender 。

另外, log4j1 中的RollingFileAppender虽然无法实现自动清理日志兄裤的功能,但可以通过自己定义Appender来实现,可参照: log4j自动日志删除(转)

可以通过一个简单的样例来查看log4j2的自动清理日志功能,操作步骤如下:

❷ 【日志】Log4j2配置

在同步日志模式下, Logback的性能是最糟糕的,log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的。本章主要介绍Spring Boot如何集成并配置使用Log4j2

引入Log4j2依赖包,其它依赖和Logback一样,使用SLF4J统一输出

然后需要在resource下面添加log4j2.xml配置文件,当然了如果你不添加,springboo会提数销示你没有对应文件,并使用默认的配置文件,这个时候级别可以在application.properties中配置

和logback配置类似,主要是含有loggers、appenders,其中loggers由logger,root组成。appenders由console(控制台),File、RollingFile(输出文件)组成,作用和配置和logback差不多

(1)Console
用来定义输出到控制台的Appender,主要设置输出格式和level级别

ThresholdFilter: 定义打印级别,onMismatch值设置是否拒绝其它
(2)File
用来定义输出到指定位置的文件的Appender

(3)RollingFile
用来定义超过指定条件自动删除旧的,创建新的Appender

参数说明:

Root节点用来指定项目的根日志薯冲游,如果没有单独指定Logger,那么就会默认使用该Root日志输出

参数说明:

变量配置,类似常量定义

默认判指情况下springboot是不将日志输出到日志文件中,这里对日志框架的支持有两种配置方式(和logback一样):
(1)application.properties 或 application.yml (系统层面)
(2)logback-spring.xml (自定义文件方式)

默认名log4j2-spring.xml,可以省下在application.yml中配置,如果自定义了文件名,需要在application.yml中配置

此种方式可以处理比较复杂的情况,比如区分 info 和 error 日志、每天产生一个日志文件。

通过在DefaultRolloverStrategy 标签下添加Delete标签实现,保留7天的日志

IfLastModified .age要和filePattern精确的时间一致, 否则貌似无效.

❸ SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印

日志打印是了解Web项目运行的最直接方式,所以在项目开发中是需要首先搭建好的环境。

1、Log4j2特点

1)核心特点

相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高;并发的特性,减少了死锁的发生。

2)性能测试

2、日志打印之外观模式

每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,增加应用程序代码和日志框架的耦合性。

《阿里巴巴Java开发手册》,其中有一条规范做了‘强制’要求:

SLF4J日志API

Java简易日志门面(Simple Logging Facade for Java,缩写SLF4J),是一套包装Logging 框架的界面程式,使用外观模式实现。

1、项目结构

2、不同环境的日志配置

使用最直接的方式,不同环境加载不同的日志配置。

1)开发环境配置

2)生产环境配置

3、Log4j2的配置文件

1、简单的测试程序

2、测试效果图

四、源代码地址

❹ log4j2怎样配置才能在控制台打印mybatis的sql日志

您好:我的log4j.properties在src目正带正录下如下: ### logger 的配置 ### #配置行郑根 logger 定义根 logger 配置项。其语法为:级别,输入终端1,输出终端举悔2 log4j.rootLogger=INFO,stdout ### direct log messages to stdout

❺ Log4j2简介和异步日志梳理

log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:

之前看官方文档摘抄了一些概念,这里懒得翻译了,使用log4j的都应该清楚,这里只是mark下。

log4j2最大的特点就是异步日志,其性能的提升主要也是从异步日志中受益,我们来看看如何使用log4j2的异步日志。

Log4j2提供了两种实现日志的方式,一个是通过AsyncAppender,一个是通过AsyncLogger,分别对应前面我们说的Appender组件和Logger组件。注意这是两种不同的实现方式,在设计和源码上都是不同的体现。

AsyncAppender是通过引用别的Appender来实现的,当有日志事件到达时,会开启另外一个线程来处理它们。需要注意的是,如果在Appender的时候出现异常,对应用来说是无法感知的。 AsyncAppender应该在它引用的Appender之后配置,默认使用 java.util.concurrent.ArrayBlockingQueue实现而不需要其它外部的类库。 当使用此Appender的时候,在多线程的环樱慎境下需要注意,阻塞队列容易受到锁争用的影响,这可能会对性能产生影响。这时候,我们应该答拆考虑使用无所的异步记录器(AsyncLogger)。

AsyncAppender有一些配置项,如下:

除此之外还有一些其他的细节,如果感兴趣可以参考官网文档,这里就不一一列举了。

AsyncLogger才是log4j2 的重头戏,也是官方推荐的异步方式。它可以使得调用Logger.log返回的更快。你可以有两种选择:全局异步和混合异步。

全局异步

配置文件不用动:

在系统初始化的时候,增加全局参数配置:

你可以在你第一次获取Logger之前设置,也可以加载JVM启动参数里,类似

混合异步

混合异步只需要修改配置文件即可:

在上面示例的配置中,root logger就是同步的,但是com.foo.Bar的logger就是异清颂枣步的。

在使用异步日志的时候需要注意一些事项,如下:

4、如果不是确实需要,不要打印location信息,比如HTML的location,或者pattern模式里的%C or $class, %F or %file, %l or %location, %L or %line, %M or %method, 等,因为Log4j需要在打印日志的时候做一次栈的快照才能获取这些信息,这对于性能来说是个极大的损耗。

关于性能测试,大家可以直奔官网,哪里有很详细的数据,这里给个图:

虽然我测下来,在immediateFlush设置为false的情况下,同步异步差不了多少,但可能是我的测试条件不符合官方的,从设计和原理上来说,异步日志,无疑是个最优的选择。

总的来说,看了一遍log4j的官网文档,对日志系统有了个比较全面的了解,以前只是配置来改改,没关注过很多细节,这次算是扫盲了一次。文章也只是做了个介绍,在实际使用中,还是要细细研究下配置。

另外,个人觉得异步模式无非就是在原来同步写盘的前提下,增加消息队列作为缓存,或者交个另一个线程去做,这理论上除了带来一些额外的,较小的cpu和内存的开销,应该会在高流量的时候带来不小的性能提升,对比下来,log4j2无疑是当下最值得使用的日志组件来,且可以使用其异步模式。

当然了,也不能说异步就一定好,如果日志的流量不是特别大,磁盘性能又跟得上,没有必要一定使用异步日志。

如何配置log4j2日志记录至数据库

配置迹桥亩log4j2日志记录至数据库


1、建立用于保存日志的数姿森据库表:

CREATETABLE`sys_log`(
消没`id`int(11)NOTNULLAUTO_INCREMENT,
`level`varchar(32)NOTNULL,
`logger`varchar(100)NOTNULL,
`message`varchar(1000)DEFAULTNULL,
`exception`varchar(10000)DEFAULTNULL,
`date_add`datetimeNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=19DEFAULTCHARSET=utf8mb4;

2、配置 databaseAppender :

<JDBCname="databaseAppender"tableName="sys_log">
<ConnectionFactoryclass="cc.s2m.web.s2mBlog.util.StaticProp"method="getDatabaseConnection"/>
<Columnname="date_add"isEventTimestamp="true"/>
<Columnname="level"pattern="%level"/>
<Columnname="logger"pattern="%logger"/>
<Columnname="message"pattern="%message"/>
<Columnname="exception"pattern="%ex{full}"/>
</JDBC>

3、其中 cc.s2m.web.s2mBlog.util.StaticProp类的getDatabaseConnection方法为获取可用的datasource:

DriverManagerDataSourceds=newDriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8");
ds.setUsername("root");
ds.setPassword("123456");
returnds.getConnection();


4、指派需要记录的日志,使用 databaseAppender即可:

<loggername="SYSLOG"level="INFO"additivity="false">
<appender-refref="databaseAppender"/>
</logger>

❼ log4j2 异步日志原理及配置

log4j2通过讲打日志流程中的部分阶段进行异步化,使得日好简志打印性能得到了很大的提升。
要想了解log4j如果实现异步日志,进而提升性能,就需要先了解日志打印的基本过程。

在log4j中,有两个重要的概念,分别是 Logger 、 Appender 。Logger是负责具体的生产日志数据,我们平时的Logger.info(...)就是生产日志数据的过程。Appender则是负责讲数据搬运到目的地,如console、文件、hive、网络设备等等。

而log42实现异步日志,主要包括以下两种方式:

异步Logger通过使用LMAX Disruptor环形队列和单独的处理线程,避免了锁的竞争,从而实现更高的吞吐量。队列大小默认4096,通过以下参数,可以开启异步日志。

异步Appender则是使用了java中的ArrayBlockingQueue,默认队列大小1024。log4j2官方测试,asyncLogger相比asyncAppender有更好的友旦裤表现。

是否可以同时使用AsyncLogger + AsyncAppender?同时使用是否有更好表现?
据stackoverflow上回答,AsyncLogger是更新的异步机制,有更好的表现。AsyncAppender是之前的异步机制。同时使用也不会迟扒增加性能表现。见
https://stackoverflow.com/questions/24177601/difference-between-asynclogger-and-asyncappender-in-log4j2

https://logging.apache.org/log4j/2.x/manual/async.html
https://www.cnblogs.com/yeyang/p/7944906.html
https://bryantchang.github.io/2019/01/15/log4j2-asyncLogger/

❽ 如何配置log4j2日志记录至数据库

配置log4j2日志记录至数据库


1、建立用于保存日志的数据库表:

CREATETABLE`sys_log`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`level`varchar(32)NOTNULL,
`logger`varchar(100)NOTNULL,
`message`varchar(1000)DEFAULTNULL,
`exception`varchar(10000)DEFAULTNULL,
`date_add`datetimeNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=19DEFAULTCHARSET=utf8mb4;

2、配置 databaseAppender :

<JDBCname="databaseAppender"tableName="sys_log">
<ConnectionFactoryclass="cc.s2m.web.s2mBlog.util.StaticProp"method="getDatabaseConnection"/>
<Columnname="date_add"isEventTimestamp="true"/>
<Columnname="level"pattern="%level"/>
<Columnname="logger"pattern="%logger"/>
<Columnname="message"pattern="%message"/>
<Columnname="exception"pattern="%ex{full}"/>
</JDBC>

3、其中 cc.s2m.web.s2mBlog.util.StaticProp类的getDatabaseConnection方法为获取可用的datasource:

DriverManagerDataSourceds=newDriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8");
ds.setUsername("root");
ds.setPassword("123456");
returnds.getConnection();


4、指派需要记录的日志,使用 databaseAppender即可:

<loggername="SYSLOG"level="INFO"additivity="false">
<appender-refref="databaseAppender"/>
</logger>