logback日志
tomcat日志清除:
linux 离线安装gcc,g++ https://blog.csdn.net/zrj000za/article/details/79029959
在linux中安装插件之前需要保证已经存在gcc,g++,cmake
在离线安装过程中遇到一些问题
使用cronolog插件可以将tomcat中产生的大文件进行分割
log4j日志框架学习:
https://blog.csdn.net/u011781521/article/details/55002553
https://www.cnblogs.com/godtrue/category/954360.html
log4j.xml的配置
其中 可以定义各个appender 然后配置logger来使用appender 最后有个root 若是没找到配置的logger,就使用root中的logger
logback日志插件:
参考文章
https://www.cnblogs.com/warking/p/5710303.html
https://www.cnblogs.com/light-zhang/p/8744647.html
https://blog.csdn.net/tianyaleixiaowu/article/details/73327752
logback.xml 配置详解:https://blog.csdn.net/haidage/article/details/6794540
logback日志级别:TRACE < DEBUG < INFO < WARN < ERROR
1. maven工程添加logback
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
2. 配置logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="PROJECT" value="test123"></property> <property name="LOG_PATH" value="D:/home/cloud/logs/${PROJECT}"></property> <property name="FILESIZE" value="1024KB"></property> <ptoperty name="MAXHISTORY" value="7"></ptoperty> <!-- 控制台打印 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="utf-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] %c {%F:%L} - %m%n</pattern> </encoder> <!-- 此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> </appender> <!-- 记录错误级别日志 --> <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/portal_error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志归档路径 --> <fileNamePattern>${LOG_PATH}/portal_error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 日志保留天数 --> <maxHistory>${MAXHISTORY}</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${FILESIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 日志以追加方式添加 --> <append>true</append> <encoder> <!-- 日志输出格式 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] %c {%F:%L} - %m%n</pattern> </encoder> <!-- 此日志只记录error级别 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/portal_info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志归档路径 --> <fileNamePattern>${LOG_PATH}/portal_info.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 日志保留天数 --> <maxHistory>${MAXHISTORY}</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${FILESIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 日志以追加方式添加 --> <append>true</append> <encoder> <!-- 日志输出格式 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] %c {%F:%L} - %m%n</pattern> </encoder> <!-- 此日志只记录error级别 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> </appender> <!-- level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,不能设置为INHERITED或者同义词NULL。 默认是DEBUG --> <root level="DEBUG"> <appender-ref ref="FILE_ERROR" /> <!-- <appender-ref ref="FILE_INFO" /> --> <!-- 生产环境将请stdout去掉 --> <appender-ref ref="STDOUT" /> </root> </configuration>
MDC 方便于记录多线线程的日志
配置logback日志
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 项目名称 --> <property name="PROJECT" value="xxxx"></property> <!-- 存储位置 --> <property name="LOG_PATH" value="D:/home/cloud/logs/${PROJECT}"></property> <!-- 单个日志文件大小 --> <property name="FILESIZE" value="30KB"></property> <!-- 日志保留天数 --> <property name="MAXHISTORY" value="1"></property> <!-- 日志级别 --> <property name="LOG_LEVEL" value="INFO"></property> <!-- 控制台打印 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="utf-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] %c {%F:%L} - %m%n</pattern> </encoder> <!-- 此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> </appender> <!-- 记录日志到文件 --> <appender name="FILE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/${PROJECT}_new.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志归档路径 --> <fileNamePattern>${LOG_PATH}/${PROJECT}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 日志保留天数 --> <maxHistory>${MAXHISTORY}</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${FILESIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 日志以追加方式添加 --> <append>true</append> <encoder> <!-- 日志输出格式 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] %c {%F:%L} - %m%n</pattern> </encoder> <!-- 此日志只记录level级别以上的 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>${LOG_LEVEL}</level> </filter> </appender> <!-- level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,不能设置为INHERITED或者同义词NULL。 默认是DEBUG --> <root level="DEBUG"> <appender-ref ref="FILE_LOG" /> <!-- 生产环境将请stdout去掉 --> <appender-ref ref="STDOUT" /> </root> </configuration>
将日志信息写入到mysql数据库中
https://www.cnblogs.com/chihirotan/p/6185547.html
logback.xml可以从propertiies文件中去读取配置
参考:https://blog.csdn.net/u010180738/article/details/52810992
这样有利于配置文件的统一配置。
logback 按时间归档,按时间和文件大小归档,按大小归档
文件大小归档
<!-- 文件输出 --> <appender name="FILECOUT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/${log.name}</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${log.path}/${log.name}.%i</fileNamePattern> <!-- 索引最小值,标识%i从1开始 --> <minIndex>1</minIndex> <!-- 索引最大值,标识%i到5结束,始终保留了5个归档文件 --> <maxIndex>5</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <!-- 文件大小超过1MB归档 --> <maxFileSize>1MB</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{80} [%file:%line] %msg %n</pattern> </encoder> </appender>
文件大小和时间
<!-- 文件输出 --> <appender name="FILECOUT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 日志路径与日志名称从logback.properties文件中取 --> <file>${log.path}/${log.name}</file> <!-- 按时间和文件大小归档 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 归档文件名格式 --> <fileNamePattern>${log.path}/${log.name}.%d{yyyy-MM-dd.HHmmss}.%i</fileNamePattern> <!-- 保留10个归档文件 --> <maxHistory>10</maxHistory> <maxFileSize>1MB</maxFileSize> </rollingPolicy> <encoder> <!-- 日志格式化输出 --> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{80} [%file:%line] %msg %n</pattern> </encoder> </appender>
按时间
<?xml version="1.0" encoding="UTF-8" ?> <!-- logback的根节点 <configuration>的属性scan、scanPeriod、debug scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> <configuration scan="true" scanPeriod="5 seconds" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://logback.qos.ch/logback.xsd"> <!-- 每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。 --> <contextName>testLog</contextName> <!-- 属性从属性文件中加载 --> <property resource="logback.properties" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 日志格式化:%d后面跟时间,默认为yyyy-MM-dd;%thread线程名称;%-5level日志级别,显示5个字符;%logger{36}一般是全类名;%msg日志信息;%file文件名;%line行号;%n换行 --> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{80} [%file:%line] %msg %n</pattern> </encoder> </appender> <!-- 文件输出 --> <appender name="FILECOUT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 日志路径与日志名称从logback.properties文件中取 --> <file>${log.path}/${log.name}</file> <!-- 按时间滚动,每秒归档一次 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 归档文件名格式 --> <fileNamePattern>${log.path}/${log.name}.%d{yyyy-MM-dd.HHmmss}</fileNamePattern> <!-- 保留10个归档文件 --> <maxHistory>10</maxHistory> </rollingPolicy> <encoder> <!-- 日志格式化输出 --> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{80} [%file:%line] %msg %n</pattern> </encoder> </appender> <!--name:包名或者类名;level:日志级别(logger级别会覆盖root的级别);additivity:是否向上传递 --> <!-- TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL --> <logger name="com.bear" level="INFO" additivity="false"> <appender-ref ref="FILECOUT" /> <appender-ref ref="STDOUT" /> </logger> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
参考:http://blog.51cto.com/limeixiong/2051085
logback设置输出缓冲区
logback异步记录日志,https://blog.csdn.net/zhuyucheng123/article/details/21524549
可以异步记录日志,不会阻塞主线程。
基于邮件的日志输出SMTPAppender
https://blog.csdn.net/tianyaleixiaowu/article/details/73327752
logback过滤器:
LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。
ThresholdFilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件。需要额外的两个JAR包,commons-compiler.jar和janino.jar
https://aub.iteye.com/blog/1110008
logback 之encoder和layout
https://blog.csdn.net/cw_hello1/article/details/51969554
将logback日志输出到数据库
https://www.cnblogs.com/chihirotan/p/6185547.html
设置appender:
<!-- 日志输出到数据库 -->
<appender name="DB-CLASSIC-MYSQL-POOL" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="org.apache.commons.dbcp.BasicDataSource">
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<url>jdbc:mysql://10.3.13.253:3306/logcollection?characterEncoding=UTF-8</url>
<username>root</username>
<password>111111</password>
</dataSource>
</connectionSource>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${LOG_LEVEL}</level>
</filter>
</appender>
在数据库中建立三张表:
具体在https://logback.qos.ch/download.html 网站的 logback-1.3.0-alpha4\logback-classic\src\main\resources\ch\qos\logback\classic\db\script目录下
BEGIN;
CREATE TABLE logging_event
(
timestmp BIGINT NOT NULL, # 时间戳
formatted_message TEXT NOT NULL, # 日志信息
logger_name VARCHAR(254) NOT NULL, #
level_string VARCHAR(254) NOT NULL, # 日志级别
thread_name VARCHAR(254), # 线程名
reference_flag SMALLINT, #
arg0 VARCHAR(254),
arg1 VARCHAR(254),
arg2 VARCHAR(254),
arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL, # 写日志的文件名
caller_class VARCHAR(254) NOT NULL, # 写日志的类
caller_method VARCHAR(254) NOT NULL, # 写日志的方法
caller_line CHAR(4) NOT NULL, # 写日志第几行
event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY #发生事件id
);
CREATE TABLE `logging_event_property` (
`event_id` bigint(20) NOT NULL, #事件id
`mapped_key` varchar(254) NOT NULL, #HOSTNAME
`mapped_value` text, #主机名称
PRIMARY KEY (`event_id`,`mapped_key`),
CONSTRAINT `logging_event_property_ibfk_1` FOREIGN KEY (`event_id`) REFERENCES `logging_event` (`event_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 记录异常信息(依据调用栈各个调用处的信息)
CREATE TABLE `logging_event_exception` (
`event_id` bigint(20) NOT NULL,
`i` smallint(6) NOT NULL,
`trace_line` varchar(254) NOT NULL,
PRIMARY KEY (`event_id`,`i`),
CONSTRAINT `logging_event_exception_ibfk_1` FOREIGN KEY (`event_id`) REFERENCES `logging_event` (`event_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

浙公网安备 33010602011771号