c - 将 fprintf 输出重定向到端口

标签 c logging netbeans log4j netbeans-7

我在 Java 工作过,我知道基本的 C。

我必须调试不是我写的代码。在我的 Java 项目中,我一直在使用具有以下配置的 log4j:

log4j.rootCategory=INFO, A1, socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.remoteHost=localhost
log4j.appender.socket.port=4445
log4j.appender.socket.locationInfo=true
log4j.appender.A1=org.apache.log4j.ConsoleAppender

之后我使用NetBeans中的beanmill插件读取日志,以了解日志的来源。可以在源代码中搜索日志输出中的字符串,但这需要时间,而且我必须为很多语句执行此操作。 Beanmill 使它变得像单击记录的行一样简单。

现在我必须处理一些使用大量 fprintf 语句的 C 代码。

知道如何通过将 fprintf 输出重定向到端口 4445 来实现我使用 log4j 和 beanmill 所做的事情吗?

我在 Windows XP 中工作,使用 MinGW 和 NetBeans 7.3。

最佳答案

在您提到的代码片段中,您基本上是在写入 socket,即 localhost:4445

您不需要将 fprintf 重定向到一个端口。您需要使用 fprintf 实现套接字通信

套接字 不是文件句柄,因此在这种情况下您不能使用fprintf。您可以使用专为处理套接字而设计的 fprintfsock。在 Windows 上,您可以执行以下操作:

#define fprintf(a,b,...) fprintfsock(a,b,__VA_ARGS__)

void fprintfsock( SOCKET s, const char* f, ... )
{
    va_list a;
    va_start( a, f );
    //vsnprintf will return total number of characters excluiding null-terminator
    int l = vsnprintf( 0, 0, f, a ) + 1 ;
    char* buf = (char*) malloc(l);
    va_start( a, f );
    // vsnprintf will write at most l characters including null-terminator
    vsnprintf( buf, l, f, a );
    send( s, buf, l, 0 );
    free( buf );
}

关于c - 将 fprintf 输出重定向到端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701150/

相关文章:

java - 如何启用日志返回日志堆栈跟踪和未捕获的异常

spring - Spring Cloud Gateway全局异常处理/记录

java - NetBeans:无法启动 Tomcat ("The system cannot find the file specified")

java - FindOne 无法使用 Spring 工作

java - 尝试运行使用 subversion 共享的 netbeans 项目时生成错误

c - 为什么设置了 -std=c99 后 gcc 找不到 random() 接口(interface)?

C字符串与字符的输入、比较

c - 带有 clang 的宏中未使用的函数

python - 如何将函数名称包含到日志记录中

c - 是否可以在不借助汇编的情况下在 C 中为字节码解释器实现 JIT?