Log4j1.x LoggingEnvent:无法获取对象
Log4j1.x LoggingEnvent : can't get the Object
我使用 Log4j1.x 通过套接字(AsyncAppender 中的 SocketAppender)发送一些 loggingEvent。
我在 LoggingEvent 消息中发送了一个个人对象 Serializable。
在 Chainsaw(服务器范围的示例)中,我想恢复我的私人物品。
- 我可以显示 class 名称 (event.getMessage().toString())
- 我可以得到throwable
- 我的个人对象在库中,两个项目中都一样。
我的问题:我无法实例化消息。
错误:
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)
我怎样才能拯救我的对象?
谢谢,
我找到了一个简单的方法。
将 MyPersonnalObject 的 toString 重写为 return 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;
}
然后,在另一边,使用:
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;
}
我使用 Log4j1.x 通过套接字(AsyncAppender 中的 SocketAppender)发送一些 loggingEvent。
我在 LoggingEvent 消息中发送了一个个人对象 Serializable。
在 Chainsaw(服务器范围的示例)中,我想恢复我的私人物品。
- 我可以显示 class 名称 (event.getMessage().toString())
- 我可以得到throwable
- 我的个人对象在库中,两个项目中都一样。
我的问题:我无法实例化消息。
错误:
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)
我怎样才能拯救我的对象?
谢谢,
我找到了一个简单的方法。
将 MyPersonnalObject 的 toString 重写为 return 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;
}
然后,在另一边,使用:
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;
}