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 吞下来自远程客户端的调试信息 的相关文章

  • 存根方法时出现 InvalidUseOfMatchersException

    我有这个 TestNG 测试方法代码 InjectMocks private FilmeService filmeService new FilmeServiceImpl Mock private FilmeDAO filmeDao Bef
  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • Spring RestTemplate 使用 cookie 遵循重定向

    最近我遇到了一个问题 我需要做一个GET请求远程服务 我假设使用一个简单的 servlet 并且 RestTemplate 返回Too many redirects 经过一番调查 似乎对指定远程服务发出的第一个请求实际上只是一个 302 重
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • 在 Google App-Engine JAVA 中将文本转换为字符串,反之亦然

    如何从字符串转换为文本 java lang String to com google appengine api datastore Text 反之亦然 Check Javadoc http code google com appengin
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就

随机推荐

  • 如何在自定义 .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