npm package: @jeff-tian/uni-ts
Description: TypeScript 版**云原生互联网应用开发框架**。gRPC framework in TypeScript version.
Author: jeff.tian@outlook.com
Latest version: 0.0.1

# uni

> TypeScript 版**云原生互联网应用开发框架**。

## 特性

总体来说，Uni 框架采用了中间件的方式，来实现路由、日志等功能，并且采用 Router-Controller-Service 的架构模式，使得开发只需要关注业务逻辑，工程上的事情只需要通过配置即可完成。

## 日志

<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="475px" preserveAspectRatio="none" style="width:765px;height:475px;" version="1.1" viewBox="0 0 765 475" width="765px" zoomAndPan="magnify"><defs><filter height="300%" id="f3yynhwywyiu0" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="91" x="343" y="16.708">uni-logger</text><!--cluster Logger--><polygon fill="#FFFFFF" filter="url(#f3yynhwywyiu0)" points="22,54.9531,32,44.9531,394,44.9531,394,453.9531,384,463.9531,22,463.9531,22,54.9531" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="384" x2="393" y1="54.9531" y2="45.9531"/><line style="stroke: #000000; stroke-width: 1.5;" x1="22" x2="384" y1="54.9531" y2="54.9531"/><line style="stroke: #000000; stroke-width: 1.5;" x1="384" x2="384" y1="54.9531" y2="463.9531"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="176" y="70.9482">Logger</text><!--cluster Uni--><polygon fill="#FFFFFF" filter="url(#f3yynhwywyiu0)" points="46,345.9531,56,335.9531,370,335.9531,370,429.9531,360,439.9531,46,439.9531,46,345.9531" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="360" x2="369" y1="345.9531" y2="336.9531"/><line style="stroke: #000000; stroke-width: 1.5;" x1="46" x2="360" y1="345.9531" y2="345.9531"/><line style="stroke: #000000; stroke-width: 1.5;" x1="360" x2="360" y1="345.9531" y2="439.9531"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="25" x="191.5" y="361.9482">Uni</text><!--cluster Transport--><polygon fill="#FFFFFF" filter="url(#f3yynhwywyiu0)" points="418,61.4531,428,51.4531,743,51.4531,743,276.9531,733,286.9531,418,286.9531,418,61.4531" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="733" x2="742" y1="61.4531" y2="52.4531"/><line style="stroke: #000000; stroke-width: 1.5;" x1="418" x2="733" y1="61.4531" y2="61.4531"/><line style="stroke: #000000; stroke-width: 1.5;" x1="733" x2="733" y1="61.4531" y2="286.9531"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="78" x="537.5" y="77.4482">Transport</text><!--class Logger--><rect fill="#FEFECE" filter="url(#f3yynhwywyiu0)" height="60.8047" id="Logger" style="stroke: #A80036; stroke-width: 1.5;" width="120" x="116" y="84.9531"/><ellipse cx="151.25" cy="100.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M153.5938,96.625 L153.7656,96.7031 C153.9844,96.3906 154.1875,96.2969 154.4844,96.2969 C154.7813,96.2969 155.0625,96.4375 155.2188,96.7031 C155.3125,96.8594 155.3281,96.9844 155.3281,97.4219 L155.3281,98.8438 C155.3281,99.2656 155.2969,99.4531 155.1875,99.6094 C155.0156,99.8281 154.75,99.9688 154.4844,99.9688 C154.2656,99.9688 154.0313,99.8594 153.8906,99.7188 C153.75,99.5938 153.7188,99.4688 153.6563,99.0625 C153.5625,98.6563 153.3906,98.4375 152.9063,98.1563 C152.4375,97.9063 151.8281,97.75 151.25,97.75 C149.5156,97.75 148.2656,99.0625 148.2656,100.8438 L148.2656,101.9375 C148.2656,103.6406 149.5625,104.7344 151.6094,104.7344 C152.375,104.7344 153.0625,104.6094 153.4844,104.3438 C153.6719,104.25 153.6719,104.25 154.125,103.7656 C154.3125,103.5781 154.5156,103.5 154.7344,103.5 C155.2031,103.5 155.5938,103.8906 155.5938,104.3438 C155.5938,104.7344 155.2656,105.1875 154.6875,105.5938 C153.9375,106.1406 152.7813,106.4375 151.5625,106.4375 C148.6719,106.4375 146.5625,104.5469 146.5625,101.9688 L146.5625,100.8438 C146.5625,98.125 148.5625,96.0469 151.1875,96.0469 C152.0625,96.0469 152.6563,96.1875 153.5938,96.625 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="43" x="169.75" y="105.1074">Logger</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="117" x2="235" y1="116.9531" y2="116.9531"/><ellipse cx="127" cy="128.8555" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="94" x="136" y="131.1636">Array transports</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="117" x2="235" y1="137.7578" y2="137.7578"/><!--class UniLogger--><rect fill="#FEFECE" filter="url(#f3yynhwywyiu0)" height="48" id="UniLogger" style="stroke: #A80036; stroke-width: 1.5;" width="95" x="241.5" y="222.9531"/><ellipse cx="256.5" cy="238.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M258.8438,234.625 L259.0156,234.7031 C259.2344,234.3906 259.4375,234.2969 259.7344,234.2969 C260.0313,234.2969 260.3125,234.4375 260.4688,234.7031 C260.5625,234.8594 260.5781,234.9844 260.5781,235.4219 L260.5781,236.8438 C260.5781,237.2656 260.5469,237.4531 260.4375,237.6094 C260.2656,237.8281 260,237.9688 259.7344,237.9688 C259.5156,237.9688 259.2813,237.8594 259.1406,237.7188 C259,237.5938 258.9688,237.4688 258.9063,237.0625 C258.8125,236.6563 258.6406,236.4375 258.1563,236.1563 C257.6875,235.9063 257.0781,235.75 256.5,235.75 C254.7656,235.75 253.5156,237.0625 253.5156,238.8438 L253.5156,239.9375 C253.5156,241.6406 254.8125,242.7344 256.8594,242.7344 C257.625,242.7344 258.3125,242.6094 258.7344,242.3438 C258.9219,242.25 258.9219,242.25 259.375,241.7656 C259.5625,241.5781 259.7656,241.5 259.9844,241.5 C260.4531,241.5 260.8438,241.8906 260.8438,242.3438 C260.8438,242.7344 260.5156,243.1875 259.9375,243.5938 C259.1875,244.1406 258.0313,244.4375 256.8125,244.4375 C253.9219,244.4375 251.8125,242.5469 251.8125,239.9688 L251.8125,238.8438 C251.8125,236.125 253.8125,234.0469 256.4375,234.0469 C257.3125,234.0469 257.9063,234.1875 258.8438,234.625 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="63" x="270.5" y="243.1074">UniLogger</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="242.5" x2="335.5" y1="254.9531" y2="254.9531"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="242.5" x2="335.5" y1="262.9531" y2="262.9531"/><!--class ConsoleLogger--><rect fill="#FEFECE" filter="url(#f3yynhwywyiu0)" height="48" id="ConsoleLogger" style="stroke: #A80036; stroke-width: 1.5;" width="125" x="69.5" y="222.9531"/><ellipse cx="84.5" cy="238.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M86.8438,234.625 L87.0156,234.7031 C87.2344,234.3906 87.4375,234.2969 87.7344,234.2969 C88.0313,234.2969 88.3125,234.4375 88.4688,234.7031 C88.5625,234.8594 88.5781,234.9844 88.5781,235.4219 L88.5781,236.8438 C88.5781,237.2656 88.5469,237.4531 88.4375,237.6094 C88.2656,237.8281 88,237.9688 87.7344,237.9688 C87.5156,237.9688 87.2813,237.8594 87.1406,237.7188 C87,237.5938 86.9688,237.4688 86.9063,237.0625 C86.8125,236.6563 86.6406,236.4375 86.1563,236.1563 C85.6875,235.9063 85.0781,235.75 84.5,235.75 C82.7656,235.75 81.5156,237.0625 81.5156,238.8438 L81.5156,239.9375 C81.5156,241.6406 82.8125,242.7344 84.8594,242.7344 C85.625,242.7344 86.3125,242.6094 86.7344,242.3438 C86.9219,242.25 86.9219,242.25 87.375,241.7656 C87.5625,241.5781 87.7656,241.5 87.9844,241.5 C88.4531,241.5 88.8438,241.8906 88.8438,242.3438 C88.8438,242.7344 88.5156,243.1875 87.9375,243.5938 C87.1875,244.1406 86.0313,244.4375 84.8125,244.4375 C81.9219,244.4375 79.8125,242.5469 79.8125,239.9688 L79.8125,238.8438 C79.8125,236.125 81.8125,234.0469 84.4375,234.0469 C85.3125,234.0469 85.9063,234.1875 86.8438,234.625 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="93" x="98.5" y="243.1074">ConsoleLogger</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="70.5" x2="193.5" y1="254.9531" y2="254.9531"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="70.5" x2="193.5" y1="262.9531" y2="262.9531"/><!--class RequestLogger--><rect fill="#FEFECE" filter="url(#f3yynhwywyiu0)" height="48" id="RequestLogger" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="62.5" y="375.9531"/><ellipse cx="77.5" cy="391.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M79.8438,387.625 L80.0156,387.7031 C80.2344,387.3906 80.4375,387.2969 80.7344,387.2969 C81.0313,387.2969 81.3125,387.4375 81.4688,387.7031 C81.5625,387.8594 81.5781,387.9844 81.5781,388.4219 L81.5781,389.8438 C81.5781,390.2656 81.5469,390.4531 81.4375,390.6094 C81.2656,390.8281 81,390.9688 80.7344,390.9688 C80.5156,390.9688 80.2813,390.8594 80.1406,390.7188 C80,390.5938 79.9688,390.4688 79.9063,390.0625 C79.8125,389.6563 79.6406,389.4375 79.1563,389.1563 C78.6875,388.9063 78.0781,388.75 77.5,388.75 C75.7656,388.75 74.5156,390.0625 74.5156,391.8438 L74.5156,392.9375 C74.5156,394.6406 75.8125,395.7344 77.8594,395.7344 C78.625,395.7344 79.3125,395.6094 79.7344,395.3438 C79.9219,395.25 79.9219,395.25 80.375,394.7656 C80.5625,394.5781 80.7656,394.5 80.9844,394.5 C81.4531,394.5 81.8438,394.8906 81.8438,395.3438 C81.8438,395.7344 81.5156,396.1875 80.9375,396.5938 C80.1875,397.1406 79.0313,397.4375 77.8125,397.4375 C74.9219,397.4375 72.8125,395.5469 72.8125,392.9688 L72.8125,391.8438 C72.8125,389.125 74.8125,387.0469 77.4375,387.0469 C78.3125,387.0469 78.9063,387.1875 79.8438,387.625 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="91.5" y="396.1074">RequestLogger</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="63.5" x2="188.5" y1="407.9531" y2="407.9531"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="63.5" x2="188.5" y1="415.9531" y2="415.9531"/><!--class CommonLogger--><rect fill="#FEFECE" filter="url(#f3yynhwywyiu0)" height="48" id="CommonLogger" style="stroke: #A80036; stroke-width: 1.5;" width="129" x="224.5" y="375.9531"/><ellipse cx="239.5" cy="391.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M241.8438,387.625 L242.0156,387.7031 C242.2344,387.3906 242.4375,387.2969 242.7344,387.2969 C243.0313,387.2969 243.3125,387.4375 243.4688,387.7031 C243.5625,387.8594 243.5781,387.9844 243.5781,388.4219 L243.5781,389.8438 C243.5781,390.2656 243.5469,390.4531 243.4375,390.6094 C243.2656,390.8281 243,390.9688 242.7344,390.9688 C242.5156,390.9688 242.2813,390.8594 242.1406,390.7188 C242,390.5938 241.9688,390.4688 241.9063,390.0625 C241.8125,389.6563 241.6406,389.4375 241.1563,389.1563 C240.6875,388.9063 240.0781,388.75 239.5,388.75 C237.7656,388.75 236.5156,390.0625 236.5156,391.8438 L236.5156,392.9375 C236.5156,394.6406 237.8125,395.7344 239.8594,395.7344 C240.625,395.7344 241.3125,395.6094 241.7344,395.3438 C241.9219,395.25 241.9219,395.25 242.375,394.7656 C242.5625,394.5781 242.7656,394.5 242.9844,394.5 C243.4531,394.5 243.8438,394.8906 243.8438,395.3438 C243.8438,395.7344 243.5156,396.1875 242.9375,396.5938 C242.1875,397.1406 241.0313,397.4375 239.8125,397.4375 C236.9219,397.4375 234.8125,395.5469 234.8125,392.9688 L234.8125,391.8438 C234.8125,389.125 236.8125,387.0469 239.4375,387.0469 C240.3125,387.0469 240.9063,387.1875 241.8438,387.625 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="97" x="253.5" y="396.1074">CommonLogger</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="225.5" x2="352.5" y1="407.9531" y2="407.9531"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="225.5" x2="352.5" y1="415.9531" y2="415.9531"/><!--class Transport--><rect fill="#FEFECE" filter="url(#f3yynhwywyiu0)" height="48" id="Transport" style="stroke: #A80036; stroke-width: 1.5;" width="93" x="550.5" y="222.9531"/><ellipse cx="565.5" cy="238.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M567.8438,234.625 L568.0156,234.7031 C568.2344,234.3906 568.4375,234.2969 568.7344,234.2969 C569.0313,234.2969 569.3125,234.4375 569.4688,234.7031 C569.5625,234.8594 569.5781,234.9844 569.5781,235.4219 L569.5781,236.8438 C569.5781,237.2656 569.5469,237.4531 569.4375,237.6094 C569.2656,237.8281 569,237.9688 568.7344,237.9688 C568.5156,237.9688 568.2813,237.8594 568.1406,237.7188 C568,237.5938 567.9688,237.4688 567.9063,237.0625 C567.8125,236.6563 567.6406,236.4375 567.1563,236.1563 C566.6875,235.9063 566.0781,235.75 565.5,235.75 C563.7656,235.75 562.5156,237.0625 562.5156,238.8438 L562.5156,239.9375 C562.5156,241.6406 563.8125,242.7344 565.8594,242.7344 C566.625,242.7344 567.3125,242.6094 567.7344,242.3438 C567.9219,242.25 567.9219,242.25 568.375,241.7656 C568.5625,241.5781 568.7656,241.5 568.9844,241.5 C569.4531,241.5 569.8438,241.8906 569.8438,242.3438 C569.8438,242.7344 569.5156,243.1875 568.9375,243.5938 C568.1875,244.1406 567.0313,244.4375 565.8125,244.4375 C562.9219,244.4375 560.8125,242.5469 560.8125,239.9688 L560.8125,238.8438 C560.8125,236.125 562.8125,234.0469 565.4375,234.0469 C566.3125,234.0469 566.9063,234.1875 567.8438,234.625 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="61" x="579.5" y="243.1074">Transport</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="551.5" x2="642.5" y1="254.9531" y2="254.9531"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="551.5" x2="642.5" y1="262.9531" y2="262.9531"/><!--class FileTransport--><rect fill="#FEFECE" filter="url(#f3yynhwywyiu0)" height="48" id="FileTransport" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="613" y="91.4531"/><ellipse cx="628" cy="107.4531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M630.3438,103.125 L630.5156,103.2031 C630.7344,102.8906 630.9375,102.7969 631.2344,102.7969 C631.5313,102.7969 631.8125,102.9375 631.9688,103.2031 C632.0625,103.3594 632.0781,103.4844 632.0781,103.9219 L632.0781,105.3438 C632.0781,105.7656 632.0469,105.9531 631.9375,106.1094 C631.7656,106.3281 631.5,106.4688 631.2344,106.4688 C631.0156,106.4688 630.7813,106.3594 630.6406,106.2188 C630.5,106.0938 630.4688,105.9688 630.4063,105.5625 C630.3125,105.1563 630.1406,104.9375 629.6563,104.6563 C629.1875,104.4063 628.5781,104.25 628,104.25 C626.2656,104.25 625.0156,105.5625 625.0156,107.3438 L625.0156,108.4375 C625.0156,110.1406 626.3125,111.2344 628.3594,111.2344 C629.125,111.2344 629.8125,111.1094 630.2344,110.8438 C630.4219,110.75 630.4219,110.75 630.875,110.2656 C631.0625,110.0781 631.2656,110 631.4844,110 C631.9531,110 632.3438,110.3906 632.3438,110.8438 C632.3438,111.2344 632.0156,111.6875 631.4375,112.0938 C630.6875,112.6406 629.5313,112.9375 628.3125,112.9375 C625.4219,112.9375 623.3125,111.0469 623.3125,108.4688 L623.3125,107.3438 C623.3125,104.625 625.3125,102.5469 627.9375,102.5469 C628.8125,102.5469 629.4063,102.6875 630.3438,103.125 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="82" x="642" y="111.6074">FileTransport</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="614" x2="726" y1="123.4531" y2="123.4531"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="614" x2="726" y1="131.4531" y2="131.4531"/><!--class ConsoleTransport--><rect fill="#FEFECE" filter="url(#f3yynhwywyiu0)" height="48" id="ConsoleTransport" style="stroke: #A80036; stroke-width: 1.5;" width="143" x="434.5" y="91.4531"/><ellipse cx="449.5" cy="107.4531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M451.8438,103.125 L452.0156,103.2031 C452.2344,102.8906 452.4375,102.7969 452.7344,102.7969 C453.0313,102.7969 453.3125,102.9375 453.4688,103.2031 C453.5625,103.3594 453.5781,103.4844 453.5781,103.9219 L453.5781,105.3438 C453.5781,105.7656 453.5469,105.9531 453.4375,106.1094 C453.2656,106.3281 453,106.4688 452.7344,106.4688 C452.5156,106.4688 452.2813,106.3594 452.1406,106.2188 C452,106.0938 451.9688,105.9688 451.9063,105.5625 C451.8125,105.1563 451.6406,104.9375 451.1563,104.6563 C450.6875,104.4063 450.0781,104.25 449.5,104.25 C447.7656,104.25 446.5156,105.5625 446.5156,107.3438 L446.5156,108.4375 C446.5156,110.1406 447.8125,111.2344 449.8594,111.2344 C450.625,111.2344 451.3125,111.1094 451.7344,110.8438 C451.9219,110.75 451.9219,110.75 452.375,110.2656 C452.5625,110.0781 452.7656,110 452.9844,110 C453.4531,110 453.8438,110.3906 453.8438,110.8438 C453.8438,111.2344 453.5156,111.6875 452.9375,112.0938 C452.1875,112.6406 451.0313,112.9375 449.8125,112.9375 C446.9219,112.9375 444.8125,111.0469 444.8125,108.4688 L444.8125,107.3438 C444.8125,104.625 446.8125,102.5469 449.4375,102.5469 C450.3125,102.5469 450.9063,102.6875 451.8438,103.125 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="463.5" y="111.6074">ConsoleTransport</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="435.5" x2="576.5" y1="123.4531" y2="123.4531"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="435.5" x2="576.5" y1="131.4531" y2="131.4531"/><!--link UniLogger to RequestLogger--><path d="M233.546,282.6791 C224.696,289.0381 215.872,295.9061 208,302.9531 C183.014,325.3221 158.604,355.2441 143.007,375.7001 " fill="none" id="UniLogger-RequestLogger" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="229.898,276.6931,250.354,271.1621,237.812,288.2411,229.898,276.6931" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="71" x="209" y="316.02">Inheritance</text><!--link UniLogger to CommonLogger--><path d="M289,291.4521 C289,319.0051 289,353.5361 289,375.9121 " fill="none" id="UniLogger-CommonLogger" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="282,291.2161,289,271.2161,296,291.2161,282,291.2161" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="71" x="290" y="316.02">Inheritance</text><!--link Logger to UniLogger--><path d="M206.304,162.9411 C213.646,173.1621 221.765,183.6911 230,192.9531 C239.332,203.4491 250.594,213.9941 260.767,222.8841 " fill="none" id="Logger-UniLogger" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="200.42,166.7401,194.799,146.3091,211.934,158.7751,200.42,166.7401" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="71" x="231" y="189.02">Inheritance</text><!--link Logger to ConsoleLogger--><path d="M124.559,162.0711 C121.576,166.4851 118.987,171.1271 117,175.9531 C110.801,191.0081 114.874,208.9851 120.33,222.9521 " fill="none" id="Logger-ConsoleLogger" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="119.459,157.2521,137.577,146.2621,130.267,166.1511,119.459,157.2521" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="71" x="118" y="189.02">Inheritance</text><!--link FileTransport to Transport--><path d="M656.949,139.6051 C646.736,157.7241 632.274,183.3781 620.114,204.9501 " fill="none" id="FileTransport-Transport" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="626.103,208.5801,610.184,222.5651,613.907,201.7051,626.103,208.5801" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="71" x="636" y="189.02">Inheritance</text><!--link ConsoleTransport to Transport--><path d="M515.561,139.5861 C522.591,155.3281 532.985,176.2531 545,192.9531 C548.683,198.0721 552.857,203.1701 557.201,208.0681 " fill="none" id="ConsoleTransport-Transport" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="562.525,203.5091,571.258,222.8161,552.391,213.1681,562.525,203.5091" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="71" x="546" y="189.02">Inheritance</text><!--link ConsoleTransport to ConsoleLogger--><path d="M422.624,146.4711 C397.854,155.6541 370.735,165.9721 346,175.9531 C328.465,183.0291 324.745,186.4241 307,192.9531 C270.207,206.4911 228.185,219.3021 194.543,228.9361 " fill="none" id="ConsoleTransport-ConsoleLogger" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="420.273,139.8771,441.46,139.5361,425.11,153.0151,420.273,139.8771" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="347" y="189.02">use</text><!--link ConsoleTransport to UniLogger--><path d="M449.972,149.8891 C411.65,172.7581 361.827,202.4921 327.825,222.7831 " fill="none" id="ConsoleTransport-UniLogger" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="446.443,143.8431,467.205,139.6051,453.618,155.8651,446.443,143.8431" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="406" y="189.02">use</text><!--link FileTransport to UniLogger--><path d="M593.736,146.1831 C551.097,161.1991 538.377,164.1091 502,175.9531 C445.186,194.4521 379.924,215.9341 336.772,230.1701 " fill="none" id="FileTransport-UniLogger" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="591.622,139.5051,612.812,139.3741,596.329,152.6901,591.622,139.5051" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="503" y="189.02">use</text><!--

@startuml
title uni-logger

package Logger <<Node>> {
package Uni <<Node>> {
class RequestLogger
class CommonLogger
}

class Logger {
+Array transports
}

UniLogger <|- - RequestLogger: Inheritance
UniLogger <|- - CommonLogger: Inheritance
Logger <|- - UniLogger: Inheritance
Logger <|- - ConsoleLogger: Inheritance
}

package Transport <<Node>> {
class Transport
class FileTransport
class ConsoleTransport

Transport <|-up- FileTransport: Inheritance
Transport <|-up- ConsoleTransport: Inheritance
}

ConsoleTransport <|- - ConsoleLogger: use
ConsoleTransport <|- - UniLogger: use
FileTransport <|- - UniLogger: use
@enduml

PlantUML version 1.2019.08beta17(Unknown compile time)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM
Java Version: 1.7.0_25-b15
Operating System: Linux
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>