////
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

    https://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.
////

[#org_apache_logging_log4j_core_appender_NullAppender]
= Null

Class:: `org.apache.logging.log4j.core.appender.NullAppender`
Provider:: `org.apache.logging.log4j:log4j-core`


An Appender that ignores log events.

Use for compatibility with version 1.2 and handy for composing a apiref:ScriptAppenderSelector[].

[#org_apache_logging_log4j_core_appender_NullAppender-XML-snippet]
== XML snippet
[source, xml]
----
<Null name=""/>
----

[#org_apache_logging_log4j_core_appender_NullAppender-attributes]
== Attributes

Optional attributes are denoted by `?`-suffixed types.

[cols="1m,1m,1m,5"]
|===
|Name|Type|Default|Description

|name
|String?
|
a|

|===
