简体   繁体   English

Log4j1.x LoggingEnvent:无法获取Object

[英]Log4j1.x LoggingEnvent : can't get the Object

I use Log4j1.x for sending by Socket (SocketAppender in AsyncAppender) some loggingEvent. 我使用Log4j1.x通过Socket(AsyncAppender中的SocketAppender)发送一些loggingEvent。

I send a personnal object Serializable in the LoggingEvent message. 我在LoggingEvent消息中发送一个personn对象Serializable。

In the Chainsaw (example of server wide), I would like to recover my personnal object. 在Chainsaw(服务器范围的例子)中,我想恢复我的个人对象。

  • I can show the class name (event.getMessage().toString()) 我可以显示类名(event.getMessage()。toString())
  • I can get the throwable 我可以得到扔掉的东西
  • My personnal object is in a library, the same in the both projects. 我的个人对象在一个库中,在两个项目中都是相同的。

My problem : I can't instance the message. 我的问题:我无法实例化消息。

the error : 错误 :

Exception in thread "Thread-5" java.lang.ClassCastException: java.lang.String cannot be cast to com.my.MyPersonnalObject
    at org.apache.log4j.chainsaw.LoggingReceiver$Slurper.run(LoggingReceiver.java:80)
    at java.lang.Thread.run(Unknown Source)

How can I rescure my Object ? 我怎样才能重新保护我的物体?

Thanks, 谢谢,

I found a simply way. 我找到了一个简单的方法。

Override the toString of MyPersonnalObject to return an JSON value : 覆盖MyPersonnalObject的toString以返回JSON值:

@Override
public String toString()
{
    String str = "";
    try
    {
        str = objectMapper.writeValueAsString(this);
    } catch (JsonProcessingException e)
    {
        StringWriter errors = new StringWriter();
        e.printStackTrace(new PrintWriter(errors));
        str = "ERROR JSON" + errors.toString();
    }
    return str;
}

Then, on the other side, use : 然后,在另一边,使用:

public static MyPersonnalObject rescure(String jsonStr)
{
    MyPersonnalObject b = null;

    try
    {
        JsonParser jsonParser = jsonFactory.createParser(jsonStr);
        b = objectMapper.readValue(jsonParser, MyPersonnalObject.class);

    } catch (JsonParseException e)
    {
        e.printStackTrace();
    } catch (IOException e)
    {
        e.printStackTrace();
    }
    return b;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM