logback日志

tomcat日志清除:

linux 离线安装gcc,g++  https://blog.csdn.net/zrj000za/article/details/79029959

在linux中安装插件之前需要保证已经存在gcc,g++,cmake

在离线安装过程中遇到一些问题

离线安装参考博客1

离线安装参考博客2

离线安装参考博客3

使用cronolog插件可以将tomcat中产生的大文件进行分割

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;

 

posted @ 2018-08-30 13:30  弱水三千12138  阅读(585)  评论(0)    收藏  举报