兼容Java&Net的日志平台技术设计方案

举报
架构师聊技术 发表于 2021/12/23 11:06:30 2021/12/23
【摘要】 这是给公司设计的统一日志平台方案,由于公司采用两套技术栈,所以设计及测试方案的时候,要兼容java、net,目前该方案已经用在项目中,现分享出来供大家参考,喜欢的朋友别忘了给个关注。

序号

时间

备注

0

2021/12/21

初始版本

一 功能需求

  • 技术路线尽量统一
  • NET、Java 项目的日志整合,方便查询
  • 对业务入侵性低

二 技术实现

  • 采用目前比较成熟的ELK日志系统,可对不同的开发语言进行收集。

三 架构实现

  • 部署
兼容Java&Net的日志平台技术设计方案


  • 数据流程
兼容Java&Net的日志平台技术设计方案


四 项目接入

  • Net
    • 添加 NLog.Targets.ElasticSearch 程序包
    • 编辑Nlog.config
<extensions> 
  <add assembly="NLog.Targets.ElasticSearch"/> 
</extensions> 
<target xsi:type="ElasticSearch" name="ElasticLog" uri="http://192.168.1.215:9200" index="nlog-${date:format=yyyy.MM.dd}" documentType="logevent" includeAllProperties="true">
  <field name="private" layout="${assembly-version}" />
 </target> 
<rules> 
  <logger name="Kibana" minlevel="Info" writeTo="ElasticLog"/> 
 </rules>
    • 添加日志帮助 Utils
    public class LogHelper
    {
        private static Logger logger;
        private static string logRuleName = "Kibana";
        static LogHelper()
        {
            logger = LogManager.GetLogger(logRuleName);
            logger.LoggerReconfigured += logger_LoggerReconfigured;
        }

        static void logger_LoggerReconfigured(object sender, System.EventArgs e)
        {
            logger = LogManager.GetLogger(logRuleName);
        }

        public static void WirtError(string message)
        {
            logger.Log(LogLevel.Error, message);
        }

        public static void WirtDebug(string message)
        {
            logger.Log(LogLevel.Debug, message);
        }
    }
    •  记录日志
LogHelper.WirtError("日志记录");
  • Java
    • 添加Logback日志组件
<dependency>
   <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
   <version>5.1</version>
</dependency>
  • 日志配置信息
<appender name="logstash"
          class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>xxx.xxx.xxx.xxx:xxxx</destination>
    <queueSize>1048576</queueSize>
    <!-- encoder必须配置,有多种可选 -->
    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
        <customFields>{"appname":"${Application_Name}"}</customFields>
    </encoder>
    <connectionStrategy>
        <roundRobin>
            <connectionTTL>5 minutes</connectionTTL>
        </roundRobin>
    </connectionStrategy>
</appender>
  • Root配置
<springProfile name="log">
        <root level="debug"><appender-ref ref="logstash" /></root>
 </springProfile>
  • 在logstash的配置文件路径,默认为/etc/logstash/conf.d添加文件biz_es.conf,文件名称可以自己根据实际需求修改。
input {
        tcp {  
        ##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9601端口接收logback发出的消息  
            host => "0.0.0.0"
        #模式选择为server  
            mode => "server" 
            port => xxxx
        ##格式json  
            codec => "json"
            type => "server"
        }  
    
    } 
    
    output {
            if[type]=="server"{
            elasticsearch {
            action => "index"
            #ES地址
                    hosts => "192.168.1.215"
            #指定索引名字,不适用默认的,用来区分各个项目
                    index => "%{[appname]}-%{+YYYY.MM.dd}"
            }
        }
    }

到这里elk搭建及java&net使用就完成了,如果使用过程中遇到什么问题,可以留言交流。

喜欢的朋友记得给个关注~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。