소스 검색

Add pattern layout

Sam Jaffe 6 년 전
부모
커밋
f2b804fc65
2개의 변경된 파일43개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      logger.xcodeproj/project.pbxproj
  2. 39 0
      src/loggers/pattern_layout.cxx

+ 4 - 0
logger.xcodeproj/project.pbxproj

@@ -16,6 +16,7 @@
 		CD1CDEAF22556B7E00E5B6B2 /* logger_impl.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDEAE22556B7E00E5B6B2 /* logger_impl.cxx */; };
 		CD1CDEB122557FB600E5B6B2 /* default_layout.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDEB022557FB600E5B6B2 /* default_layout.cxx */; };
 		CD1CDEB32256B04600E5B6B2 /* format_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDEB22256B04600E5B6B2 /* format_test.cxx */; };
+		CD1CDEB52256C94000E5B6B2 /* pattern_layout.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDEB42256C94000E5B6B2 /* pattern_layout.cxx */; };
 		CD29739B1D7B401F00E37217 /* logger.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD2973991D7B401F00E37217 /* logger.cxx */; };
 		CD3C80C01D6A2CA300ACC795 /* format.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD3C80BE1D6A2CA300ACC795 /* format.cxx */; };
 		CD6F73EC225187BE0081ED74 /* logger in Headers */ = {isa = PBXBuildFile; fileRef = CD6F73EA225187A10081ED74 /* logger */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -78,6 +79,7 @@
 		CD1CDEAE22556B7E00E5B6B2 /* logger_impl.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = logger_impl.cxx; sourceTree = "<group>"; };
 		CD1CDEB022557FB600E5B6B2 /* default_layout.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = default_layout.cxx; sourceTree = "<group>"; };
 		CD1CDEB22256B04600E5B6B2 /* format_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = format_test.cxx; sourceTree = "<group>"; };
+		CD1CDEB42256C94000E5B6B2 /* pattern_layout.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = pattern_layout.cxx; sourceTree = "<group>"; };
 		CD2973991D7B401F00E37217 /* logger.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = logger.cxx; sourceTree = "<group>"; };
 		CD3C80BE1D6A2CA300ACC795 /* format.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = format.cxx; sourceTree = "<group>"; };
 		CD6F73EA225187A10081ED74 /* logger */ = {isa = PBXFileReference; lastKnownFileType = folder; name = logger; path = include/logger; sourceTree = "<group>"; };
@@ -140,6 +142,7 @@
 			children = (
 				CD1CDE862252E5B900E5B6B2 /* properties.cxx */,
 				CD1CDE882252E60900E5B6B2 /* file_appender.cxx */,
+				CD1CDEB42256C94000E5B6B2 /* pattern_layout.cxx */,
 				CD1CDEB022557FB600E5B6B2 /* default_layout.cxx */,
 				CD1CDE8A2252E61800E5B6B2 /* console_appender.cxx */,
 			);
@@ -348,6 +351,7 @@
 				CD1CDE8B2252E61800E5B6B2 /* console_appender.cxx in Sources */,
 				CD1CDEAF22556B7E00E5B6B2 /* logger_impl.cxx in Sources */,
 				CD1CDE892252E60900E5B6B2 /* file_appender.cxx in Sources */,
+				CD1CDEB52256C94000E5B6B2 /* pattern_layout.cxx in Sources */,
 				CD88E9632252D67A00927F40 /* common.cxx in Sources */,
 				CD1CDEB122557FB600E5B6B2 /* default_layout.cxx in Sources */,
 			);

+ 39 - 0
src/loggers/pattern_layout.cxx

@@ -0,0 +1,39 @@
+//
+//  pattern_layout.cxx
+//  logging
+//
+//  Created by Sam Jaffe on 4/4/19.
+//
+
+#include "../../../../types/resource_factory/include/resource_factory/prototype_factory.hpp"
+
+#include "logger/detail/layout.h"
+#include "logger/format.h"
+#include "logger/log_manager.h"
+#include "logger/properties.h"
+
+using namespace logging;
+
+struct pattern_layout : public layout {
+  static std::shared_ptr<layout> create(properties const &);
+  
+  pattern_layout(std::string const & fmt);
+  std::string format(logpacket const & pkt) const override;
+  
+  class format formatter;
+};
+
+std::shared_ptr<layout> pattern_layout::create(properties const & props) {
+  return std::make_shared<pattern_layout>(props["pattern"]);
+}
+
+pattern_layout::pattern_layout(std::string const & fmt) :
+  formatter(format::parse_format_string(fmt)) {}
+
+std::string pattern_layout::format(logpacket const & pkt) const {
+  return formatter.process(pkt);
+}
+
+namespace {
+  bool _ = layouts::instance().bind("PatternLayout", pattern_layout::create);
+}