This is an automated email from the ASF dual-hosted git repository.

chesnay pushed a commit to branch release-1.12
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/release-1.12 by this push:
     new 6840153  [FLINK-20353][docs][logging] Update logging documentation
6840153 is described below

commit 6840153417fbb576977291460bcf441c5d4b1401
Author: Chesnay Schepler <[email protected]>
AuthorDate: Tue Dec 8 17:05:17 2020 +0100

    [FLINK-20353][docs][logging] Update logging documentation
---
 docs/deployment/advanced/logging.md | 94 ++++++++++++++++++++-----------------
 1 file changed, 52 insertions(+), 42 deletions(-)

diff --git a/docs/deployment/advanced/logging.md 
b/docs/deployment/advanced/logging.md
index f12ba87..50c5ebd 100644
--- a/docs/deployment/advanced/logging.md
+++ b/docs/deployment/advanced/logging.md
@@ -23,30 +23,42 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-The logging in Flink is implemented using the slf4j logging interface. As 
underlying logging framework, log4j2 is used. We also provide logback 
configuration files and pass them to the JVM's as properties. Users willing to 
use logback instead of log4j2 can just exclude log4j2 (or delete it from the 
lib/ folder).
+All Flink processes create a log text file that contains messages for various 
events happening in that process.
+These logs provide deep insights into the inner workings of Flink, and can be 
used to detect problems (in the form of WARN/ERROR messages) and can help in 
debugging them.
+
+The log files can be accessed via the Job-/TaskManager pages of the WebUI. The 
used [Resource Provider]({% link deployment/resource-providers/index.md %}) 
(e.g., YARN) may provide additional means of accessing them.
+
+The logging in Flink uses the [SLF4J](http://www.slf4j.org/) logging interface.
+This allows you to use any logging framework that supports SLF4J, without 
having to modify the Flink source code.
+
+By default, [Log4j 2](https://logging.apache.org/log4j/2.x/index.html) is used 
as the underlying logging framework.
 
 * This will be replaced by the TOC
 {:toc}
 
-## Configuring Log4j2
+## Configuring Log4j 2
+
+Log4j 2 is controlled using property files.
 
-Log4j2 is controlled using property files. In Flink's case, the file is 
usually called `log4j.properties`. We pass the filename and location of this 
file using the `-Dlog4j.configurationFile=` parameter to the JVM.
+The Flink distribution ships with the following log4j properties files in the 
`conf` directory, which are used automatically if Log4j 2 is enabled:
 
-Flink ships with the following default properties files:
+- `log4j-cli.properties`: used by the command line interface (e.g., `flink 
run`)
+- `log4j-session.properties`: used by the command line interface when starting 
a Kubernetes/Yarn session cluster (i.e., 
`kubernetes-session.sh`/`yarn-session.sh`)
+- `log4j-console.properties`: used for Job-/TaskManagers if they are run in 
the foreground (e.g., Kubernetes)
+- `log4j.properties`: used for Job-/TaskManagers by default
 
-- `log4j-cli.properties`: Used by the Flink command line client (e.g. `flink 
run`) (not code executed on the cluster)
-- `log4j-session.properties`: Used by the Flink command line client when 
starting a YARN or Kubernetes session (`yarn-session.sh`, 
`kubernetes-session.sh`)
-- `log4j.properties`: JobManager/Taskmanager logs (both standalone and YARN)
+Log4j periodically scans this file for changes and adjusts the logging 
behavior if necessary.
+By default this check happens every 30 seconds and is controlled by the 
`monitorInterval` setting in the Log4j properties files.
 
-### Compatibility with Log4j1
+### Compatibility with Log4j 1
 
 Flink ships with the [Log4j API 
bridge](https://logging.apache.org/log4j/log4j-2.2/log4j-1.2-api/index.html), 
allowing existing applications that work against Log4j1 classes to continue 
working.
 
-If you have custom Log4j1 properties files or code that relies on Log4j1, 
please check out the official Log4j 
[compatibility](https://logging.apache.org/log4j/2.x/manual/compatibility.html) 
and [migration](https://logging.apache.org/log4j/2.x/manual/migration.html) 
guides.
+If you have custom Log4j 1 properties files or code that relies on Log4j 1, 
please check out the official Log4j 
[compatibility](https://logging.apache.org/log4j/2.x/manual/compatibility.html) 
and [migration](https://logging.apache.org/log4j/2.x/manual/migration.html) 
guides.
 
 ## Configuring Log4j1
 
-To use Flink with Log4j1 you must ensure that:
+To use Flink with [Log4j 1](https://logging.apache.org/log4j/1.2/) you must 
ensure that:
 - `org.apache.logging.log4j:log4j-core`, 
`org.apache.logging.log4j:log4j-slf4j-impl` and 
`org.apache.logging.log4j:log4j-1.2-api` are not on the classpath,
 - `log4j:log4j`, `org.slf4j:slf4j-log4j12`, 
`org.apache.logging.log4j:log4j-to-slf4j` and 
`org.apache.logging.log4j:log4j-api` are on the classpath.
 
@@ -59,49 +71,47 @@ For Flink distributions this means you have to
 
 ## Configuring logback
 
-For users and developers alike it is important to control the logging 
framework.
-The configuration of the logging framework is exclusively done by 
configuration files.
-The configuration file either has to be specified by setting the environment 
property `-Dlogback.configurationFile=<file>` or by putting `logback.xml` in 
the classpath.
-The `conf` directory contains a `logback.xml` file which can be modified and 
is used if Flink is started outside of an IDE and with the provided starting 
scripts.
-The provided `logback.xml` has the following form:
-
-{% highlight xml %}
-<configuration>
-    <appender name="file" class="ch.qos.logback.core.FileAppender">
-        <file>${log.file}</file>
-        <append>false</append>
-        <encoder>
-            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{60} 
%X{sourceThread} - %msg%n</pattern>
-        </encoder>
-    </appender>
-
-    <root level="INFO">
-        <appender-ref ref="file"/>
-    </root>
-</configuration>
-{% endhighlight %}
+To use Flink with [logback](https://logback.qos.ch/) you must ensure that:
+- `org.apache.logging.log4j:log4j-slf4j-impl` is not on the classpath,
+- `ch.qos.logback:logback-core` and `ch.qos.logback:logback-classic` are on 
the classpath.
 
-In order to control the logging level of 
`org.apache.flink.runtime.jobgraph.JobGraph`, for example, one would have to 
add the following line to the configuration file.
+In the IDE this means you have to replace such dependencies defined in your 
pom, and possibly add exclusions on dependencies that transitively depend on 
them.
 
-{% highlight xml %}
-<logger name="org.apache.flink.runtime.jobgraph.JobGraph" level="DEBUG"/>
-{% endhighlight %}
+For Flink distributions this means you have to
+- remove the `log4j-slf4j-impl` jar from the `lib` directory,
+- add the `logback-core`, and `logback-classic` jars to the `lib` directory.
+
+The Flink distribution ships with the following logback configuration files in 
the `conf` directory, which are used automatically if logback is enabled:
+- `logback-session.properties`: used by the command line interface when 
starting a Kubernetes/Yarn session cluster (i.e., 
`kubernetes-session.sh`/`yarn-session.sh`)
+- `logback-console.properties`: used for Job-/TaskManagers if they are run in 
the foreground (e.g., Kubernetes)
+- `logback.xml`: used for command line interface and Job-/TaskManagers by 
default
 
-For further information on configuring logback see [LOGback's 
manual](http://logback.qos.ch/manual/configuration.html).
+<div class="alert alert-info" markdown="span">
+  <strong>Note:</strong> Logback 1.3+ requires SLF4J 2, which is currently not 
supported.
+</div>
 
 ## Best practices for developers
 
-The loggers using slf4j are created by calling
+You can create an SLF4J logger by calling 
`org.slf4j.LoggerFactory#LoggerFactory.getLogger` with the `Class` of your 
class as an argument.
+
+We highly recommend storing this logger in a `private static final` field.
 
 {% highlight java %}
-import org.slf4j.LoggerFactory
-import org.slf4j.Logger
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-Logger LOG = LoggerFactory.getLogger(Foobar.class)
+public class Foobar {
+       private static final Logger LOG = LoggerFactory.getLogger(Foobar.class);
+
+       public static void main(String[] args) {
+               LOG.info("Hello world!");
+       }
+}
 {% endhighlight %}
 
-In order to benefit most from slf4j, it is recommended to use its placeholder 
mechanism.
-Using placeholders allows to avoid unnecessary string constructions in case 
that the logging level is set so high that the message would not be logged.
+In order to benefit most from SLF4J, it is recommended to use its placeholder 
mechanism.
+Using placeholders allows avoiding unnecessary string constructions in case 
that the logging level is set so high that the message would not be logged.
+
 The syntax of placeholders is the following:
 
 {% highlight java %}

Reply via email to