Log4J SocketAppender 吞下来自远程客户端的调试信息

2024-03-20

我已经配置了一个简单套接字服务器 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SimpleSocketServer.html

public class Simple {

    public static void main(String[] args) {  
        try  
        {  
        String[] arguments = {"4445", "src/server.xml"};  
        SimpleSocketServer.main(arguments);  

        }  
        catch (Exception ex)  
        {  
          System.out.println(ex.getMessage());
        }  
}
}

具有以下配置:

服务器.xml

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
<appender name="rolling" class="org.apache.log4j.RollingFileAppender">  
    <layout class="org.apache.log4j.PatternLayout">  
      <param name="ConversionPattern" value="%5p (%d{DATE}) [%t] (%F:%L) - %m%n"/>  
    </layout>  
    <param name="File" value="C:/ponies/async.log"/>  
    <param name="MaxFileSize" value="10KB"/>  
    <param name="MaxBackupIndex" value="5"/>  
  </appender>  

  <root>   
    <param name="level" value="INFO"/>  
    <appender-ref ref="rolling" />   
  </root>  
</log4j:configuration> 

和一个客户端应用程序:

public class Client {

    private static Log logger = LogFactory.getLog(Client.class);
    public static void main(String[] a) {
        // -- Start a new SocketNode

        try {
            DOMConfigurator.configure("client.xml"); 
            String m_hostName = "localhost";
            String m_port = "4445";
            System.out.println("Accessing socket on host " + m_hostName
                    + " through port " + m_port);
            Socket socket = new Socket(m_hostName,
                    new Integer(m_port).intValue());

            // -- All right so far, now create the SocketNode
            System.out.println("Create the SocketNode listener");
            SocketAppender sa = new SocketAppender("localhost", 4445);
            System.out.println("Activating!");
            sa.activateOptions();
            System.out.println("Attempting to log");
            String logMsg = "Writing log event through SocketAppender instance";
            LoggingEvent le = new LoggingEvent("category",Logger.getRootLogger(),new Date().getTime(),Level.DEBUG,logMsg,new Throwable());
            System.out.println("Appending!");
            sa.append(le);
            logger.info("Testing!");
            new SocketNode(socket, new Hierarchy(Logger.getRootLogger()));
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

哪个正确记录到文件async.log .

客户端.xml

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
  <appender name="async" class="org.apache.log4j.AsyncAppender">  
  <appender-ref ref="console" />  
  <appender-ref ref="socket" />  
  <param name="Blocking" value="false"/>  
  <param name="bufferSize" value="256"/>  
  </appender>  

  <appender name="socket" class="org.apache.log4j.net.SocketAppender">  
  <param name="Port" value="4445"/>  
  <param name="RemoteHost" value="localhost"/>  
  <param name="ReconnectionDelay" value="5000"/>  
  <param name="LocationInfo" value="true"/>  
  </appender>  

  <appender name="console" class="org.apache.log4j.ConsoleAppender">   
    <param name="Target" value="System.out"/>   
    <layout class="org.apache.log4j.PatternLayout">   
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>   
    </layout>   
  </appender>  

  <logger name="com.test.Client">  
  <param name="level" value="INFO"/>  
  </logger>  

  <root>   
    <param name="level" value="INFO"/>  
    <appender-ref ref="async" />   
  </root>  

</log4j:configuration> 

日志文件摘录:

INFO (30 Mar 2012 09:53:21,592) [main] (SimpleSocketServer.java:63) - Waiting to accept a new client.
 INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:65) - Connected to client at /127.0.0.1
 INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:66) - Starting new socket node.
 INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:63) - Waiting to accept a new client.
 INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:65) - Connected to client at /127.0.0.1
 INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:66) - Starting new socket node.
 INFO (30 Mar 2012 09:53:24,498) [main] (?:?) - Testing!  //This is the line of interest

我的问题是如何制作最后一行[main] (?:?) - Testing!记录发送它的节点以及它发生的行?


Add

<param name="LocationInfo" value="true" />

也在“异步”附加器上。

并尝试使用这个 Client 类

public static void main(String[] a) {
    try {
        DOMConfigurator.configure("src/forum9944681/client.xml");
        logger.info("Testing!");
        Thread.sleep(60000);
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Log4J SocketAppender 吞下来自远程客户端的调试信息 的相关文章

随机推荐

  • 如何在自定义 .NET Web 控件中指定必需的属性?

    private string itemId Browsable true Description Required identifier for the Item public string ItemId get return itemId
  • 按位左移函数

    我正在尝试实现一个左旋转函数 将整数 x 左旋转 n 位 例如 rotateLeft 0x87654321 4 0x76543218 法律行动 gt 到目前为止我有这个 int rotateLeft int x int n return x
  • 使用 Ant 将外部 jar 文件包含在新的 jar 文件构建中

    我刚刚 继承 了一个 Java 项目 而不是来自 Java 背景 有时我会有点迷失 Eclipse 用于在开发过程中调试和运行应用程序 我通过 Eclipse 成功创建了一个 jar 文件 其中 包含 所有必需的外部 jar 如 Log4J
  • sqlite 删除最后一行刷新不起作用

    我的列表视图上有一个长按选项 它将删除长按的数据库条目 删除确实有效 如果我退出应用程序并返回 我会看到 无行 消息 完美的 在我的代码中 我首先调用 DBadapter 方法来删 除一行 然后 我在 dbadapter 中调用 fetch
  • 如何在 python 中录制不确定持续时间的音频并允许暂停和恢复功能?

    我正在编写一个 Python 应用程序来将音频录制为 WAV 文件 直到用户按下pause or stop 暂停音频后 用户还应该能够resume记录 此外 应用程序无法预先知道录音会持续多长时间 应用程序应避免内存不足 因为录制可能会很长
  • 获取 DER 编码的公钥

    使用 BounceCastle 我可以运行以下代码 它生成密钥对并返回 ASN 1 DER 编码格式 Generate new key var generator new RsaKeyPairGenerator generator Init
  • 如何在 Dynamics CRM 2016 中使用 ExecuteWorkflowRequest 调用带有参数的操作?

    Context 我可以使用 ExecuteWorkflowRequest 成功调用操作 其中调用的操作没有参数 var request new ExecuteWorkflowRequest EntityId myEntityId Workf
  • 使用 php://memory 包装器会导致错误

    我试图通过添加一个方法来扩展 Worx 的 PHP 邮件程序类 该方法允许我使用字符串数据而不是文件路径添加附件 我想出了这样的事情 public function addAttachmentString string name encod
  • Mac OS X - 没有菜单的应用程序?

    我想构建一个没有菜单栏 停靠栏图标或位于应用程序切换器中的应用程序 基本上 它应该像 Quicksilver 一样 我通过全局热键 例如 Safari 激活它 然后会出现一个小窗口 但 Safari 不会变得不活动 也不会显示不同的菜单栏
  • MediaPlayer getDuration 返回 -1412558917

    我完全迷失了 我发现代码非常简单 并且在文档中没有找到任何返回这么大负数的原因 代码如下 private int getDuration String audioPath throws Exception mediaPlayer new M
  • iOS 6.0.1 模拟器

    我已经安装了XCode 4 5 2 它只有 6 0 的模拟器 我想要 iOS 6 0 1 iPad 模拟器 有人可以帮助我如何获得 6 0 1 版本吗 我检查了 mac 应用商店的更新 它是最新的 XCode 如果我安装 Xcode 4 6
  • 如何覆盖 Angular 中的现有组件?

    我正在尝试覆盖角度中的现有组件 我原来的组件是 Component selector app orginal templateUrl orginal component html styleUrls orginal component cs
  • 使用 StructureMap 创建插件扫描器

    我正在尝试为支付网关实现编写一个 StructureMap 插件扫描仪 我在外部库中创建了 IPaymentGateway 接口 我创建了 IPaymentGateway 的多个实现 并将这些 dll 放在我的 C Extensions 文
  • 比较 SSIS 包代码...有什么建议吗?

    我已经遇到了不可避免的情况 我必须对 SSIS 包的两个版本中的代码进行比较 除了我现在要打开 2 个 VS 实例并逐个框 逐个变量地检查它之外 您还成功使用过什么 注意 就我而言 比较重要的事情是 变量 执行SQL任务中的代码 任务顺序
  • 如何将参数从 xaml 标记文件传递到 UserControl 构造函数?

    我有一个 StepsWnd 窗口 其中使用了两次 UserControl StepProp 并在单独的文件中声明
  • Spring boot - 启动时禁用 Liquibase

    我希望有液体碱配置了我的春季启动应用程序 所以我添加了依赖项pom xml并将路径设置为master xml in application properties 这工作正常并且春季启动 runs 液体碱在启动时 问题是现在我想跑液体碱手动
  • Android Studio:导航 xml 编辑和设计视图出现问题

    我们一直在项目中使用导航组件 但偶然发现了一个似乎是我们的项目和 JetBrains Android 插件特有的问题 我无法确定它开始发生的确切时间点 但我在 AS 3 2 发布后注意到了它 该项目构建得很好 但是在编辑导航 XML 时 自
  • 自动装配依赖项注入失败;

    我正在开发一个小型 Java EE Hibernate Spring 应用程序 出现错误 Error creating bean with name articleControleur Injection of autowired depe
  • Select2 onselect一个选项将选择所有其他选项

    我在此提供了选择 2JSFIDDLE https jsfiddle net kLw8rnre 2 我如何选择一个期权呼叫All它将选择该选择字段中除自身之外的所有选项 这意味着All选项更像是 全选 按钮 并取消选择All 将取消选择所有选
  • Log4J SocketAppender 吞下来自远程客户端的调试信息

    我已经配置了一个简单套接字服务器 http logging apache org log4j 1 2 apidocs org apache log4j net SimpleSocketServer html public class Sim