Google Compute Engine上Maven集成Log4j日志如何导出至Stackdriver?
不用更换Log4j!两种方案实现日志导出到Stackdriver
完全没必要换日志框架,其实有成熟的方法能让你的Log4j日志直接对接Stackdriver,我给你分享两种最实用的方案:
方案一:使用官方Log4j Appender直接推送
Google Cloud提供了专门针对Log4j的日志Appender,只是可能没在你看的文档里突出显示,步骤如下:
- 添加Maven依赖
在你的pom.xml中加入Stackdriver Logging的Log4j依赖(注意替换成适配你Log4j版本的最新版):
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-logging-log4j</artifactId> <version>3.16.0</version> <!-- 请检查适配你项目的最新版本 --> </dependency>
- 配置Log4j文件
不管你用log4j.properties还是log4j.xml,都可以添加Stackdriver的Appender:
- 若用
log4j.properties:
log4j.rootLogger=INFO, stackdriver # Stackdriver Appender配置 log4j.appender.stackdriver=com.google.cloud.logging.log4j.LoggingAppender log4j.appender.stackdriver.projectId=你的GCP项目ID log4j.appender.stackdriver.log=你的日志名称(比如my-app-logs) log4j.appender.stackdriver.resourceType=gce_instance
- 若用
log4j.xml,对应配置逻辑一致,仅需调整为XML标签格式即可。
- 配置GCE实例权限
确保你的GCE实例拥有roles/logging.logWriter角色:
- 可以通过GCP控制台给实例所在的服务账号添加该角色,或者用gcloud命令:
gcloud projects add-iam-policy-binding 你的项目ID \ --member "serviceAccount:你的实例服务账号" \ --role "roles/logging.logWriter"
方案二:通过Fluentd中转日志
如果不想直接修改Log4j配置,也可以用Fluentd作为中间层,收集本地日志文件再转发到Stackdriver:
- 配置Log4j输出到本地文件
先让Log4j把日志写到本地文件,比如在log4j.properties里添加FileAppender:
log4j.rootLogger=INFO, file log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=/var/log/my-app/my-app.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=5 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
- 安装并配置Fluentd
- 在GCE实例上安装Google官方的Stackdriver Fluentd代理:
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh sudo bash add-logging-agent-repo.sh sudo apt-get update && sudo apt-get install google-fluentd
- 添加自定义配置文件(比如
/etc/google-fluentd/config.d/my-app.conf),用来监控你的日志文件:
<source> @type tail path /var/log/my-app/my-app.log pos_file /var/lib/google-fluentd/pos/my-app.pos tag my-app <parse> @type pattern format %{DATE:date} %{TIME:time} %{LOGLEVEL:level} %{DATA:class}:%{NUMBER:line} - %{GREEDYDATA:message} </parse> </source> <match my-app> @type google_cloud project_id 你的GCP项目ID </match>
- 重启Fluentd服务生效:
sudo service google-fluentd restart
测试验证
完成配置后,启动你的应用触发几条日志,然后登录GCP控制台的Stackdriver Logging页面,通过日志名称或标签过滤查询,就能看到Log4j的日志已经成功推送了。
内容的提问来源于stack exchange,提问作者Devanjal Kotia
相关产品推荐
相关产品推荐

