[ 
https://issues.apache.org/jira/browse/HADOOP-7705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13122681#comment-13122681
 ] 

Steve Loughran commented on HADOOP-7705:
----------------------------------------

This patch is independent of the rest of the Hadoop codebase; it's a new logger 
than can push out JSON content that is easy for management tools to parse 
(indeed, the tests parse the data to verify round-tripping. 

The test run shows what the output is, here are some examples from it

1. Simple log message, as it looks: one JSON node per line. All values 
(escaped) strings except for time_t, which is a integer
{code}
{"name":"name","time":0,"level":"DEBUG","thread":"thread1","message":"hello, 
world"}
{code}
2. Log with a single nested exception, reformatted as multiline for 
readability. The exception class is added (if provided), and the stack is 
included as an array. 
{code}
{
    "name":"testException",
    "time":1317980185037,
    "level":"INFO",
    "thread":"quoted\"",
    "message":"new line\n and {}",
    "exceptionclass":"java.net.NoRouteToHostException",
    "stack":[
        "java.net.NoRouteToHostException: that box caught fire 3 years ago",
        "\tat 
org.apache.hadoop.log.TestLog4Json.testException(TestLog4Json.java:49)",
        "\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
        "\tat 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)",
        "\tat 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)",
        "\tat java.lang.reflect.Method.invoke(Method.java:597)",
        "\tat junit.framework.TestCase.runTest(TestCase.java:168)",
        "\tat junit.framework.TestCase.runBare(TestCase.java:134)",
        "\tat junit.framework.TestResult$1.protect(TestResult.java:110)",
        "\tat junit.framework.TestResult.runProtected(TestResult.java:128)",
        "\tat junit.framework.TestResult.run(TestResult.java:113)",
        "\tat junit.framework.TestCase.run(TestCase.java:124)",
        "\tat junit.framework.TestSuite.runTest(TestSuite.java:232)",
        "\tat junit.framework.TestSuite.run(TestSuite.java:227)",
        "\tat 
org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)",
        "\tat 
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)",
        "\tat 
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120)",
        "\tat 
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:145)",
        "\tat org.apache.maven.surefire.Surefire.run(Surefire.java:104)",
        "\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
        "\tat 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)",
        "\tat 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)",
        "\tat java.lang.reflect.Method.invoke(Method.java:597)",
        "\tat 
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:290)",
        "\tat 
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1017)"
      ]
}
{code}

One potential improvement would be to include the timestamp as a human readable 
ISO time. The reason I haven't done this is the cost of creating this data -if 
the target is a machine, it's not needed.

This log could be included as a (commented out) example in the conf/log4 file. 
It must not go in the src/test log4 file as if there is a bug in the code, that 
could break all tests. 
                
> Add a log4j back end that can push out JSON data, one per line
> --------------------------------------------------------------
>
>                 Key: HADOOP-7705
>                 URL: https://issues.apache.org/jira/browse/HADOOP-7705
>             Project: Hadoop Common
>          Issue Type: New Feature
>          Components: util
>    Affects Versions: 0.23.0, 0.24.0
>            Reporter: Steve Loughran
>            Assignee: Steve Loughran
>            Priority: Minor
>         Attachments: HADOOP-7705-log4json.patch
>
>
> If we had a back end for Log4j that pushed out log events in single line JSON 
> content, we'd have something that is fairly straightforward to machine parse. 
> If: it may be harder to do than expected. Once working HADOOP-6244 could use 
> it.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to