1. 程式人生 > >Flink--logback日誌記錄

Flink--logback日誌記錄

1、場景

  Flink內建的是log4j的記錄日誌,需要切換成logback進行記錄。因為在pom中引用了flink_kafka_connector等依賴, 在其中遇到一些問題,特此記錄。

原先pom.xml

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<flink.version>1.4.0</flink.version>
		<slf4j.version>1.7.7</slf4j.version>
		<log4j.version>1.2.17</log4j.version>
		<scala.binary.version>2.11</scala.binary.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-connector-kafka-0.8_${scala.binary.version}</artifactId>
			<version>${flink.version}</version>
		</dependency>

		<!-- Apache Flink dependencies -->
		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-core</artifactId>
			<version>${flink.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-java</artifactId>
			<version>${flink.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-clients_${scala.binary.version}</artifactId>
			<version>${flink.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
			<version>${flink.version}</version>
		</dependency>
                <!--日誌依賴-->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
			<scope>provided</scope>
		</dependency>
                <!--日誌依賴-->
	</dependencies>

log4j.properties檔案

################################################################################
#  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.
################################################################################

log4j.rootLogger=INFO, console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %-60c %x - %m%n
 
 
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = flink.log
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.name = fileLogDemo
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
log4j.appender.file.append = true

如果去掉日誌依賴,加入logback依賴,會報Class找不到,如下:

 Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 7 more

2、解決

修改後的pom.xml檔案如下,去掉kafka中的日誌依賴,然後加入logback依賴即可,具體修改如下:

        <!-- flink&kafka聯結器 -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka-0.8_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <!-- Flink 依賴開始-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-core</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <!-- Flink 依賴結束-->

        <!--logback日誌依賴開始 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-access</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.2</version>
        </dependency>

        <!--logback日誌依賴結束 -->

接下來加入logback.xml檔案(log4j.properties或者log4j.xml配置檔案可以不要了),配置不詳解,具體如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>rtas_log</contextName>
    <!-- 日誌檔案儲存路徑 -->
    <property name="LOG_HOME" value="./logs/my_log" />
    <!-- 控制檯輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成INFO級別日誌檔案 -->
    <appender name="Info"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <charset>UTF-8</charset>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名-->
            <FileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日誌檔案保留天數-->
            <MaxHistory>10</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>1MB</MaxFileSize>
        </triggeringPolicy>
        <!-- 此日誌檔案只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!-- 格式化輸出 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>


    <!-- 按照每天生成ERROR級別日誌檔案 -->
    <appender name="Error"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <charset>UTF-8</charset>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名-->
            <FileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日誌檔案保留天數-->
            <MaxHistory>10</MaxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日誌檔案最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
        <!-- 此日誌檔案只記錄error級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 日誌輸出級別 -->
    <root level="INFO">
        <!-- 控制檯輸出 -->
        <appender-ref ref="console" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="Info" />
        <appender-ref ref="Error" />
    </root>

</configuration>

相關推薦

Flink--logback日誌記錄

1、場景  Flink內建的是log4j的記錄日誌,需要切換成logback進行記錄。因為在pom中引用了flink_kafka_connector等依賴, 在其中遇到一些問題,特此記錄。原先pom.xml <properties> <project.b

springboot中過濾器的使用(以logback-日誌記錄為例)

過濾器和攔截器的區別,過濾器和攔截器的用途,面試經常被問到:https://blog.csdn.net/qq_36411874/article/details/53996873,這篇部落格寫的很詳細。 使用攔截器記錄日誌的案例:https://blog.csdn.net/qq_3128918

使用logback為springboot專案做日誌記錄

在resources目錄下新建 logback-spring.xml 檔案,內容如下: <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 存放日誌檔案的目錄 --

Springboot 日誌記錄logback

logback是log4j的擴充套件,效能更優 直接在專案的resources資料夾下新增logback.xml檔案即可,內容如下: <?xml version="1.0" encoding="UTF-8" ?> <configuration>  

使用代理模式擴充套件logback,實現自定義的日誌記錄功能

1:jdk動態代理:代理類和目標類實現相同的介面。 cglib代理:代理類是目標類的子類(因此cglib要代理的類不可以是final類,要代理的方法不可以是final方法)。 2:cglib代理本質上是通過動態的生成一個子類,去覆蓋所要代理類中不是final的方法,並設定好callbac

使用Logback日誌儲存到相對路徑記錄

說明 在使用Logback中需要儲存輸出日誌,但是卻在儲存的時候路徑出現問題 專案背景 Win7 Java Web + Tomcat 7.0(在D盤目錄下) Logback 1.1.7 案例一 Logback.xml檔案配置 <!--

使用logback實現日誌記錄

在開發中列印內容,使用 System.out.println() 和 Log4j 應當是人人皆知的方法了。  其實在開發中我們不建議使用 System.out 因為大量的使用 System.out 會增加資源的消耗。  而Log4j 更為靈活在效能上也相比 System.o

logback+slf4j實現日誌記錄

SLF4J 它不是一個真正的日誌實現,是一個抽象層,執行後臺使用任意一個日誌類庫,只需要更換依賴包和配置檔案。 LogBack + slf4j 依賴: <dependency> <groupId>org.slf4j</groupId&

配置log4j和logback日誌記錄到syslog

1. log4j配置內容如下 log4j.appender.syslog=org.apache.log4j.net.SyslogAppender log4j.appender.syslog.SyslogHost=127.0.0.1 log4j.appender.syslog

springboot使用logback日誌記錄方式:控制檯,檔案,資料庫

使用xml檔案配置:在resources下建立logback-spring.xml,spring會預設去讀這個檔案<?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPer

Spring boot logback的使用(日誌記錄

1 在spring boot中已經自動包含了logback的jar包,如果不是spring boot需要在maven中匯入依賴 <!-- https://mvnrepository.com/artifact/ch.qos.logback/logbac

【Spring MVC攔截器+logback日誌+自定義註解】實現使用者鑑權登陸和訪問日誌記錄

摘要說明: 專案中經常這樣的需要  1. 登陸鑑權:比如使用者瀏覽器發出某個請求的時候我們需要判斷這個使用者是否已經登陸,也就是cookie中是否有他的登陸資訊。 2. 訪問日誌記錄:使用者訪問請求的時候我們有必要記錄訪問者的身份資訊以及訪問了哪個url,請求引數是什麼,這

springboot的logback.xml配置和日誌記錄

最近在研究springboot的日誌,所以記錄一下,做一下總結。 幾篇關於日誌的文章: 介紹日誌:https://blog.csdn.net/gwd1154978352/article/details/78344091      https://www.cnblogs.com/bigdataZJ/p/spri

(工具類)Linux筆記之終端日誌記錄工具script

工具類 article 空間 post 令行 有時 可能 關於 edit 在學習Linux時,有時候終端的打印消息對於我們很重要,可是終端顯示也是有一定的緩沖空間的。當信息打印許多時,前面的信息就會被覆蓋掉。所以這裏網上搜索了一下這方面的介紹。現總結例如以下:

Haproxy 開啟日誌記錄

col haproxy配置 查看 手工 問題 art 日誌記錄 info provides CentOS 7上yum安裝的Haproxy,默認沒有記錄日誌。需要做一下配置才能記錄日誌。(不知道其他版本是否需要,已經忘記了)主要是用到了Haproxy,以前貌似沒有這麽麻煩,今

how tomcat works讀書筆記 七 日誌記錄

錯誤輸出 new t rac .net ase code tor apache 格式 大家能夠松一口氣了,這個組件比較簡單,這一節和前面幾節想比,也簡單的多。 Logger接口 Tomcat中的日誌記錄器都必須實現org.apache.catalina.Logger接

巧用CurrentThread.Name來統一標識日誌記錄

dao art guid slist 程序 瘦身 都沒有 ashx text 先看下面的日誌: 2017/5/21 18:00:01 [OrderQuery_180001914_C72FF]請求支付中心參數:{"order_no":"KB201705210000165

logback日誌

clas http cor qos cnblogs eap .get 第三方 sed 一、什麽是日誌框架? 是一套能夠實現日誌輸出的工具包 能夠描述系統運行狀態的所有時間都可以算作日誌 用戶下線,接口超時,數據崩潰 二、日誌框架的能力 1、定制輸出目標(文件,回滾策略,

編譯bash實現history的syslog日誌記錄

bash rpmbuild一、下載bash源碼包 [[email protected]/* */ other_x86_64]# http://vault.centos.org/6.9/os/Source/SPackages/bash-4.1.2-48.el6.src.rpm二、安裝源碼包 [[em

SLF4J - 一個允許你統一日誌記錄API的抽象層

工作 為什麽 pom font 管理 生產 由於 ring 正在 一、什麽是SLF4J 我們在做Java開發時,如果需要記錄日誌,有很多日誌API可供選擇,如: java.util.logging Apache log4j logback SLF4J又是個什麽東東呢?為