程序运行日志配制

目录

一 JavaSE logback

1.pom坐标

2.logback.xml配置

3.测试代码

4.运行结果

5.日志文件

二.sprngboot logback

1.pom依赖

2.创建logback-spring.xml配置文件放在resource目录下,内容:

3.测试

三. log4j

四.python自定义日志配制

1.配制代码

2. 调用方法之后可以直接在其他模块中引入logging直接使用

3. 查看运行效果


一 JavaSE logback

1.pom坐标

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
        </dependency>
    </dependencies>

2.logback.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="60 s">
    <!-- 定义日志的根目录 通过启动-Dlog=./log 设置路径 -->
    <!-- <property name="destination" value="${log}"/>-->
    <!-- 定义日志的根目录 通过启动自定义类LogHomeProperty继承PropertyDefinerBase重写getPropertyValue方法返回设置路径,注意 class 配制LogHomeProperty的类路径 -->
    <define name="destination" class="com.business.init.LogHomeProperty" />
    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <level>CONSOLE</level>
        <Prudent>true</Prudent>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,[at %C.%M\(%F:%L\)]用于查看底层执行代码记录 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [at %C.%M\(%F:%L\)] --> %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="OFF" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <level>OFF</level>
        <Prudent>true</Prudent>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤成功:onMatch,过滤失败:onMismatch || 保留:ACCEPT,丢弃:DENY,交给下一个过滤器:NEUTRAL -->
            <level>OFF</level><onMatch>DENY</onMatch><onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <level>INFO</level>
        <Prudent>true</Prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${destination}/info_%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory><!--保留时间30天-->
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level \(%F:%L\) --> %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level><onMatch>DENY</onMatch><onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>NEUTRAL</onMismatch>
        </filter>
    </appender>

    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <level>ERROR</level>
        <Prudent>true</Prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${destination}/error_%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level \(%F:%L\) --> %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level><onMatch>DENY</onMatch><onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level><onMatch>DENY</onMatch><onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level><onMatch>DENY</onMatch><onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>NEUTRAL</onMismatch>
        </filter>
    </appender>
    <root level="INFO">
        <appender-ref ref="OFF"/>
        <appender-ref ref="ERROR"/>
        <appender-ref ref="INFO"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

 重写类LogHomeProperty

package com.business.init;
import ch.qos.logback.core.PropertyDefinerBase;
public class LogHomeProperty extends PropertyDefinerBase {
    @Override
    public String getPropertyValue() {
        return "/你自己指定的路径";
    }
}

3.测试代码

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(LogTest.class);
        logger.error("error 错误信息,不会影响系统运行");
        logger.warn("warn 警告信息,可能会发生问题");
        logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
        logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
    }
}

4.运行结果

5.日志文件

二.sprngboot logback

1.pom依赖

        <dependency>
            <!--springboot启动依赖-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.7.RELEASE</version>
        </dependency>


        <dependency>
            <!--springboot 日志依赖-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            <version>1.5.7.RELEASE</version>
        </dependency>

2.创建logback-spring.xml配置文件放在resource目录下,内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false" scanPeriod="60 seconds" debug="false">
    <!-- 定义日志的根目录 通过启动-Dlog=./log 设置路径 -->
    <property name="LOG_HOME" value="${log}"/>
    <!-- 定义日志文件名称 -->
    <property name="appName" value="${app}"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level [at %C.%M\(%F:%L\)] - %msg %n</pattern>
        </encoder>
        <!--过滤器-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch><!--保留-->
            <onMismatch>NEUTRAL</onMismatch><!--往下传递-->
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch><!--终止传递-->
        </filter>
    </appender>
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/${appName}/info_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level [at %C.%M\(%F:%L\)] - %msg %n</pattern>
        </encoder>
        <!--过滤器-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/${appName}/debug_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level [at %C.%M\(%F:%L\)] - %msg %n</pattern>
        </encoder>
    </appender>
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/${appName}/warn_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level [at %C.%M\(%F:%L\)] - %msg %n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/${appName}/error_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level [at %C.%M\(%F:%L\)] - %msg %n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <root level="CONSOLE">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="INFO"/>
        <appender-ref ref="WARN"/>
        <appender-ref ref="DEBUG"/>
        <appender-ref ref="ERROR"/>
    </root>
</configuration>

3.测试

        Logger logger = LoggerFactory.getLogger(this.getClass());
        logger.error("error 错误信息,不会影响系统运行");
        logger.warn("warn 警告信息,可能会发生问题");
        logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
        logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");

三. log4j

 pom中不能用slf4j和logback  配制文件 log4j.properties

### #配置根Logger ###
log4j.rootLogger=debug,info,warn,error,stdout
### 输出到控制台 ### Threshol表示控制台输出日志级别 File标识存储路径
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Threshold = debug
log4j.appender.stdout.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n
### warn ###
log4j.appender.warn = org.apache.log4j.DailyRollingFileAppender
log4j.appender.warn.File=C:/Users/admin/IdeaProjects/metrics/log/warn
log4j.appender.warn.DatePattern = '.'yyyy-MM-dd
log4j.appender.warn.Append = true
log4j.appender.warn.Threshold = WARN
log4j.appender.warn.layout = org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%thread] %p [at %c.%M\(%F:%L\)] --> %m%n
### info ###
log4j.appender.info = org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.File=C:/Users/admin/IdeaProjects/metrics/log/info
log4j.appender.info.DatePattern = '.'yyyy-MM-dd
log4j.appender.info.Append = true
log4j.appender.info.Threshold = INFO
log4j.appender.info.layout = org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%thread] %p [at %c.%M\(%F:%L\)] --> %m%n
### error ###
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File=C:/Users/admin/IdeaProjects/metrics/log/error
log4j.appender.error.DatePattern = '.'yyyy-MM-dd
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR 
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%thread] %p [at %c.%M\(%F:%L\)] --> %m%n

四.python自定义日志配制

1.配制代码

import logging
import time
import re
from logging.handlers import TimedRotatingFileHandler


def init(debug):
    format = "%(levelname)s|%(asctime)-5s|%(thread)d| File \"%(pathname)s\", line %(lineno)d %(message)s"
    """
    初始化日志
    :param debug:  是否需要打印控制台日志
    :return: 
    """
    # 第一步,创建一个logger
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)  # Log等级总开关
    # 第二步,创建一个handler,用于写入日志文件
    rq = time.strftime('%Y-%m-%d', time.localtime(time.time()))
    log_name = "./logs/" + rq + '.log'
    formatter = logging.Formatter(format)
    log_file_handler = TimedRotatingFileHandler(filename=log_name, when="D", encoding="utf-8", interval=1,
                                                backupCount=31)
    log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"
    log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")
    log_file_handler.setFormatter(formatter)
    log = logging.getLogger()
    log.addHandler(log_file_handler)

    if debug:
        # 扩展,新增控制台日志
        console = logging.StreamHandler()
        formatter = logging.Formatter(format)
        console.setFormatter(formatter)
        logger.addHandler(console)

2. 调用方法之后可以直接在其他模块中引入logging直接使用

import logging
if __name__ == '__main__':
    init(True)# 初始化日志
    logging.info("这是新加的日志")

3. 查看运行效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钻风巡山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值