log4j与flume整合配置(实现故障转移FailoverLog4jAppender)及问题总结

Flume系列:案例-Flume负载均衡和故障转移 系统环境:centos7Java环境:Java8案例只演示通道流程,其中Source,channel,Sink的种类按需调整故障转移配置与负载均衡两个选一个,不能同时配置。 阅读详情

实现功能:
该功能重点在log4j端
启动两个相同的flume,log4j往flume1发数据,当flume1冗机后,可以继续往flume2中发送数据.达到故障转移,达到高可用

1、依赖jar包导入,通过maven管理,pom文件增加如下配置:

<!-- log4j输出日志到flume的appender依赖包 -->  
<dependency>  
    <groupId>org.apache.flume.flume-ng-clients</groupId>  
    <artifactId>flume-ng-log4jappender</artifactId>  
    <version>1.6.0</version>  
</dependency>  

<!-- log4j 依赖包-->  
<dependency>  
    <groupId>log4j</groupId>  
    <artifactId>log4j</artifactId>  
    <version>1.2.17</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-api</artifactId>  
    <version>1.7.5</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-log4j12</artifactId>  
    <version>1.7.5</version>  
</dependency>  

2、log4j配置文件:

#log4j输出到控制台
log4j.rootLogger=INFO,stdout,writelog,flume 
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%m%n

#log4j输出到flume单机模式配置  
log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.layout=org.apache.log4j.PatternLayout
log4j.appender.flume.Hostname = 192.168.109.133
log4j.appender.flume.Port = 6501
log4j.appender.flume.UnsafeMode = true

#log4j输出到flume故障转移方式配置  
log4j.appender.writelog = org.apache.flume.clients.log4jappender.FailoverLog4jAppender
log4j.appender.writelog.Hosts = m02:6501 m03:6501
log4j.appender.writelog.MaxAttempts = 2
log4j.appender.writelog.MaxIoWorkers = 2
log4j.appender.writelog.UnsafeMode = false
log4j.appender.writelog.layout=org.apache.log4j.PatternLayout

3.问题
采用改方式配置打印日志时,出现循环打印出“Using default maxIOWorkers”导致栈溢出问题:
在getProperties方法中增加对maxIOWorkers初始化:

props.setProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS,
(Runtime.getRuntime().availableProcessors() * 2)+"");

需要重写类(FailoverLog4jAppender).重新打包

修改的如下:

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.flume.clients.log4jappender;

import org.apache.commons.lang.StringUtils;
import org.apache.flume.FlumeException;
import org.apache.flume.api.RpcClientConfigurationConstants;
import org.apache.flume.api.RpcClientFactory;
import org.apache.flume.api.RpcClientFactory.ClientType;
import org.apache.log4j.Logger;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.spi.LoggingEvent;

import java.util.Properties;

/**
 * author:edwardsbean
 */
public class FailoverLog4jAppender extends Log4jAppender {

    private String hosts;
    private String maxAttempts;
    private String maxIoWorkers;
    private boolean configured = false;

    public void setHosts(String hostNames) {
        this.hosts = hostNames;
    }

    public void setMaxAttempts(String maxAttempts) {
        this.maxAttempts = maxAttempts;
    }


    public void setMaxIoWorkers(String maxIoWorkers) {
        this.maxIoWorkers = maxIoWorkers;
    }


    Logger logger = Logger.getLogger(FailoverLog4jAppender.class);

    /**
     * 报错机制
     * @param event
     */
    @Override
    public synchronized void append(LoggingEvent event) {
        if (!configured) {
            String errorMsg = "Flume Log4jAppender not configured correctly! Cannot" +
                    " send events to Flume.";
            LogLog.error(errorMsg);
            if (getUnsafeMode()) {
                return;
            }
            //jie- 配置文件报错
            throw new FlumeException(errorMsg);
        }
        super.append(event);
    }


    /**
     * 重连机制
     * @throws FlumeException if the FailoverRpcClient cannot be instantiated.
     */
    @Override
    public void activateOptions() throws FlumeException {
        try {
            final Properties properties = getProperties(hosts, maxAttempts, maxIoWorkers,getTimeout());
            rpcClient = RpcClientFactory.getInstance(properties);
            if (layout != null) {
                layout.activateOptions();
            }
            configured = true;
        } catch (Exception e) {
            String errormsg = "RPC client creation failed! " + e.getMessage();
            LogLog.error(errormsg);
            logger.error("RPC client creation failed!" + "连接错误");
            if (getUnsafeMode()) {
                return;
            }
            throw new FlumeException(e);
        }

    }

    //配置必要的参数 说到底,就是配置文件
    /**
     * jie:ps自己重写获取配置文件信息,将多个网络端口配置起,是用FAILOVER(故障转移)
     * @param hosts        多个主机名
     * @param maxAttempts  主机数量
     * @param timeout      连接超时时间
     * @return
     * @throws FlumeException
     */
    private Properties getProperties(String hosts, String maxAttempts,String maxIoWorkers, long timeout) throws FlumeException {
        //获取多个主机名的hostsname
        if (StringUtils.isEmpty(hosts)) {
            throw new FlumeException("hosts must not be null");
        }


        Properties props = new Properties();
        //获取hostsname数组,按正则切分, \\s -> 空格   \\s+ ->  多个空格
        //datanode4:6501 datanode6:6501
        String[] hostsAndPorts = hosts.split("\\s+");
        StringBuilder names = new StringBuilder();
        for (int i = 0; i < hostsAndPorts.length; i++) {
            String hostAndPort = hostsAndPorts[i];
            String name = "h" + i;
            props.setProperty(RpcClientConfigurationConstants.CONFIG_HOSTS_PREFIX + name,
                    hostAndPort);
            names.append(name).append(" ");
        }
        props.put(RpcClientConfigurationConstants.CONFIG_HOSTS, names.toString());
        //客户端连接方式: CONFIG_CLIENT_TYPE -> client.type
        //DEFAULT_FAILOVER : 故障转移   (NettyAvroRpcClient(普通连接),FAILOVER(故障转移),LOADBALANCE(负载均衡),THRIFT(节约模式?))
        props.put(RpcClientConfigurationConstants.CONFIG_CLIENT_TYPE,
                ClientType.DEFAULT_FAILOVER.toString());

        if (StringUtils.isEmpty(maxAttempts)) {
            throw new FlumeException("hosts must not be null");
        }

        //一样
        props.put(RpcClientConfigurationConstants.CONFIG_MAX_ATTEMPTS, maxAttempts);
        //一样
        props.setProperty(RpcClientConfigurationConstants.CONFIG_CONNECT_TIMEOUT,
                String.valueOf(timeout));
        //一样
        props.setProperty(RpcClientConfigurationConstants.CONFIG_REQUEST_TIMEOUT,
                String.valueOf(timeout));
      /*  props.setProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS,
                String.valueOf(maxIoWorkers));   */
      //与slf4j框架bug 冲突
      //采用负载均衡方式配置打印日志时,出现循环打印出“Using default maxIOWorkers”导致栈溢出问题
      //在getProperties方法中增加对maxIOWorkers初始化
        props.setProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS,
                (Runtime.getRuntime().availableProcessors() * 2)+"");


        return props;
    }
}

测试代码:

package log;

import org.apache.log4j.Logger;

import java.io.IOException;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Created by Administrator on 2016/11/2.
 */
public class log4j {

    public static void main(String[] args) throws Exception {
        Logger logger = Logger.getLogger(log4j.class);
        //通过配置文件,将信息,发送到flume source中
        String url = "测试数据";
        System.out.println("开始发送");
        logger.info("log4j7测试数据" + " thread send message  on -");

        thread mTh1 = new thread("A");
        try {
            mTh1.start();
        } catch (Exception e) {
            logger.info("程序出现错误,骚等片刻100S:" + e.toString());
            try {
                mTh1.sleep(100000);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }

    }
}

class thread extends Thread {

    String message = "----->testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest" +
            "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest";

    Logger logger = Logger.getLogger(thread.class);
    Logger bpe1 = Logger.getLogger("vehicle_exam_event_his");
    Logger bpe2 = Logger.getLogger("vehicle_exam_score_his");
    Logger dse1 = Logger.getLogger("device_statushis");
    Logger dse2 = Logger.getLogger("device_statushis_invisible");
    Logger dse3 = Logger.getLogger("device_statushis_vehicle");
    Logger dse4 = Logger.getLogger("device_statushis_vehicle_invisible");
    Logger dse5 = Logger.getLogger("vehicle_behavior_point");
    Logger dse6 = Logger.getLogger("vehicle_behavior_process");

    private String name;

    public thread(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        Socket socket = null;
        try {
            socket = new Socket("datanode4",41414);
        } catch (IOException e) {
            e.printStackTrace();
        }

        SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
        String format = null;
        Long currtime = null;
        String test = "是否丢失 数据 log4j7测试数据";
        String mess = "thread send message  on -";
        String what = "- :  ---" + name + " for ";
        int i = 0;

        while (true) {
            try {
                if(socket.isConnected()){
                    currtime = System.currentTimeMillis();
                    format = time.format(currtime);
                    logger.info(test + mess + format + what + i++ + message);
                    System.out.println("41414端口开放");
                    sleep(2000);
                }else {
                    System.out.println("没有连接");
                    sleep(2000);
                }

            } catch (Exception e) {
                System.out.println("here");
                System.out.println(e);
            }

        }


    }
}
达梦DCA2023年10月培训及考试总结 本次培训共分三天,培训内容不单单是DCA的单机安装、实例创建、库表操作等,培训内容是把关系型数据库的理论及DM8的产品结合起来讲,很实用。具体的考试则是需要个人大量的线下练习,考试总体而言都是培训讲过的内容,只要用心听,好好练习,哪怕是没有计算机基础的童鞋也能考过。提示:以下是本篇文章正文内容,下面案例可供参考总体而言,本次考试不是很难,用心准备,考前认真听讲,考后多次练习,基本都能通过。 阅读详情

相关推荐

基于APDL语言的结构优化设计

同理,二次微分值称为二阶值。通俗地讲优化分析,指的找到一种方案可以满足所有的设计要求,而且所需的支出(如重量,面积,体积,应力,费用等)最小。设计方案的任何方面都是可以优化的,比如说:尺寸(如厚度),形状(如过渡圆角的大小),支撑位置,制造费用,自然频率,材料特性等。完成分析文件的建立后,就可以进行优化分析了,如果在交互方式下进行优化的话,最好先在ANSYS数据库中用分析文件建立参数,其优点有:初始参数可以作为一阶分析方法的起点,且对于优化过程参数在数据库中可以在GUI下进行操作,便于定义优化变量。

m0_73816777的博客 1175

flume环境部署(二)

flume HA部署环境 使用的基础环境版本:CentOS7、hadoop-3.2.2、flume-1.9.0、zookeeper-3.6.2、jdk1.8.0 hadoop部署请看《hadoop3.2.2集群搭建》 虚拟机列表及角色部署 主机名 IP 角色 node1 192.168.56.114 agent node1 192.168.56.115 agent, collector node3 192.168.56.116 collector flume配置 解压flu

LW_ICE 368

EPS+ArcGIS+CASS三剑客:等高线裁剪的完整工作流与避坑指南

本文详细介绍了EPS、ArcGIS和CASS三款软件在等高线裁剪中的协同工作流程与避坑指南。通过发挥各软件优势,解决数据完整性、拓扑准确性和流程可靠性等核心挑战,提升40%以上的工作效率。特别适合大型测绘项目中复杂地形的处理,涵盖数据准备、核心处理到后期优化的全流程。

weixin_30352645的博客 618

【Flume】高级组件之Sink Processors及项目实践(Sink负载均衡和故障转移)

Sink Processors类型包括这三种:Default Sink Processor、Load balancing Sink Processor和Failover Sink Processor。Default Sink Processor是默认的,不用配置Sink group,就是咱们现在使用的这种最普通的形式,一个Channel后面接一个Sink的形式;

ccql's Blog 2217

Ubuntu22.04下RTX2080显卡驱动、CUDA、cuDNN保姆级避坑安装指南(实测有效)

本文提供Ubuntu22.04下RTX2080显卡驱动、CUDA和cuDNN的详细安装指南,涵盖前期准备、驱动安装、CUDA版本选择、cuDNN配置及常见问题解决。通过实测有效的步骤和优化建议,帮助用户快速搭建稳定的深度学习环境,避免常见陷阱。

weixin_42540248的博客 285

从电商平台到微信私域:构建合规跳转链路的技术实现

在互联网营销与用户增长领域,链接跳转是连接不同平台、引导用户流量的基础技术。其核心原理是通过服务器端路由与参数解析,实现用户请求的接收、处理与重定向。这项技术的价值在于能够突破平台间的生态壁垒,实现流量的合规、可控迁移,尤其适用于跨平台营销、私域沉淀等场景。在实际应用中,常需处理微信环境限制、参数传递与动态内容生成等挑战。本文聚焦于电商平台(如淘宝)到微信生态的跳转需求,详细阐述了如何利用Node.js、Express框架及二维码生成技术,构建一个包含环境检测、参数传递与动态落地页的完整跳转系统,以解决微信

weixin_33889665的博客 323

Flume ——故障转移

Sink groups允许组织多个sink到一个实体上。 Sink processors能够提供在组内所有Sink之间实现负载均衡的能力,而且在失败的情况下能够进行故障转移从一个Sink到另一个Sink。 简单的说就是一个source 对应一个Sinkgroups,即多个sink,这里实际上与第六节的复用/复制情况差不多,只是这里考虑的是可靠性与性能,即故障转移与负载均衡的设置。 下面是官方配...

WJWFighting的博客 3898

零基础学simulink仿真建模--基于Simulink进行近端策略优化(PPO)路径规划的仿真建模

特点高效性与稳定性:通过引入剪裁机制,在更新策略时限制步长,从而提高了训练过程的稳定性和效率。适用于多种动作空间:可以处理连续和离散的动作空间问题。无需模型:不需要预先知道环境的确切模型,适合复杂或未知环境。挑战收敛速度与稳定性:确保算法能够在合理的时间内找到近似最优解,并保持训练过程的稳定性。探索与利用平衡:在探索新路径和利用已知信息之间取得平衡。计算资源:对于大规模状态空间和动作空间,计算资源需求较高。首先明确要模拟的任务内容。目标(例如到达指定地点、避开障碍物等)。

amy_mhd的博客 250

flume故障转移详解

1、需求: 使用Flume1监控一个端口,其sink组中的sink分别对接Flume2和Flume3 LoadBalancingSinkProcessor可以实现负载均衡的功能,FailoverSinkProcessor可以实现故障转移的功能. 2、需求分析 3、准备 在/data/flume/apache-flume/job目录下创建group2文件夹 cd /data/flume/apache-flume/job mkdir group2 4、创建flume1 agent配置文件flume-n

weixin_46122692的博客 1043

【PINN物理信息网络】基于PINN物理信息网络求解圆柱坐标中的热方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解圆柱坐标中的热方程(python)

k8291121的博客 2273

从权限对象到业务角色:把 SAP Authorization Object 讲清楚,并用 ABAP 写对一次 AUTHORITY-CHECK

摘要:SAP权限管理的核心在于Authorization Object(授权对象),它通过组合最多10个授权字段来精确控制用户访问权限。关键要点包括:1) 授权对象与ACTVT字段(如01创建/02修改/03显示)的配合使用;2) ABAP中AUTHORITY-CHECK语句的四种常见返回码(0通过/4字段不匹配/12无权限/40无效用户);3) 系统自动执行的S_TCODE事务码检查;4) 自定义授权对象时应遵循"最少且足够"原则,优先复用标准对象。在RAP和OData场景中,权限检查

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 266

二百一十六、Flume——Flume拓扑结构之负载均衡和故障转移的开发案例(亲测,附截图)

Flume拓扑结构之负载均衡和故障转移的开发案例(亲测,附截图)

tiantang2renjian的博客 1834

【即插即用模块】注意力篇 | ECCV 2024 | DPB:高低频动态分离+双提示融合,PSNR直冲40+!

本文提出了一种基于频率提示的图像恢复方法FPro,通过动态滤波器分离输入特征的高低频分量,并采用双提示块(DPB)进行频域专属提示生成与调制。DPB包含低频提示调制器(LPM)和高频提示调制器(HPM),分别处理不同频段信号,通过生成提示组件并融合解码器特征来优化恢复效果。实验表明,该方法在U型结构中表现优异,尤其适用于分割、底层视觉和多模态任务。模块通过动态无监督频率分离、频域专属提示生成和适配性融合机制,有效解决了传统方法对频域信息关注不足的问题,显著提升了图像恢复质量。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 147

Flume实战--Flume中的选择器、自动容灾(故障转移)、负载均衡的详解与操作

本文详细介绍了Apache Flume的关键特性,包括选择器、拦截器、故障转移和负载均衡。选择器负责将数据分发到多个Channel,拦截器用于修改或丢弃Event。故障转移机制能够在Sink故障时自动切换,而负载均衡则在多个Sink间分配负载。文章还提供了自定义拦截器的示例,展示了Flume在复杂数据处理中的灵活性和稳定性。

天冬忘忧的博客 1658

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Flume Avro端口传输、负载均衡、故障转移

Flume Avro端口传输、负载均衡、故障转移

Mogeko1的博客 1427

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

flume多级agent测试中遇到的问题

问题详情Using default maxIOWorkers2018-03-13 04:52:37,657 (SinkRunner-PollingRunner-DefaultSinkProcessor) [ERROR - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:160)] Unable to deliver eve...

qq_37391229的博客 2026

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

springboot At least one base package must be specified的解决方式

springboot启动错误–“springboot At least one base package must be specified” peerless_fu 2018-11-15 08:39:17 8179 收藏 1 分类专栏: 学习笔记 文章标签: springboot specified startError 版权 刚用idea社区版新建一个springboot项目,配置启动类如下: @SpringBootApplication @ComponentScan(“com.test”) @Ma

weixin_43082720的博客 6359

SpringBoot错误集汇总

1.java.lang.IllegalArgumentException: At least one base package must be specified 配置如下: 原因:主启动项上面没有添加@MapperScan注解 解决方法:添加@MapperScan注解注解 2.No qualifying bean of type ‘com.jt.mapper.UserMapper’ available: expected at least 1 bean which qualifies as aut

nickel369的博客 1453

Flume客户端flume-ng-log4jappender 负载平衡(LoadBalancingLog4jAppender)

主机DNS配置: 192.168.177.167 machine-1 192.168.177.168 machine-2 192.168.177.158 machine-0 192.168.177.174 hadoop-master hbase-master hadoop-maser 和machine-2当主机,其它机器当做collector机,存储在HDFS中。 hado...

互联网 287

报错解决:Flume实现多节点Avro Source报错

实操背景:其实很简单,就是想要使用 Avro Source ,在 master 上启动 Flume 的 Agent ,然后让 slave1 节点发送信息过来,让 master 采集到。 有小伙伴报了以下错误: org.apache.flume.FlumeException: Failed to set up server socket at org.apache.flume.source.AvroSource.start(AvroSource.java:248) at org.apache.flume.

邵奈一的博客 2467

Flume之Log4JAppender接收Log4j日志

简介 Log4JAppender和LoadBalancingLog4jAppender可以将应用服务器的日志通过AvroSource实时的把日志传输到日志服务器,然后在传输到监控系统或者是HDFS中存储,FLume的Log4JAppender和LoadBalancingLog4jAppender必须使用Log4j的异步加载器,否则日志服务器down机,将会导致应用服务器异常,影响线上环境的使用。...

qianshanding0708的博客 6589

Flume进阶之复制和多路复用、负载均衡和故障转移、聚合案例

hadoop102 上的Flume-1 监控文件/opt/module/flume-1.9.0/group.log,hadoop103 上的Flume-2 监控某一个端口的数据流,Flume-1 与 Flume-2 将数据发送给 hadoop104 上的 Flume-3,Flume-3 将最终数据打印到控制台。故障转移需求:使用 Flume1 监控一个端口,其 sink 组中的 sink 分别对接 Flume2 和 Flume3,采用FailoverSinkProcessor,实现故障转移的功能。

花&败 565

基于Flume+LOG4J+Kafka的日志采集架构方案

本文将会介绍如何使用 Flume、log4j、Kafka进行规范的日志采集。 Flume 基本概念 Flume是一个完善、强大的日志采集工具,关于它的配置,在网上有很多现成的例子和资料,这里仅做简单说明不再详细赘述。Flume包含Source、Channel、Sink三个最基本的概念: Source——日志来源,其中包括:Avro Source、Thrift Source、...

weixin_30537451的博客 419

hadoop集群hdfs文件处理时出现java.nio.channels.UnresolvedAddressException:

出现问题:在ubuntu16.04机器上使用eclipse连接hadoop集群,对hdfs上传和下载文件时出现错误信息java.nio.channels.UnresolvedAddressException; 产生原因:没有配置主机映射; 解决方法:在集群的每台机器上以及操作的机器上均配置好主机ip映射:sudo vi /etc/hosts ...

qq_42323110的博客 1924

Kafka实战——Java程序日志通过log4j到flume再到Kafka

目的:实现一个简单的测试,flume收集程序的日志信息,再将其输出到Kafka中。 Java程序:win10 flume服务、Kafka服务:centos虚拟机   1. 写Java程序 (1)导入依赖包:flume-ng-log4jappender、slf4j-simple &lt;dependency&gt; &lt;groupId&gt;org.apac...

wateryouyo的博客 3100

log4j.rootLogger

log4j.rootLogger=INFO,db语法为:      log4j.rootLogger = [ level ] , appenderName1, appenderName2, …      level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、W

成大事不在于力量多少,而在能坚持多久。 1万+
上一篇: Hive集合数据类型(Struct,Map,Array)
下一篇: Flume-ngfailover以及Loadbalance测试
yjgithub
博客等级 码龄11年 53粉丝 105原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值