精华内容
下载资源
问答
  • 日志输入出级别
    千次阅读
    2021-07-13 14:08:15

    这几天第一次用 Hive 3,新版本好不好不知道,但是 hive 命令行刷出来的日志真的把我烦到了,网络上调整 log4j 日志等级的几乎都不管用,而且多为下面这一条:

    # 调整 hive 日志等级为 WARN,新版 Hive 不管用
    
    hive --hiveconf hive.root.logger=WARN,console

    但实际用了发现无效,自己对 log4j 也没有足够的了解。于是,换了个思路,参考了 Hadoop 的日志配置文件,发现 Hive 的日志文件命名只要和 Hadoop 一样的就行。

    执行以下命令,会在 Hive 安装目录的 conf 目录下创建出 log4j.properties 日志配置文件,以WARN 级别为例:

    cd $HIVE_HOME/conf
    
    cat > log4j.properties <<EOL
    log4j.rootLogger=WARN, CA
    
    log4j.appender.CA=org.apache.log4j.ConsoleAppender
    
    log4j.appender.CA.layout=org.apache.log4j.PatternLayout
    log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
    EOL

    再次启动 Hive 就可以发现 INFO 级别的日志没了。但是以上情况,可能只是针对 class path 内有多个 log4j jar 包的情况,其他情况可能不适用。

    更多相关内容
  • 因此我们会需要不同package使用不同的日志级别,以及不同业务的日志输出到不同的文件。下面本文简要概述如何使用logback将不同包的不同级别日志输出到info1.txt中。 本文的代码在这里,欢迎加星,fork。 1, ...

    日志是程序中必不可少的内容。依据日志我们可以有效诊断程序bug,统计用户访问和各主要功能的使用频率时间段等信息。因此我们会需要不同package使用不同的日志级别,以及不同业务的日志输出到不同的文件。下面本文简要概述如何使用logback将不同包的不同级别日志输出到info1.txt中。

    本文的代码在这里,欢迎加星,fork。
    1, springboot配置日志logback日志的方式
    官方文档在https://docs.spring.io/spring-boot/docs/1.5.12.RELEASE/reference/html/boot-features-logging.html#boot-features-logging-format

    我们一般只需要在application.properties中设置类似如下的配置即可。

    logging.config=classpath:logback-spring2.xml
    

    2,程序的基本结构
    程序是标准的springboot程序,基于springboot 1.5.12, 使用swagger访问rest。包含service包和controller包。

    在这里插入图片描述

    3,logback.xml配置
    简要介绍,logback配置文件中有3个appender, 分别为, a,控制台(级别为debug)输出到console中,b,FILE(没有定义级别)输出到logs/info1.log中,自动归档每天的日志,修改为2018-11-10.txt这样保存起来。只保留最近7天的日志。c,ERROR_FILE与FILE类似,只记录error级别的日志。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    
        <!-- 控制台输出 -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level> <!-- 日志过滤级别 -->
            </filter>
            <encoder>
                <pattern>%date %-5level [${HOSTNAME} %thread] %caller{1}%msg%n</pattern><!-- 格式化输出 -->
                <charset>utf8</charset> <!-- 输出编码 -->
            </encoder>
        </appender>
    
        <!-- 文件输出 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>%date %-5level [${HOSTNAME} %thread] %caller{1}%msg%n</pattern><!-- 格式化输出 -->
                <charset>utf8</charset> <!-- 输出编码 -->
            </encoder>
            <file>./logs/info1.log</file><!-- 文件存放路径 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>/logs/info/%d{yyyy-MM-dd}.log</fileNamePattern><!-- 每天归档 -->
                <maxHistory>7</maxHistory><!-- 日志存放周期(天) -->
            </rollingPolicy>
        </appender>
        <!-- 错误日志文件输出 -->
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level> <!-- 日志过滤级别 -->
            </filter>
            <encoder>
                <pattern>%date %-5level [${HOSTNAME} %thread] %caller{1}%msg%n</pattern><!-- 格式化输出 -->
                <charset>utf8</charset> <!-- 输出编码 -->
            </encoder>
            <file>./logs/error1.log</file><!-- 文件存放路径 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>/logs/error/%d{yyyy-MM-dd}.log</fileNamePattern><!-- 每天归档 -->
                <maxHistory>7</maxHistory><!-- 日志存放周期(天) -->
            </rollingPolicy>
        </appender>
    
    
    
        <!-- 基础日志输出级别 -->
        <root level="DEBUG">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    
    
        <logger name="com.yq.controller" level="trace" additivity="false">
            <appender-ref ref="FILE" />
        </logger>
    
        <logger name="com.yq.service" level="info" additivity="false">
            <appender-ref ref="FILE" />
        </logger>
    
        <logger name="org.springframework.beans" level="debug" additivity="false">
            <appender-ref ref="FILE" />
        </logger>
    
    
    </configuration>
    
    

    xml文件解释

    com.yq.controller包trace级别及其以上的日志,com.yq.service包info级别及其以上的日志,org.springframework.beans包debug级别及其以上的日志会记录在FILE中,也就是记录到info1.txt中

    启动程序后访问http://127.0.0.1:9090/swagger-ui.html#/user-controller/getUserUsingGET, 点击getUser方法。
    然后查看控制台日志,程序所在目录下的logs目录中的info1.txt和error1.txt。

    结果,按照如上配置,
    info1.txt记录了很多springboot的日志包括debug级别的日志,
    com.yq.controller包下面的所有trace级别以上信息
    com.yq.service包下面的所有info级别以上的信息
    org.springframework.beans包下面的所有debug级别以上的信息
    error1.txt只记录com.yq.LogbackApplication的错误日志,没有com.yq.controller和com.yq.controller的错误
    console中controller包和servcie包都没有记录, 只有springboot的com.yq.LogbackApplication的日志

    info1.txt内容为
    Returning cached instance of singleton bean ‘mvcViewResolver’
    2018-11-10 15:23:26,769 DEBUG [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:251)
    Returning cached instance of singleton bean ‘defaultViewResolver’
    2018-11-10 15:23:26,769 DEBUG [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:251)
    Returning cached instance of singleton bean ‘viewResolver’
    2018-11-10 15:23:26,769 DEBUG [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:251)
    Returning cached instance of singleton bean ‘thymeleafViewResolver’
    2018-11-10 15:23:26,770 DEBUG [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:449)
    Creating instance of bean ‘org.springframework.web.servlet.support.SessionFlashMapManager’
    2018-11-10 15:23:26,776 DEBUG [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:485)
    Finished creating instance of bean ‘org.springframework.web.servlet.support.SessionFlashMapManager’
    2018-11-10 15:23:26,807 DEBUG [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:251)
    Returning cached instance of singleton bean ‘userController’
    2018-11-10 15:23:26,829 ERROR [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at com.yq.service.impl.UserServiceImpl.getById(UserServiceImpl.java:40)
    error find user=2 by id=User(id=2, name=Tom2, mail=qq2@163.com, regDate=Sat Nov 10 15:23:18 CST 2018)
    2018-11-10 15:23:26,830 WARN [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at com.yq.service.impl.UserServiceImpl.getById(UserServiceImpl.java:41)
    warn find user=2 by id=User(id=2, name=Tom2, mail=qq2@163.com, regDate=Sat Nov 10 15:23:18 CST 2018)
    2018-11-10 15:23:26,830 INFO [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at com.yq.service.impl.UserServiceImpl.getById(UserServiceImpl.java:42)
    info find user=2 by id=User(id=2, name=Tom2, mail=qq2@163.com, regDate=Sat Nov 10 15:23:18 CST 2018)
    2018-11-10 15:23:26,830 ERROR [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at com.yq.controller.UserController.getUser(UserController.java:37)
    error rest get user=User(id=2, name=Tom2, mail=qq2@163.com, regDate=Sat Nov 10 15:23:18 CST 2018) by id=2
    2018-11-10 15:23:26,830 WARN [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at com.yq.controller.UserController.getUser(UserController.java:38)
    warn rest get user=User(id=2, name=Tom2, mail=qq2@163.com, regDate=Sat Nov 10 15:23:18 CST 2018) by id=2
    2018-11-10 15:23:26,830 INFO [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at com.yq.controller.UserController.getUser(UserController.java:39)
    info rest get user=User(id=2, name=Tom2, mail=qq2@163.com, regDate=Sat Nov 10 15:23:18 CST 2018) by id=2
    2018-11-10 15:23:26,830 DEBUG [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at com.yq.controller.UserController.getUser(UserController.java:40)
    debug rest get user=User(id=2, name=Tom2, mail=qq2@163.com, regDate=Sat Nov 10 15:23:18 CST 2018) by id=2
    2018-11-10 15:23:26,830 TRACE [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at com.yq.controller.UserController.getUser(UserController.java:41)
    trace rest get user=User(id=2, name=Tom2, mail=qq2@163.com, regDate=Sat Nov 10 15:23:18 CST 2018) by id=2

    error1.txt内容为
    2018-11-10 15:23:20,428 ERROR [DESKTOP-8S2E5H7 restartedMain] Caller+0 at com.yq.LogbackApplication.main(LogbackApplication.java:19)
    error LogbackApplication Start done.

    控制台的内容为
    Starting application com.yq.LogbackApplication with URLs [file:/D:/E/workspaceGitub/springboot/LogbackDemo/target/classes/]
    2018-11-10 15:23:20,428 INFO [DESKTOP-8S2E5H7 restartedMain] Caller+0 at org.springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:57)
    Started LogbackApplication in 6.774 seconds (JVM running for 7.439)
    2018-11-10 15:23:20,428 ERROR [DESKTOP-8S2E5H7 restartedMain] Caller+0 at com.yq.LogbackApplication.main(LogbackApplication.java:19)
    error LogbackApplication Start done.
    2018-11-10 15:23:20,428 WARN [DESKTOP-8S2E5H7 restartedMain] Caller+0 at com.yq.LogbackApplication.main(LogbackApplication.java:20)
    warn LogbackApplication Start done.
    2018-11-10 15:23:20,428 INFO [DESKTOP-8S2E5H7 restartedMain] Caller+0 at com.yq.LogbackApplication.main(LogbackApplication.java:21)
    info LogbackApplication Start done.
    2018-11-10 15:23:20,428 DEBUG [DESKTOP-8S2E5H7 restartedMain] Caller+0 at com.yq.LogbackApplication.main(LogbackApplication.java:22)
    debug LogbackApplication Start done.
    2018-11-10 15:23:26,749 DEBUG [DESKTOP-8S2E5H7 http-nio-9090-exec-1] Caller+0 at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:149)
    Initializing servlet ‘dispatcherServlet’

    展开全文
  • 配置日志级别

    千次阅读 2020-04-16 15:36:02
    默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别 # 设置日志级别 logging.level.root=WARN 这种方式只能将日志打印在控制台上 那要是想把日志不仅要输出到控制...

    一、日志

    1、配置日志级别

    日志记录器(Logger)的行为是分等级的。如下表所示:
    分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
    默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别

    # 设置日志级别
    logging.level.root=WARN
    

    这种方式只能将日志打印在控制台上

    那要是想把日志不仅要输出到控制台也要输出到文件中,使用下面的日志工具。

    二、Logback日志

    spring boot内部使用Logback作为日志实现的框架。
    Logback和log4j非常相似,如果你对log4j很熟悉,那对logback很快就会得心应手。
    logback相对于log4j的一些优点:https://blog.csdn.net/caisini_vc/article/details/48551287

    1、配置logback日志

    • 1、删除application.properties中的日志配置
    • 2、安装idea彩色日志插件:grep-console(默认是有的,不需要安装)
    • 3、resources 中创建 logback-spring.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration  scan="true" scanPeriod="10 seconds">
        <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
        <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
        <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
        <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false-->
        <contextName>logback</contextName>
        <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
        <property name="log.path" value="D:/guli_log/edu" />
        <!-- 彩色日志 -->
        <!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 -->
        <!-- magenta:洋红 -->
        <!-- boldMagenta:粗红-->
        <!-- cyan:青色 -->
        <!-- white:白色 -->
        <!-- magenta:洋红 -->
        <property name="CONSOLE_LOG_PATTERN"
        value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
        <!--输出到控制台-->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
            <!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 -->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <encoder>
                <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
        <!--输出到文件-->
        <!-- 时间滚动输出 level为 INFO 日志 -->
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文件的路径及文件名 -->
            <file>${log.path}/log_info.log</file>
            <!--日志文件输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 每天日志归档路径以及格式 -->
                <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文件保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文件只记录info级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <!-- 时间滚动输出 level为 WARN 日志 -->
        <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文件的路径及文件名 -->
            <file>${log.path}/log_warn.log</file>
            <!--日志文件输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset> <!-- 此处设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文件保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文件只记录warn级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>warn</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <!-- 时间滚动输出 level为 ERROR 日志 -->
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文件的路径及文件名 -->
            <file>${log.path}/log_error.log</file>
            <!--日志文件输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset> <!-- 此处设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文件保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文件只记录ERROR级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <!--
            <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><logger>仅有一个name属性,
            一个可选的level和一个可选的addtivity属性。
            name:用来指定受此logger约束的某一个包或者具体的某一个类。
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
                  如果未设置此属性,那么当前logger将会继承上级的级别。
        -->
        <!--
            使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
            第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
            第二种就是单独给mapper下目录配置DEBUG模式,代码如下,这样配置sql语句会打印,其他还是正常DEBUG级别:
         -->
        <!--开发环境:打印控制台-->
        <springProfile name="dev">
            <!--可以输出项目中的debug日志,包括mybatis的sql日志-->
            <logger name="com.guli" level="INFO" />
            <!--
                root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
                level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG
                可以包含零个或多个appender元素。
            -->
            <root level="INFO">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="INFO_FILE" />
                <appender-ref ref="WARN_FILE" />
                <appender-ref ref="ERROR_FILE" />
            </root>
        </springProfile>
        <!--生产环境:输出到文件-->
        <springProfile name="pro">
            <root level="INFO">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="DEBUG_FILE" />
                <appender-ref ref="INFO_FILE" />
                <appender-ref ref="ERROR_FILE" />
                <appender-ref ref="WARN_FILE" />
            </root>
        </springProfile>
    </configuration>
    

    如果程序(例如接口)运行出异常,把异常信息输出到文件中

    2、将错误日志输出到文件

    GlobalExceptionHandler.java 中
    类上添加注解

     @Slf4j
    

    异常输出语句

     log.error(e.getMessage());
    

    3、将日志堆栈信息输出到文件
    定义工具类
    guli-framework-common下创建util包,创建ExceptionUtil.java工具类

    package com.guli.common.util;
    public class ExceptionUtil {
        public static String getMessage(Exception e) {
            StringWriter sw = null;
            PrintWriter pw = null;
            try {
                sw = new StringWriter();
                pw = new PrintWriter(sw);
                // 将出错的栈信息输出到printWriter中
                e.printStackTrace(pw);
                pw.flush();
                sw.flush();
            } finally {
                if (sw != null) {
                    try {
                        sw.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
                if (pw != null) {
                    pw.close();
                }
            }
            return sw.toString();
        }
    }
    

    调用

    log.error(ExceptionUtil.getMessage(e));
    

    GuliException中创建toString方法

    @Override
    public String toString() {
        return "GuliException{" +
            "message=" + this.getMessage() +
            ", code=" + code +
            '}';
    }
    
    展开全文
  • Log日志级别

    千次阅读 2020-05-20 16:33:41
    1. 日志级别 日志一共分成5个等级,从低到高分别是: DEBUG INFO WARNING ERROR CRITICAL 说明: DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 WARNING:一个迹象表明,一些意想不到的事情...

    1. 日志级别

    日志一共分成5个等级,从低到高分别是:

    • DEBUG
    • INFO
    • WARNING
    • ERROR
    • CRITICAL

    说明:

    • DEBUG:详细的信息,通常只出现在诊断问题上
    • INFO:确认一切按预期运行
    • WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题- 在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作。
    • ERROR:更严重的问题,软件没能执行一些功能
    • CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行

    这5个等级,也分别对应5种打日志的方法: debug 、info 、warning 、error 、critical。默认的是WARNING,当在WARNING或之上时才被跟踪。

    2. 日志输出

    有两种方式记录跟踪,一种输出控制台,另一种是记录到文件中,如日志文件。

    2.1将日志输出到控制台

    比如,log1.py 如下:

    import logging  
     
    logging.basicConfig(level=logging.WARNING,  
                        format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  
     
    # 开始使用log功能
    logging.info('这是 loggging info message')  
    logging.debug('这是 loggging debug message')  
    logging.warning('这是 loggging a warning message')  
    logging.error('这是 an loggging error message')  
    logging.critical('这是 loggging critical message')
    

    运行结果

    2017-11-06 23:07:35,725 - log1.py[line:9] - WARNING: 这是 loggging a warning message
    2017-11-06 23:07:35,725 - log1.py[line:10] - ERROR: 这是 an loggging error message
    2017-11-06 23:07:35,725 - log1.py[line:11] - CRITICAL: 这是 loggging critical message
    

    说明

    通过logging.basicConfig函数对日志的输出格式及方式做相关配置,上面代码设置日志的输出等级是WARNING级别,意思是WARNING级别以上的日志才会输出。另外还制定了日志输出的格式。

    注意,只要用过一次log功能再次设置格式时将失效,实际开发中格式肯定不会经常变化,所以刚开始时需要设定好格式。

    2.2、将日志输出到文件

    我们还可以将日志输出到文件,只需要在logging.basicConfig函数中设置好输出文件的文件名和写文件的模式。

    log2.py 如下:

    import logging  
     
    logging.basicConfig(level=logging.WARNING,  
                        filename='./log.txt',  
                        filemode='w',  
                        format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  
    # use logging  
    logging.info('这是 loggging info message')  
    logging.debug('这是 loggging debug message')  
    logging.warning('这是 loggging a warning message')  
    logging.error('这是 an loggging error message')  
    logging.critical('这是 loggging critical message')
    

    运行效果

    python@ubuntu: cat log.txt 
    2017-11-06 23:10:44,549 - log2.py[line:10] - WARNING: 这是 loggging a warning message
    2017-11-06 23:10:44,549 - log2.py[line:11] - ERROR: 这是 an loggging error message
    2017-11-06 23:10:44,549 - log2.py[line:12] - CRITICAL: 这是 loggging critical message
    

    2.3、既要把日志输出到控制台, 还要写入日志文件

    这就需要一个叫作Logger 的对象来帮忙,下面将对他进行详细介绍,现在这里先学习怎么实现把日志既要输出到控制台又要输出到文件的功能。

    import logging  
     
    # 第一步,创建一个logger  
    logger = logging.getLogger()  
    logger.setLevel(logging.INFO)  # Log等级总开关  
     
    # 第二步,创建一个handler,用于写入日志文件  
    logfile = './log.txt'  
    fh = logging.FileHandler(logfile, mode='a')  # open的打开模式这里可以进行参考
    fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关  
     
    # 第三步,再创建一个handler,用于输出到控制台  
    ch = logging.StreamHandler()  
    ch.setLevel(logging.WARNING)   # 输出到console的log等级的开关  
     
    # 第四步,定义handler的输出格式  
    formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")  
    fh.setFormatter(formatter)  
    ch.setFormatter(formatter)  
     
    # 第五步,将logger添加到handler里面  
    logger.addHandler(fh)  
    logger.addHandler(ch)  
     
    # 日志  
    logger.debug('这是 logger debug message')  
    logger.info('这是 logger info message')  
    logger.warning('这是 logger warning message')  
    logger.error('这是 logger error message')  
    logger.critical('这是 logger critical message')
    

    运行时终端的输出结果:

    2017-11-06 23:14:04,731 - log3.py[line:28] - WARNING: 这是 logger warning message
    2017-11-06 23:14:04,731 - log3.py[line:29] - ERROR: 这是 logger error message
    2017-11-06 23:14:04,731 - log3.py[line:30] - CRITICAL: 这是 logger critical message
    

    在log.txt中,有如下数据:

    2017-11-06 23:14:04,731 - log3.py[line:27] - INFO: 这是 logger info message
    2017-11-06 23:14:04,731 - log3.py[line:28] - WARNING: 这是 logger warning message
    2017-11-06 23:14:04,731 - log3.py[line:29] - ERROR: 这是 logger error message
    2017-11-06 23:14:04,731 - log3.py[line:30] - CRITICAL: 这是 logger critical message
    

    3、日志格式说明

    logging.basicConfig函数中,可以指定日志的输出格式format,这个参数可以输出很多有用的信息,如下:

    • %(levelno)s: 打印日志级别的数值
    • %(levelname)s: 打印日志级别名称
    • %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
    • %(filename)s: 打印当前执行程序名
    • %(funcName)s: 打印日志的当前函数
    • %(lineno)d: 打印日志的当前行号
    • %(asctime)s: 打印日志的时间
    • %(thread)d: 打印线程ID
    • %(threadName)s: 打印线程名称
    • %(process)d: 打印进程ID
    • %(message)s: 打印日志信息

    在工作中给的常用格式如下:

    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
    
    

    这个格式可以输出日志的打印时间,是哪个模块输出的,输出的日志级别是什么,以及输入的日志内容。

    展开全文
  • 好了,更改根记录器非常简单–假设您有一个具有所需记录级别输入参数,只需获取根记录器并通过输入记录级别进行设置,例如: Logger root = Logger.getRootLogger(); //setting the logging leve...
  • log4j.xml根据日志级别输入日志配置

    千次阅读 2017-05-18 15:25:20
    log.xml内容 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <!-- appender 是可用的日志输出方式定义,可以
  • 然而,日志的存储会占用你的硬盘空间,且日志级别的设置会影响你的软件性能。因此,我们需要定期清理日志,从而释放硬盘存储,并且设置适当的日志级别。 为方便学习,我们将分别教大家 如何清理现有的日志 和 如何...
  • log4j的日志级别以及配置

    千次阅读 2020-09-02 16:11:40
    TRACEdesignates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。 DEBUG指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一...
  • Logback:同时按照日期和大小分割日志(最新日志可以不带日期或数字) logback配置 <?xml version="1.0" encoding="UTF-8"?> <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE...
  • 最近用hyperf上线了个项目,守护进程挂着,发现平常控制台输出的日志要是查起来有点尴尬,想让日志写入文件并忽略掉DEBUG和INFO等级的日志,研究一番终于找到调整的方法,奔走相告希望能帮到大家 (实际上hyperf...
  • Spring的日志级别

    千次阅读 2018-10-16 18:21:00
    1、日志文件配置 2、日志类型和打印 转载于:https://www.cnblogs.com/smallpigger/p/9799774.html
  • 系统log4j.xml配置好了之后,系统日志级别没有按照预期的执行,控制台大量输出debug日志 debug日志 排查问题可以,但是在生产环境下,打印数量巨大,导致系统IO开销增加,影响系统性能 因此我们要想办法把debug日志...
  • logback(一)——日志等级

    千次阅读 2021-09-29 10:14:36
    文章目录前言一、日志六个级别1、TRACE2、DEBUG3.INFO4、WARNING5、ERROR6、FATAL二、日志输出考虑的因素:1、输出频率2、严重程度三、日志信息的内容:1、异常、错误信息2、调试、跟踪信息总结: 前言 在不同的版本...
  • Logback日志配置-按级别分文件输出

    千次阅读 2020-03-19 22:04:18
    <configuration> <property name="APP_NAME" value="WeiboScheduledTask"/> <property name="LOG_HOME" value="./records/WeiboScheduledTask" /> <contextName>${APP_NAME}&l...
  • 因为新入职的公司日志打印比较多,有些与业务无关、排查问题的日志打印没有必要实时输出,日志打印多了还会影响到系统...效果如下:下图中树形列表显示所有可以设置日志级别的包和类,下图选中了org.apache.comm...
  • 然而,日志的存储会占用你的硬盘空间,且日志级别的设置会影响你的软件性能。因此,我们需要定期清理日志,从而释放硬盘存储,并且设置适当的日志级别。 本期《举个栗子》,阿达要给大家分享的Tableau技巧是:...
  • commons-logging如何调整日志输出级别

    千次阅读 2017-06-06 16:17:04
    Log4j的日志配置和级别调整可以搜到很多,这里只讲commons-logging的级别配置方法: 1、在根目录建立commons-logging.properties文件,输入行 org.apache.commons.logging.Log=org.apache.commons.logging....
  • 运行时动态改变日志级别

    千次阅读 2017-10-10 20:01:38
    文章转自:...其实这不是什么神奇的trick,只是很多人包括我在一直以来使用Java的日志框架比如log4j时没有意识到可
  • FreeSwitch修改日志级别

    千次阅读 2018-01-31 10:35:29
    1、控制台显示日志级别: console loglevel [0-7] 直接在控制台输入命令即可 2、写入文件的日志级别 \FreeSwitch\conf\autoload_configs\logfile.conf.xml 修改all节点的值即可, “”表示不写 “debug,info...
  • Rust - log 日志输入到文件

    千次阅读 2020-03-29 21:47:25
    一、添加 log 依赖库 log4rs 是模仿log4j的java库 [dependencies] log = "0.4.8" log4rs = "0.11.0" 二、配置详解 ...rolling_file:可以分割处理的日志文件 b) path:指定文件路径 c) appen...
  • 生产环境不开启 DEBUG 级别日志 对于部署到生产环境的程序,我们通常会将其日志级别设置为 INFO。DEBUG 级别日志一般用于排查异常,而且通常数量较多。很少会有程序在生产环境默认开启 DEBUG 级别日志。一个...
  • 在controller中引入log4j的logger,然后将需要输出日志的controller继承此基础类。即可实现输出日志。 import org.apache.log4j.Logger;import org.springframework.stereotype.Controller; public clas
  • 2.输入组织、工程名和版本号点击next,然后在下一个界面直接finish 3.配置maven本地地址 4.引入依赖创建springBoot的启动,Application类 <!--父pop--> <parent> <groupId>org.springframe...
  • SimpleLogger仅支持基本要素,例如输出重定向,自定义日志记录格式和日志记录级别。 用法: 日志级别和阈值: 通过Logger.set_threshold设置当前阈值,该阈值确定可以看到什么级别日志条目,并传递一个常量作为...
  • python将日志写入文件

    千次阅读 2022-04-12 11:19:58
    一、日志相关概念 日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。此外,...
  • 日志级别的使用

    千次阅读 2014-01-16 17:10:44
    正确使用日志的10个技巧 博客分类: Java log4jslf4jlogback  做一个苦逼的Java攻城师, 我们除了关心系统的架构这种high level的问题, 还需要了解一些语言的陷阱, 异常的处理, 以及日志的输出, 这些...
  • logback.xml和日志输入格式说明

    千次阅读 2018-10-10 16:35:06
    off将不会输入任何日志 --> </configuration> 追加pattern说明 转换符 作用 c {length } lo {length } logger {length }输出日志的logger名,可有一个整形参数,功能是缩短logger名,...
  • 通过jmx动态修改logback的日志级别

    千次阅读 2018-08-21 21:55:12
    应用上线后常常会面对这样一种困境,即,如果把日志级别开得太高,那么当系统出现问题时不好查,如果把日志级别定得太低,那么硬盘很可能很快就被撑爆了。 这时候我们常常选择先将日志级别定高点,当出现问题时,再...
  • log4j的日志级别与使用

    万次阅读 2018-06-13 16:26:51
    1、日志级别:我们现在要调用logger的方法,不过在这个Logger对象中,有很多方法,所以要先了解log4j的日志级别,log4j规定了默认的几个级别:trace&lt;debug&lt;info&lt;warn&lt;error&lt;...
  • log4 日志级别使用

    万次阅读 2018-07-31 09:47:08
    1、日志级别: 我们现在要调用logger的方法,不过在这个Logger对象中,有很多方法,所以要先了解log4j的日志级别,log4j规定了默认的几个级别:trace&lt;debug&lt;info&lt;warn&lt;error&lt;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 149,235
精华内容 59,694
关键字:

日志输入出级别