You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Mikael Ståldal <mi...@magine.com> on 2017/04/05 12:01:54 UTC

Re: Kafka Appender with Programmatic Configuration

But how do you do this for KeyValuePair?

When I do:

LayoutComponentBuilder gelfBuilder = builder.newLayout("GelfLayout");
gelfBuilder.addAttribute("host", "myself");
gelfBuilder.addComponent(builder.newComponent("foo", "KeyValuePair", "bar"));

it doesn't work and I get this error message:

ERROR KeyValuePair contains an invalid element or attribute "name"

It seems like the problem is that KeyValuePair have a "key" field, but
builder.newComponent()
assumes that it has a "name" field (like Property).

On Wed, Mar 29, 2017 at 5:46 PM, Ralph Goers <ra...@dslextreme.com>
wrote:

> Mikael’s solution is correct. Every item in the ConfigurationBuilder is a
> Component. We have “special” Components for things that are always used,
> such as Loggers and Appenders. But we can’t know about every type of
> Component so in those cases you just use the generic Component.
>
> Ralph
>
> > On Mar 29, 2017, at 8:26 AM, Matt Sicker <bo...@gmail.com> wrote:
> >
> > Looks like a bug to me! Here's the issue: a Properties component is
> > injected into a kafka appender, but there is no way to create a Property
> or
> > Properties component directly via the configuration builder API. The top
> > level properties aren't injected in the kafka appender (and manager), so
> > they're unused.
> >
> > Interestingly enough, I don't see a way to inject KeyValuePair components
> > either (which is a similar plugin class in log4j-core).
> >
> > Could you make an issue here: https://issues.apache.org/
> jira/browse/LOG4J2
> >
> > On 29 March 2017 at 09:27, Marvin Geitner <mg...@novomind.com> wrote:
> >
> >> Hi all,
> >>
> >> I'm trying to configure the Kafka Appender with the programmatic
> >> configuration described in the manuals. So I created the
> >> ConfigurationFactory and set up the AppenderComponentBuilder.
> >>
> >> If I execute the Application I'll get following exception:
> >>
> >> Caused by: org.apache.kafka.common.config.ConfigException: Missing
> >> required configuration "bootstrap.servers" which has no default value.
> >>
> >> Obviously the property "bootstrap.servers" hasn't been set.
> >>
> >> A builder.addProperty("bootstrap.servers", "kafka.host"); doesn't work.
> >> In XML the configuration looks like <Property name="bootstrap.servers">
> >> kafka.host</Property>.
> >>
> >> But how do I set this in java?
> >>
> >> The code looks like the following:
> >>
> >>    static Configuration createConfiguration(final String name,
> >> ConfigurationBuilder<BuiltConfiguration> builder) {
> >>
> >>        builder.setConfigurationName(name);
> >>        builder.setStatusLevel(Level.INFO);
> >>
> >>        AppenderComponentBuilder kafkaBuilder = builder.newAppender("
> KafkaLogger
> >> ", "Kafka")
> >>                .addAttribute("topic", "testTopic");
> >>        kafkaBuilder.add(builder.newLayout("PatternLayout")
> >>                .addAttribute("pattern", "%d{HH:mm:ss:SSS} | %logger{20}
> |
> >> %msg%n%ex{5}"));
> >>
> >>        builder.add(kafkaBuilder);
> >>
> >>        builder.add(builder.newRootLogger(Level.INFO).add(
> >> builder.newAppenderRef("KafkaLogger")));
> >>
> >>        return builder.build();
> >>    }
> >>
> >> Hope someone can help me.
> >>
> >> Thanks and BR,
> >> Marvin
> >>
> >
> >
> >
> > --
> > Matt Sicker <bo...@gmail.com>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>


-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.staldal@magine.com
Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com

Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.

Re: Kafka Appender with Programmatic Configuration

Posted by Ralph Goers <ra...@dslextreme.com>.
Probably not without making a specific class to support it. As I said previously, the raw component methods are there so that they can configure anything. All the specific classes and methods do is hide that in a more user friendly interface.

Ralph

> On Apr 5, 2017, at 7:04 AM, Mikael Ståldal <mi...@magine.com> wrote:
> 
> It works to do it like this:
> 
> gelfBuilder.addComponent(builder.newComponent("KeyValuePair").addAttribute(
> "key", "foo").addAttribute("value", "bar"));
> 
> Is there no simpler way to do it?
> 
> On Wed, Apr 5, 2017 at 2:01 PM, Mikael Ståldal <mi...@magine.com>
> wrote:
> 
>> But how do you do this for KeyValuePair?
>> 
>> When I do:
>> 
>> LayoutComponentBuilder gelfBuilder = builder.newLayout("GelfLayout");
>> gelfBuilder.addAttribute("host", "myself");
>> gelfBuilder.addComponent(builder.newComponent("foo", "KeyValuePair", "bar"));
>> 
>> it doesn't work and I get this error message:
>> 
>> ERROR KeyValuePair contains an invalid element or attribute "name"
>> 
>> It seems like the problem is that KeyValuePair have a "key" field, but
>> builder.newComponent()
>> assumes that it has a "name" field (like Property).
>> 
>> On Wed, Mar 29, 2017 at 5:46 PM, Ralph Goers <ra...@dslextreme.com>
>> wrote:
>> 
>>> Mikael’s solution is correct. Every item in the ConfigurationBuilder is a
>>> Component. We have “special” Components for things that are always used,
>>> such as Loggers and Appenders. But we can’t know about every type of
>>> Component so in those cases you just use the generic Component.
>>> 
>>> Ralph
>>> 
>>>> On Mar 29, 2017, at 8:26 AM, Matt Sicker <bo...@gmail.com> wrote:
>>>> 
>>>> Looks like a bug to me! Here's the issue: a Properties component is
>>>> injected into a kafka appender, but there is no way to create a
>>> Property or
>>>> Properties component directly via the configuration builder API. The top
>>>> level properties aren't injected in the kafka appender (and manager), so
>>>> they're unused.
>>>> 
>>>> Interestingly enough, I don't see a way to inject KeyValuePair
>>> components
>>>> either (which is a similar plugin class in log4j-core).
>>>> 
>>>> Could you make an issue here: https://issues.apache.org/jira
>>> /browse/LOG4J2
>>>> 
>>>> On 29 March 2017 at 09:27, Marvin Geitner <mg...@novomind.com>
>>> wrote:
>>>> 
>>>>> Hi all,
>>>>> 
>>>>> I'm trying to configure the Kafka Appender with the programmatic
>>>>> configuration described in the manuals. So I created the
>>>>> ConfigurationFactory and set up the AppenderComponentBuilder.
>>>>> 
>>>>> If I execute the Application I'll get following exception:
>>>>> 
>>>>> Caused by: org.apache.kafka.common.config.ConfigException: Missing
>>>>> required configuration "bootstrap.servers" which has no default value.
>>>>> 
>>>>> Obviously the property "bootstrap.servers" hasn't been set.
>>>>> 
>>>>> A builder.addProperty("bootstrap.servers", "kafka.host"); doesn't
>>> work.
>>>>> In XML the configuration looks like <Property name="bootstrap.servers">
>>>>> kafka.host</Property>.
>>>>> 
>>>>> But how do I set this in java?
>>>>> 
>>>>> The code looks like the following:
>>>>> 
>>>>>   static Configuration createConfiguration(final String name,
>>>>> ConfigurationBuilder<BuiltConfiguration> builder) {
>>>>> 
>>>>>       builder.setConfigurationName(name);
>>>>>       builder.setStatusLevel(Level.INFO);
>>>>> 
>>>>>       AppenderComponentBuilder kafkaBuilder =
>>> builder.newAppender("KafkaLogger
>>>>> ", "Kafka")
>>>>>               .addAttribute("topic", "testTopic");
>>>>>       kafkaBuilder.add(builder.newLayout("PatternLayout")
>>>>>               .addAttribute("pattern", "%d{HH:mm:ss:SSS} |
>>> %logger{20} |
>>>>> %msg%n%ex{5}"));
>>>>> 
>>>>>       builder.add(kafkaBuilder);
>>>>> 
>>>>>       builder.add(builder.newRootLogger(Level.INFO).add(
>>>>> builder.newAppenderRef("KafkaLogger")));
>>>>> 
>>>>>       return builder.build();
>>>>>   }
>>>>> 
>>>>> Hope someone can help me.
>>>>> 
>>>>> Thanks and BR,
>>>>> Marvin
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Matt Sicker <bo...@gmail.com>
>>> 
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>>> 
>>> 
>> 
>> 
>> --
>> [image: MagineTV]
>> 
>> *Mikael Ståldal*
>> Senior software developer
>> 
>> *Magine TV*
>> mikael.staldal@magine.com
>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>> 
>> Privileged and/or Confidential Information may be contained in this
>> message. If you are not the addressee indicated in this message
>> (or responsible for delivery of the message to such a person), you may not
>> copy or deliver this message to anyone. In such case,
>> you should destroy this message and kindly notify the sender by reply
>> email.
>> 
> 
> 
> 
> -- 
> [image: MagineTV]
> 
> *Mikael Ståldal*
> Senior software developer
> 
> *Magine TV*
> mikael.staldal@magine.com
> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
> 
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Re: Kafka Appender with Programmatic Configuration

Posted by Mikael Ståldal <mi...@magine.com>.
It works to do it like this:

gelfBuilder.addComponent(builder.newComponent("KeyValuePair").addAttribute(
"key", "foo").addAttribute("value", "bar"));

Is there no simpler way to do it?

On Wed, Apr 5, 2017 at 2:01 PM, Mikael Ståldal <mi...@magine.com>
wrote:

> But how do you do this for KeyValuePair?
>
> When I do:
>
> LayoutComponentBuilder gelfBuilder = builder.newLayout("GelfLayout");
> gelfBuilder.addAttribute("host", "myself");
> gelfBuilder.addComponent(builder.newComponent("foo", "KeyValuePair", "bar"));
>
> it doesn't work and I get this error message:
>
> ERROR KeyValuePair contains an invalid element or attribute "name"
>
> It seems like the problem is that KeyValuePair have a "key" field, but
> builder.newComponent()
> assumes that it has a "name" field (like Property).
>
> On Wed, Mar 29, 2017 at 5:46 PM, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
>> Mikael’s solution is correct. Every item in the ConfigurationBuilder is a
>> Component. We have “special” Components for things that are always used,
>> such as Loggers and Appenders. But we can’t know about every type of
>> Component so in those cases you just use the generic Component.
>>
>> Ralph
>>
>> > On Mar 29, 2017, at 8:26 AM, Matt Sicker <bo...@gmail.com> wrote:
>> >
>> > Looks like a bug to me! Here's the issue: a Properties component is
>> > injected into a kafka appender, but there is no way to create a
>> Property or
>> > Properties component directly via the configuration builder API. The top
>> > level properties aren't injected in the kafka appender (and manager), so
>> > they're unused.
>> >
>> > Interestingly enough, I don't see a way to inject KeyValuePair
>> components
>> > either (which is a similar plugin class in log4j-core).
>> >
>> > Could you make an issue here: https://issues.apache.org/jira
>> /browse/LOG4J2
>> >
>> > On 29 March 2017 at 09:27, Marvin Geitner <mg...@novomind.com>
>> wrote:
>> >
>> >> Hi all,
>> >>
>> >> I'm trying to configure the Kafka Appender with the programmatic
>> >> configuration described in the manuals. So I created the
>> >> ConfigurationFactory and set up the AppenderComponentBuilder.
>> >>
>> >> If I execute the Application I'll get following exception:
>> >>
>> >> Caused by: org.apache.kafka.common.config.ConfigException: Missing
>> >> required configuration "bootstrap.servers" which has no default value.
>> >>
>> >> Obviously the property "bootstrap.servers" hasn't been set.
>> >>
>> >> A builder.addProperty("bootstrap.servers", "kafka.host"); doesn't
>> work.
>> >> In XML the configuration looks like <Property name="bootstrap.servers">
>> >> kafka.host</Property>.
>> >>
>> >> But how do I set this in java?
>> >>
>> >> The code looks like the following:
>> >>
>> >>    static Configuration createConfiguration(final String name,
>> >> ConfigurationBuilder<BuiltConfiguration> builder) {
>> >>
>> >>        builder.setConfigurationName(name);
>> >>        builder.setStatusLevel(Level.INFO);
>> >>
>> >>        AppenderComponentBuilder kafkaBuilder =
>> builder.newAppender("KafkaLogger
>> >> ", "Kafka")
>> >>                .addAttribute("topic", "testTopic");
>> >>        kafkaBuilder.add(builder.newLayout("PatternLayout")
>> >>                .addAttribute("pattern", "%d{HH:mm:ss:SSS} |
>> %logger{20} |
>> >> %msg%n%ex{5}"));
>> >>
>> >>        builder.add(kafkaBuilder);
>> >>
>> >>        builder.add(builder.newRootLogger(Level.INFO).add(
>> >> builder.newAppenderRef("KafkaLogger")));
>> >>
>> >>        return builder.build();
>> >>    }
>> >>
>> >> Hope someone can help me.
>> >>
>> >> Thanks and BR,
>> >> Marvin
>> >>
>> >
>> >
>> >
>> > --
>> > Matt Sicker <bo...@gmail.com>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>>
>>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@magine.com
> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.
>



-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.staldal@magine.com
Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com

Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.